From d108e6d7a238a83de9a2e13b149ffb3d21d87cd3 Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Wed, 17 Apr 2024 11:47:10 +0300 Subject: [PATCH 1/6] update gock --- core/healthcheck/notifier_test.go | 2 +- core/util/testutil/gock.go | 2 +- core/util/testutil/gock_test.go | 2 +- core/util/utils_test.go | 2 +- go.mod | 5 +++-- go.sum | 8 ++++++-- 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/healthcheck/notifier_test.go b/core/healthcheck/notifier_test.go index eb7b415..158a283 100644 --- a/core/healthcheck/notifier_test.go +++ b/core/healthcheck/notifier_test.go @@ -6,11 +6,11 @@ import ( "net/url" "testing" + "github.com/h2non/gock" retailcrm "github.com/retailcrm/api-client-go/v2" "github.com/retailcrm/mg-transport-core/v2/core/util/testutil" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "gopkg.in/h2non/gock.v1" ) func TestDefaultNotifyFunc(t *testing.T) { // nolint:paralleltest diff --git a/core/util/testutil/gock.go b/core/util/testutil/gock.go index 923cab9..130daf3 100644 --- a/core/util/testutil/gock.go +++ b/core/util/testutil/gock.go @@ -5,7 +5,7 @@ import ( "io" "net/http" - "gopkg.in/h2non/gock.v1" + "github.com/h2non/gock" ) // UnmatchedRequestsTestingT contains all of *testing.T methods which are needed for AssertNoUnmatchedRequests. diff --git a/core/util/testutil/gock_test.go b/core/util/testutil/gock_test.go index 23cd421..e1fcfd2 100644 --- a/core/util/testutil/gock_test.go +++ b/core/util/testutil/gock_test.go @@ -6,8 +6,8 @@ import ( "net/http" "testing" + "github.com/h2non/gock" "github.com/stretchr/testify/suite" - "gopkg.in/h2non/gock.v1" ) type testingTMock struct { diff --git a/core/util/utils_test.go b/core/util/utils_test.go index 5843e12..ce7a015 100644 --- a/core/util/utils_test.go +++ b/core/util/utils_test.go @@ -8,13 +8,13 @@ import ( "testing" "time" + "github.com/h2non/gock" "github.com/op/go-logging" retailcrm "github.com/retailcrm/api-client-go/v2" v1 "github.com/retailcrm/mg-transport-api-client-go/v1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" - "gopkg.in/h2non/gock.v1" "github.com/retailcrm/mg-transport-core/v2/core/config" diff --git a/go.mod b/go.mod index 3f0c81e..5d37a88 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/gomarkdown/markdown v0.0.0-20221013030248-663e2500819c github.com/gorilla/securecookie v1.1.1 github.com/gorilla/sessions v1.2.0 + github.com/h2non/gock v1.2.0 github.com/jessevdk/go-flags v1.4.0 github.com/jinzhu/gorm v1.9.11 github.com/nicksnyder/go-i18n/v2 v2.0.2 @@ -29,7 +30,6 @@ require ( go.uber.org/atomic v1.10.0 golang.org/x/text v0.9.0 gopkg.in/gormigrate.v1 v1.6.0 - gopkg.in/h2non/gock.v1 v1.1.2 gopkg.in/yaml.v2 v2.4.0 ) @@ -71,10 +71,10 @@ require ( github.com/mattn/go-isatty v0.0.19 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/pelletier/go-toml/v2 v2.0.8 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/stretchr/objx v0.5.0 // indirect - gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.11 // indirect golang.org/x/arch v0.3.0 // indirect @@ -82,5 +82,6 @@ require ( golang.org/x/net v0.10.0 // indirect golang.org/x/sys v0.8.0 // indirect google.golang.org/protobuf v1.30.0 // indirect + gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index d018a98..016e582 100644 --- a/go.sum +++ b/go.sum @@ -238,6 +238,8 @@ github.com/gorilla/securecookie v1.1.1/go.mod h1:ra0sb63/xPlUeL+yeDciTfxMRAA+MP+ github.com/gorilla/sessions v1.2.0 h1:S7P+1Hm5V/AT9cjEcUD5uDaQSX0OE577aCXgoaKpYbQ= github.com/gorilla/sessions v1.2.0/go.mod h1:dk2InVEVJ0sfLlnXv9EAgkf6ecYs/i80K/zI+bUmuGM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/h2non/gock v1.2.0 h1:K6ol8rfrRkUOefooBC8elXoaNGYkpp7y2qcxGG6BzUE= +github.com/h2non/gock v1.2.0/go.mod h1:tNhoxHYW2W42cYkYb1WqzdbYIieALC99kpYr7rH/BQk= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542 h1:2VTzZjLZBgl62/EtslCrtky5vbi9dd7HrQPQIx6wqiw= github.com/h2non/parth v0.0.0-20190131123155-b4df798d6542/go.mod h1:Ow0tF8D4Kplbc8s8sSb3V2oUCygFHVp8gC3Dn6U4MNI= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -293,7 +295,6 @@ github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZX github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= @@ -343,6 +344,8 @@ github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms= github.com/nicksnyder/go-i18n/v2 v2.0.2 h1:KsHGcTByIM0mHZKQGy0nlJLOjPNjQ6MVib/3PvsBDNY= github.com/nicksnyder/go-i18n/v2 v2.0.2/go.mod h1:JXS4+OKhbcwDoVTEj0sLFWL1vOwec2g/YBAxZ9owJqY= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -709,8 +712,9 @@ google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cn google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= From a1124600a6b3312d9ce7f4a624936d92443c94a1 Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Wed, 17 Apr 2024 11:52:03 +0300 Subject: [PATCH 2/6] update build --- .github/workflows/ci.yml | 6 ++--- .golangci.yml | 54 ++++++++++++---------------------------- 2 files changed, 19 insertions(+), 41 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 62dcf07..5f567fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,20 +22,20 @@ jobs: - name: Set up stable Go version uses: actions/setup-go@v3 with: - go-version: 'stable' + go-version: '1.22' - name: Get dependencies run: go mod tidy - name: Lint code with golangci-lint uses: golangci/golangci-lint-action@v3 with: - version: v1.50.1 + version: v1.55.2 only-new-issues: true tests: name: Tests runs-on: ubuntu-latest strategy: matrix: - go-version: ['1.18', '1.19', 'stable'] + go-version: ['1.18', '1.19', '1.20', '1.21', '1.22', 'stable'] steps: - name: Set up Go ${{ matrix.go-version }} uses: actions/setup-go@v3 diff --git a/.golangci.yml b/.golangci.yml index 7b3b338..07fbf97 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -6,26 +6,9 @@ output: format: colored-line-number sort-results: true -# Linters below do not support go1.18 yet because of generics. -# See https://github.com/golangci/golangci-lint/issues/2649 -# - bodyclose -# - sqlclosecheck - linters: disable-all: true enable: - - paralleltest - - tparallel - - asciicheck - - asasalint - - varnamelen - - reassign - - nilnil - - nilerr - - nakedret - - goprintffuncname - - typecheck - - errchkjson - errcheck - gosimple - govet @@ -33,6 +16,7 @@ linters: - staticcheck - unused - unparam + - bodyclose - dogsled - dupl - errorlint @@ -46,6 +30,7 @@ linters: - godot - goimports - revive + - gomnd - gosec - lll - makezero @@ -53,9 +38,10 @@ linters: - nestif - prealloc - predeclared - - exportloopref + - sqlclosecheck - unconvert - whitespace + - unused linters-settings: govet: @@ -64,11 +50,9 @@ linters-settings: enable: - assign - atomic - - atomicalign - bools - buildtag - copylocks - - fieldalignment - httpresponse - loopclosure - lostcancel @@ -80,6 +64,7 @@ linters-settings: - unmarshal - unreachable - unsafeptr + - unused settings: printf: funcs: @@ -137,6 +122,7 @@ linters-settings: - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Noticef - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Infof - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Debugf + : unused: check-exported: false unparam: @@ -147,20 +133,18 @@ linters-settings: threshold: 200 errorlint: errorf: true - asserts: false - comparison: false exhaustive: check-generated: false default-signifies-exhaustive: false funlen: - lines: 90 + lines: 60 statements: 40 gocognit: min-complexity: 25 gocyclo: min-complexity: 25 goimports: - local-prefixes: github.com/retailcrm/mg-transport-core + local-prefixes: github.com/retailcrm/mg-transport-api-client-go lll: line-length: 120 misspell: @@ -170,25 +154,23 @@ linters-settings: whitespace: multi-if: false multi-func: false - varnamelen: - max-distance: 10 - ignore-map-index-ok: true - ignore-type-assert-ok: true - ignore-chan-recv-ok: true - ignore-decls: - - t *testing.T - - e error - - i int + issues: exclude-rules: - path: _test\.go linters: + - dupl + - gomnd - lll + - bodyclose - errcheck + - sqlclosecheck - misspell - ineffassign - whitespace - makezero + - maligned + - ifshort - errcheck - funlen - goconst @@ -196,10 +178,6 @@ issues: - gocyclo - godot - unused - - errchkjson - - varnamelen - - path: \.go - text: "Error return value of `io.WriteString` is not checked" exclude-use-default: true exclude-case-sensitive: false max-issues-per-linter: 0 @@ -211,4 +189,4 @@ severity: case-sensitive: false service: - golangci-lint-version: 1.50.x + golangci-lint-version: 1.55.x \ No newline at end of file From bcf125be1f250aac7ff70442563eed82d0fbd7df Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Wed, 17 Apr 2024 12:06:22 +0300 Subject: [PATCH 3/6] fix golangci config --- .golangci.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 07fbf97..5932275 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -122,7 +122,6 @@ linters-settings: - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Noticef - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Infof - (github.com/retailcrm/mg-transport-core/core.LoggerInterface).Debugf - : unused: check-exported: false unparam: From 69286907ea944d7beebf02bee9d1eb5e2f2ba014 Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Wed, 17 Apr 2024 12:10:53 +0300 Subject: [PATCH 4/6] bigger test timeout --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f567fe..36d4a5e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,7 +46,7 @@ jobs: - name: Get dependencies run: go mod tidy - name: Tests - run: go test ./... -v -cpu 2 -timeout 10s -race -cover -coverprofile=coverage.txt -covermode=atomic + run: go test ./... -v -cpu 2 -timeout 30s -race -cover -coverprofile=coverage.txt -covermode=atomic - name: Coverage run: | go install github.com/axw/gocov/gocov@latest From 655b86abb00a727ad302dcd612894d0fb01f3fb3 Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Thu, 6 Jun 2024 14:06:15 +0300 Subject: [PATCH 5/6] add proxy support to the HTTP client built by library This change restores default *http.Transport behavior for the client built by the library. --- core/util/httputil/http_client_builder.go | 65 ++++++++++++------- .../util/httputil/http_client_builder_test.go | 10 +++ 2 files changed, 52 insertions(+), 23 deletions(-) diff --git a/core/util/httputil/http_client_builder.go b/core/util/httputil/http_client_builder.go index 5a7d4f3..2c24c5c 100644 --- a/core/util/httputil/http_client_builder.go +++ b/core/util/httputil/http_client_builder.go @@ -7,6 +7,7 @@ import ( "fmt" "net" "net/http" + "net/url" "time" "github.com/pkg/errors" @@ -24,28 +25,29 @@ var DefaultTransport = http.DefaultTransport // HTTPClientBuilder builds http client with mocks (if necessary) and timeout. // Example: -// // Build HTTP client with timeout = 10 sec, without SSL certificates verification and with mocked google.com -// client, err := NewHTTPClientBuilder(). -// SetTimeout(10). -// SetMockAddress("api_mock:3004"). -// AddMockedDomain("google.com"). -// SetSSLVerification(false). -// Build() // -// if err != nil { -// fmt.Print(err) -// } +// // Build HTTP client with timeout = 10 sec, without SSL certificates verification and with mocked google.com +// client, err := NewHTTPClientBuilder(). +// SetTimeout(10). +// SetMockAddress("api_mock:3004"). +// AddMockedDomain("google.com"). +// SetSSLVerification(false). +// Build() // -// // Actual response will be returned from "api_mock:3004" (it should provide any ssl certificate) -// if resp, err := client.Get("https://google.com"); err == nil { -// if data, err := ioutil.ReadAll(resp.Body); err == nil { -// fmt.Printf("Data: %s", string(data)) -// } else { -// fmt.Print(err) -// } -// } else { -// fmt.Print(err) -// } +// if err != nil { +// fmt.Print(err) +// } +// +// // Actual response will be returned from "api_mock:3004" (it should provide any ssl certificate) +// if resp, err := client.Get("https://google.com"); err == nil { +// if data, err := ioutil.ReadAll(resp.Body); err == nil { +// fmt.Printf("Data: %s", string(data)) +// } else { +// fmt.Print(err) +// } +// } else { +// fmt.Print(err) +// } type HTTPClientBuilder struct { logger logger.Logger httpClient *http.Client @@ -64,9 +66,20 @@ type HTTPClientBuilder struct { // NewHTTPClientBuilder returns HTTPClientBuilder with default values. func NewHTTPClientBuilder() *HTTPClientBuilder { return &HTTPClientBuilder{ - built: false, - httpClient: &http.Client{}, - httpTransport: &http.Transport{}, + built: false, + httpClient: &http.Client{}, + httpTransport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + ForceAttemptHTTP2: true, + MaxIdleConns: 100, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 10 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + }, tlsVersion: tls.VersionTLS12, timeout: 30 * time.Second, mockAddress: "", @@ -147,6 +160,11 @@ func (b *HTTPClientBuilder) SetLogging(flag bool) *HTTPClientBuilder { return b } +func (b *HTTPClientBuilder) SetProxy(proxy func(*http.Request) (*url.URL, error)) *HTTPClientBuilder { + b.httpTransport.Proxy = proxy + return b +} + // FromConfig fulfills mock configuration from HTTPClientConfig. func (b *HTTPClientBuilder) FromConfig(config *config.HTTPClientConfig) *HTTPClientBuilder { if config == nil { @@ -212,6 +230,7 @@ func (b *HTTPClientBuilder) buildMocks() error { b.logf(" - %s\n", domain) } + b.httpTransport.Proxy = nil b.httpTransport.DialContext = func(ctx context.Context, network, addr string) (conn net.Conn, e error) { var ( host string diff --git a/core/util/httputil/http_client_builder_test.go b/core/util/httputil/http_client_builder_test.go index 75e5125..277e281 100644 --- a/core/util/httputil/http_client_builder_test.go +++ b/core/util/httputil/http_client_builder_test.go @@ -92,6 +92,13 @@ func (t *HTTPClientBuilderTest) Test_SetCertPool() { assert.Equal(t.T(), pool, t.builder.httpTransport.TLSClientConfig.RootCAs) } +func (t *HTTPClientBuilderTest) Test_SetProxy() { + t.builder.SetProxy(nil) + assert.Nil(t.T(), t.builder.httpTransport.Proxy) + t.builder.SetProxy(http.ProxyFromEnvironment) + assert.NotNil(t.T(), t.builder.httpTransport.Proxy) +} + func (t *HTTPClientBuilderTest) Test_FromConfigNil() { defer func() { assert.Nil(t.T(), recover()) @@ -161,6 +168,7 @@ func (t *HTTPClientBuilderTest) Test_Build() { assert.NoError(t.T(), err) assert.NotNil(t.T(), client) + assert.Nil(t.T(), client.Transport.(*http.Transport).Proxy) assert.Equal(t.T(), client, http.DefaultClient) assert.Equal(t.T(), timeout*time.Second, client.Timeout) assert.Equal(t.T(), pool, client.Transport.(*http.Transport).TLSClientConfig.RootCAs) @@ -290,6 +298,7 @@ uf/TQPpjrGW5nxOf94qn6FzV2WSype9BcM5MD7z7rk202Fs7Zqc= SetSSLVerification(false). Build() require.NoError(t.T(), err, "cannot build client") + assert.Nil(t.T(), client.Transport.(*http.Transport).Proxy) resp, err := client.Get(mockProto + mockDomainAddr) if err != nil && strings.Contains(err.Error(), "connection refused") { @@ -314,6 +323,7 @@ func (t *HTTPClientBuilderTest) Test_UseTLS10() { t.Require().NotNil(client.Transport) t.Require().NotNil(client.Transport.(*http.Transport).TLSClientConfig) t.Assert().Equal(uint16(tls.VersionTLS10), client.Transport.(*http.Transport).TLSClientConfig.MinVersion) + t.Assert().NotNil(client.Transport.(*http.Transport).Proxy) } // taken from https://stackoverflow.com/questions/23558425/how-do-i-get-the-local-ip-address-in-go From 8c716920472b24d12d902770ea6120f2522aeb0e Mon Sep 17 00:00:00 2001 From: Neur0toxine Date: Thu, 6 Jun 2024 14:11:11 +0300 Subject: [PATCH 6/6] fix lint errors --- core/util/httputil/http_client_builder.go | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/core/util/httputil/http_client_builder.go b/core/util/httputil/http_client_builder.go index 2c24c5c..3e1a17b 100644 --- a/core/util/httputil/http_client_builder.go +++ b/core/util/httputil/http_client_builder.go @@ -17,6 +17,14 @@ import ( "github.com/retailcrm/mg-transport-core/v2/core/logger" ) +const ( + defaultDialerTimeout = 30 * time.Second + defaultIdleConnTimeout = 90 * time.Second + defaultTLSHandshakeTimeout = 10 * time.Second + defaultExpectContinueTimeout = 1 * time.Second + defaultMaxIdleConns = 100 +) + // DefaultClient stores original http.DefaultClient. var DefaultClient = http.DefaultClient @@ -71,17 +79,17 @@ func NewHTTPClientBuilder() *HTTPClientBuilder { httpTransport: &http.Transport{ Proxy: http.ProxyFromEnvironment, DialContext: (&net.Dialer{ - Timeout: 30 * time.Second, - KeepAlive: 30 * time.Second, + Timeout: defaultDialerTimeout, + KeepAlive: defaultDialerTimeout, }).DialContext, ForceAttemptHTTP2: true, - MaxIdleConns: 100, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 10 * time.Second, - ExpectContinueTimeout: 1 * time.Second, + MaxIdleConns: defaultMaxIdleConns, + IdleConnTimeout: defaultIdleConnTimeout, + TLSHandshakeTimeout: defaultTLSHandshakeTimeout, + ExpectContinueTimeout: defaultExpectContinueTimeout, }, tlsVersion: tls.VersionTLS12, - timeout: 30 * time.Second, + timeout: defaultDialerTimeout, mockAddress: "", mockedDomains: []string{}, logging: false,