mirror of
https://github.com/retailcrm/mg-transport-core.git
synced 2024-11-24 22:26:04 +03:00
Merge branch 'master' into dependabot/go_modules/google.golang.org/protobuf-1.33.0
This commit is contained in:
commit
14cdfa7075
8
.github/workflows/ci.yml
vendored
8
.github/workflows/ci.yml
vendored
@ -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
|
||||
@ -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
|
||||
|
@ -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:
|
||||
@ -147,20 +132,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 +153,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 +177,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 +188,4 @@ severity:
|
||||
case-sensitive: false
|
||||
|
||||
service:
|
||||
golangci-lint-version: 1.50.x
|
||||
golangci-lint-version: 1.55.x
|
@ -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
|
||||
|
@ -7,6 +7,7 @@ import (
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
@ -16,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
|
||||
|
||||
@ -24,28 +33,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,11 +74,22 @@ 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: defaultDialerTimeout,
|
||||
KeepAlive: defaultDialerTimeout,
|
||||
}).DialContext,
|
||||
ForceAttemptHTTP2: true,
|
||||
MaxIdleConns: defaultMaxIdleConns,
|
||||
IdleConnTimeout: defaultIdleConnTimeout,
|
||||
TLSHandshakeTimeout: defaultTLSHandshakeTimeout,
|
||||
ExpectContinueTimeout: defaultExpectContinueTimeout,
|
||||
},
|
||||
tlsVersion: tls.VersionTLS12,
|
||||
timeout: 30 * time.Second,
|
||||
timeout: defaultDialerTimeout,
|
||||
mockAddress: "",
|
||||
mockedDomains: []string{},
|
||||
logging: false,
|
||||
@ -147,6 +168,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 +238,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
|
||||
|
@ -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
|
||||
|
@ -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.
|
||||
|
@ -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 {
|
||||
|
@ -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"
|
||||
|
||||
|
2
go.mod
2
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
|
||||
)
|
||||
|
||||
|
2
go.sum
2
go.sum
@ -237,6 +237,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=
|
||||
|
Loading…
Reference in New Issue
Block a user