From 33d5c006e70c71a833796cb489b1d814acfc78e8 Mon Sep 17 00:00:00 2001 From: Bulat Khasanov Date: Fri, 13 Jan 2023 12:10:42 +0300 Subject: [PATCH] Fix golangci-lint, use github actions (#4) --- .github/workflows/go.yml | 55 ++++++++++++++ .golangci.yml | 9 ++- .travis.yml | 31 -------- banks.go | 5 +- banks_test.go | 8 +- core_test.go | 4 + db_test.go | 4 +- example_test.go | 8 +- go.mod | 12 ++- go.sum | 81 +++------------------ internal/gen/go.mod | 22 ++++++ internal/gen/go.sum | 74 +++++++++++++++++++ paymentsystem/bench_test.go | 4 +- paymentsystem/data.go | 1 - paymentsystem/example_test.go | 6 ++ paymentsystem/length_checker_test.go | 7 +- paymentsystem/payment_system.go | 16 ++-- paymentsystem/payment_system_test.go | 9 ++- paymentsystem/prefix_range_splitter.go | 4 +- paymentsystem/prefix_range_splitter_test.go | 5 +- 20 files changed, 239 insertions(+), 126 deletions(-) create mode 100644 .github/workflows/go.yml delete mode 100644 .travis.yml create mode 100644 internal/gen/go.mod create mode 100644 internal/gen/go.sum diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000..5310115 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,55 @@ +name: Go + +on: + push: + tags: + - v* + branches: + - master + pull_request: + branches: + - master + +jobs: + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Go + id: setup-go + uses: actions/setup-go@v3 + with: + go-version: 1.19 + + - name: golangci-lint + uses: golangci/golangci-lint-action@v3 + with: + version: v1.50 + + tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup Go + id: setup-go + uses: actions/setup-go@v3 + with: + go-version: 1.19 + cache: true + + - name: Test build + run: go build -v ./... + + - name: Test + run: go test -v -race ./... -bench=. -coverprofile=coverage.txt -covermode=atomic + + - name: Upload coverage report + uses: codecov/codecov-action@v3 + with: + token: ${{ secrets.CODECOV_TOKEN }} + file: ./coverage.txt + flags: unittests + name: codecov-umbrella + fail_ci_if_error: true diff --git a/.golangci.yml b/.golangci.yml index d81c19f..ce15e6b 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -3,7 +3,14 @@ linters: disable: - gochecknoglobals - gochecknoinits - - paralleltest + - gomnd + - ireturn + - testpackage + - varnamelen issues: exclude-use-default: false + exclude-rules: + - path: example_test\.go + linters: + - lll diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4d14e6f..0000000 --- a/.travis.yml +++ /dev/null @@ -1,31 +0,0 @@ -# use the latest ubuntu environment (18.04) available on travis -dist: xenial - -language: go - -# Force-enable Go modules. These will both be unnecessary when Go 1.13 lands. -env: - - GO111MODULE=on - -# You don't need to test on very old versions of the Go compiler. It's the user's -# responsibility to keep their compiler up to date. -go: - - 1.13.x - -install: true - -# Anything in before_script that returns a nonzero exit code will flunk the -# build and immediately stop. It's sorta like having set -e enabled in bash. -# Make sure golangci-lint is vendored. -before_script: - - go install github.com/golangci/golangci-lint/cmd/golangci-lint - -# script always runs to completion (set +e). If we have linter issues AND a -# failing test, we want to see both. Configure golangci-lint with a -# .golangci.yml file at the top level of your repo. -script: - - golangci-lint run # run a bunch of code checkers/linters in parallel - - go test -v -race ./... -bench=. -coverprofile=coverage.txt -covermode=atomic # Run all the tests and benchmarks with the race detector enabled - -after_success: - - bash <(curl -s https://codecov.io/bash) diff --git a/banks.go b/banks.go index 4bdb0d2..39d8a99 100644 --- a/banks.go +++ b/banks.go @@ -2456,8 +2456,8 @@ var banksByCountry = map[Country][]Bank{ { Name: "sberbank", Country: "ru", - LocalTitle: "Сбербанк", - EngTitle: "Sberbank", + LocalTitle: "СберБанк", + EngTitle: "SberBank", URL: "https://www.sberbank.ru", Color: "#309c0b", Prefixes: []int{ @@ -2564,6 +2564,7 @@ var banksByCountry = map[Country][]Bank{ URL: "https://www.tinkoff.ru/", Color: "#ffdd2d", Prefixes: []int{ + 220070, 437772, 437773, 521324, diff --git a/banks_test.go b/banks_test.go index 2377385..f4d9fb0 100644 --- a/banks_test.go +++ b/banks_test.go @@ -1,4 +1,4 @@ -package banksdb //nolint:testpackage +package banksdb import ( "testing" @@ -7,10 +7,14 @@ import ( ) func TestNotEmptyDB(t *testing.T) { + t.Parallel() + require.NotEmpty(t, banksByCountry) } func TestNotEmptyBanksInCountry(t *testing.T) { + t.Parallel() + for country, banks := range banksByCountry { require.NotEmpty(t, banks, "Country '%s' is empty", country) } @@ -19,6 +23,8 @@ func TestNotEmptyBanksInCountry(t *testing.T) { func TestUniquePrefixesInBanks(t *testing.T) { t.Skip() // Now this test failed because there is some nonunique prefixes in db. + t.Parallel() + seen := make(map[int]struct{}) for _, banks := range banksByCountry { diff --git a/core_test.go b/core_test.go index 7f29012..336bb3b 100644 --- a/core_test.go +++ b/core_test.go @@ -8,11 +8,15 @@ import ( ) func TestFindBankEmptyCreditCard(t *testing.T) { + t.Parallel() + bank := banksdb.FindBank("") require.Nil(t, bank) } func TestFindBankInvalidCreditCard(t *testing.T) { + t.Parallel() + bank := banksdb.FindBank("no-digits") require.Nil(t, bank) } diff --git a/db_test.go b/db_test.go index 026f9fe..e5a0cc4 100644 --- a/db_test.go +++ b/db_test.go @@ -1,4 +1,4 @@ -package banksdb //nolint:testpackage +package banksdb import ( "strconv" @@ -43,5 +43,7 @@ func (suite *NewBanksDBTestSuite) TestFindBankInSingleCountry() { } func TestNewBanksDBTestSuite(t *testing.T) { + t.Parallel() + suite.Run(t, new(NewBanksDBTestSuite)) } diff --git a/example_test.go b/example_test.go index cf9cda8..ad7df58 100644 --- a/example_test.go +++ b/example_test.go @@ -10,11 +10,17 @@ func ExampleFindBank() { creditCard := "5275940000000000" bank := banksdb.FindBank(creditCard) fmt.Printf("Bank info: %#v\n", bank) + + // output: + // Bank info: &banksdb.Bank{Name:"citibank", Country:"ru", LocalTitle:"Ситибанк", EngTitle:"Citibank", URL:"https://www.citibank.ru/", Color:"#0088cf", Prefixes:[]int{419349, 427760, 427761, 520306, 527594}} } -func ExampleBanksDB_findBank() { +func ExampleBanksDB_FindBank() { //nolint:nosnakecase // Create BanksDB only for Canadian and USA banks. db := banksdb.NewBanksDB(banksdb.CA, banksdb.US) bank := db.FindBank("5290994338557863") fmt.Printf("Bank info: %#v\n", bank) + + // output: + // Bank info: &banksdb.Bank{Name:"ally", Country:"us", LocalTitle:"Ally", EngTitle:"Ally", URL:"https://www.ally.com", Color:"#650360", Prefixes:[]int{529099, 557552}} } diff --git a/go.mod b/go.mod index 5eb1e9b..2626e32 100644 --- a/go.mod +++ b/go.mod @@ -1,10 +1,14 @@ module github.com/khasanovbi/banksdb/v2 +go 1.17 + require ( github.com/armon/go-radix v1.0.0 - github.com/stretchr/testify v1.3.0 - gopkg.in/src-d/go-billy.v4 v4.3.2 - gopkg.in/src-d/go-git.v4 v4.13.1 + github.com/stretchr/testify v1.8.1 ) -go 1.13 +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum index 1606ca5..16a7313 100644 --- a/go.sum +++ b/go.sum @@ -1,78 +1,19 @@ -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= -github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= -github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= -github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= -github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -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/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= -github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= -github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= -github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a h1:mEQZbbaBjWyLNy0tmZmgEuQAR8XOQ3hL8GYi3J/NG64= -golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= -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/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= -gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= -gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= -gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= -gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/gen/go.mod b/internal/gen/go.mod new file mode 100644 index 0000000..5955a5f --- /dev/null +++ b/internal/gen/go.mod @@ -0,0 +1,22 @@ +module github.com/khasanovbi/banksdb/internal/gen + +go 1.17 + +require ( + gopkg.in/src-d/go-billy.v4 v4.3.2 + gopkg.in/src-d/go-git.v4 v4.13.1 +) + +require ( + github.com/emirpasic/gods v1.12.0 // indirect + github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect + github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/sergi/go-diff v1.0.0 // indirect + github.com/src-d/gcfg v1.4.0 // indirect + github.com/xanzy/ssh-agent v0.2.1 // indirect + golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 // indirect + golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 // indirect + golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e // indirect + gopkg.in/warnings.v0 v0.1.2 // indirect +) diff --git a/internal/gen/go.sum b/internal/gen/go.sum new file mode 100644 index 0000000..04fcce2 --- /dev/null +++ b/internal/gen/go.sum @@ -0,0 +1,74 @@ +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= +github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= +github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= +github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd h1:Coekwdh0v2wtGp9Gmz1Ze3eVRAWJMLokvN3QjdzCHLY= +github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +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/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/pelletier/go-buffruneio v0.2.0/go.mod h1:JkE26KsDizTr40EUHkXVtNPvgGtbSNq5BcowyYOWdKo= +github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/src-d/gcfg v1.4.0 h1:xXbNR5AlLSA315x2UO+fTSSAXCDf+Ar38/6oyGbDKQ4= +github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/xanzy/ssh-agent v0.2.1 h1:TCbipTQL2JiiCprBWx9frJ2eJlCYT00NmctrHxVAr70= +github.com/xanzy/ssh-agent v0.2.1/go.mod h1:mLlQY/MoOhWBj+gOGMQkOeiEvkx+8pJSI+0Bx9h2kr4= +golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc= +golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= +golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e h1:D5TXcfTk7xF7hvieo4QErS3qqCB4teTffacDWr7CI+0= +golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190729092621-ff9f1409240a/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI= +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/src-d/go-billy.v4 v4.3.2 h1:0SQA1pRztfTFx2miS8sA97XvooFeNOmvUenF4o0EcVg= +gopkg.in/src-d/go-billy.v4 v4.3.2/go.mod h1:nDjArDMp+XMs1aFAESLRjfGSgfvoYN0hDfzEk0GjC98= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0 h1:ivZFOIltbce2Mo8IjzUHAFoq/IylO9WHhNOAJK+LsJg= +gopkg.in/src-d/go-git-fixtures.v3 v3.5.0/go.mod h1:dLBcvytrw/TYZsNTWCnkNF2DSIlzWYqTe3rJR56Ac7g= +gopkg.in/src-d/go-git.v4 v4.13.1 h1:SRtFyV8Kxc0UP7aCHcijOMQGPxHSmMOPrzulQWolkYE= +gopkg.in/src-d/go-git.v4 v4.13.1/go.mod h1:nx5NYcxdKxq5fpltdHnPa2Exj4Sx0EclMWZQbYDu2z8= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= +gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= diff --git a/paymentsystem/bench_test.go b/paymentsystem/bench_test.go index 1b9d3cc..bc861ee 100644 --- a/paymentsystem/bench_test.go +++ b/paymentsystem/bench_test.go @@ -15,7 +15,7 @@ type singleRecordRePaymentSystemDB struct { func (s *singleRecordRePaymentSystemDB) FindPaymentSystem( creditCard string, -) (paymentSystem *paymentsystem.PaymentSystem) { +) *paymentsystem.PaymentSystem { if s.psFullLengthRe.MatchString(creditCard) { return s.ps } @@ -25,7 +25,7 @@ func (s *singleRecordRePaymentSystemDB) FindPaymentSystem( func (s *singleRecordRePaymentSystemDB) FindPaymentSystemByPrefix( creditCardPrefix string, -) (paymentSystem *paymentsystem.PaymentSystem) { +) *paymentsystem.PaymentSystem { if s.psPrefixRe.MatchString(creditCardPrefix) { return s.ps } diff --git a/paymentsystem/data.go b/paymentsystem/data.go index 374a66c..b13c679 100644 --- a/paymentsystem/data.go +++ b/paymentsystem/data.go @@ -26,7 +26,6 @@ const ( // https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_(IIN) // https://www.discoverglobalnetwork.com/downloads/IPP_VAR_Compliance.pdf // https://www.barclaycard.co.uk/business/files/BIN-Rules-UK.pdf -//nolint: gomnd var rawPaymentSystems = map[PaymentSystem][]paymentSystemInfo{ AmericanExpress: {{prefixes: []int{34, 37}, lengthChecker: &exactLengthChecker{Exact: 15}}}, Dankort: {{prefixes: []int{5019, 4571}, lengthChecker: &exactLengthChecker{Exact: 16}}}, diff --git a/paymentsystem/example_test.go b/paymentsystem/example_test.go index bcf3280..ed15dd6 100644 --- a/paymentsystem/example_test.go +++ b/paymentsystem/example_test.go @@ -13,6 +13,9 @@ func ExampleFindPaymentSystem() { if paymentSystem != nil { fmt.Printf("Payment system: %s\n", *paymentSystem) } + + // output: + // Payment system: MasterCard } func ExampleFindPaymentSystemByPrefix() { @@ -22,4 +25,7 @@ func ExampleFindPaymentSystemByPrefix() { if paymentSystem != nil { fmt.Printf("Payment system: %s\n", *paymentSystem) } + + // output: + // Payment system: MasterCard } diff --git a/paymentsystem/length_checker_test.go b/paymentsystem/length_checker_test.go index e3c1c69..4e18c22 100644 --- a/paymentsystem/length_checker_test.go +++ b/paymentsystem/length_checker_test.go @@ -1,4 +1,3 @@ -//nolint:testpackage package paymentsystem import ( @@ -29,6 +28,8 @@ func (suite *ExactLengthCheckerTestSuite) TestInvalidLength() { } func TestExactLengthCheckerTestSuite(t *testing.T) { + t.Parallel() + suite.Run(t, new(ExactLengthCheckerTestSuite)) } @@ -66,6 +67,8 @@ func (suite *RangeLengthCheckerTestSuite) TestInvalidOut() { } func TestRangeLengthCheckerTestSuite(t *testing.T) { + t.Parallel() + suite.Run(t, new(RangeLengthCheckerTestSuite)) } @@ -93,5 +96,7 @@ func (suite *OneOfLengthCheckerTestSuite) TestInvalid() { } func TestOneOfLengthCheckerTestSuite(t *testing.T) { + t.Parallel() + suite.Run(t, new(OneOfLengthCheckerTestSuite)) } diff --git a/paymentsystem/payment_system.go b/paymentsystem/payment_system.go index 7222b5c..a15e3df 100644 --- a/paymentsystem/payment_system.go +++ b/paymentsystem/payment_system.go @@ -54,7 +54,7 @@ type radixDB struct { tree *radix.Tree } -func (r *radixDB) findPaymentSystem(creditCard string, ignoreLengthCheck bool) (paymentSystem *PaymentSystem) { +func (r *radixDB) findPaymentSystem(creditCard string, ignoreLengthCheck bool) *PaymentSystem { creditCardLength := len(creditCard) prefix, value, ok := r.tree.LongestPrefix(creditCard) @@ -62,7 +62,7 @@ func (r *radixDB) findPaymentSystem(creditCard string, ignoreLengthCheck bool) ( return nil } // Optimization to check the longest prefix first - paymentSystem = getPaymentSystemFromValue(value, creditCardLength, ignoreLengthCheck) + paymentSystem := getPaymentSystemFromValue(value, creditCardLength, ignoreLengthCheck) if paymentSystem != nil { return paymentSystem } @@ -76,14 +76,14 @@ func (r *radixDB) findPaymentSystem(creditCard string, ignoreLengthCheck bool) ( return false }) - return + return paymentSystem } -func (r *radixDB) FindPaymentSystem(creditCard string) (paymentSystem *PaymentSystem) { +func (r *radixDB) FindPaymentSystem(creditCard string) *PaymentSystem { return r.findPaymentSystem(creditCard, false) } -func (r *radixDB) FindPaymentSystemByPrefix(creditCardPrefix string) (paymentSystem *PaymentSystem) { +func (r *radixDB) FindPaymentSystemByPrefix(creditCardPrefix string) *PaymentSystem { return r.findPaymentSystem(creditCardPrefix, true) } @@ -108,7 +108,7 @@ func (r *radixDB) InitFromMap(rawPaymentSystems map[PaymentSystem][]paymentSyste oldValue, isUpdated := r.tree.Insert(strconv.Itoa(prefix), newValue) if isUpdated { - oldPaymentSystem := oldValue.(*radixValue).paymentSystem + oldPaymentSystem := oldValue.(*radixValue).paymentSystem //nolint:forcetypeassert return fmt.Errorf( "prefix=%d, old=%s, new=%s: %w", @@ -141,13 +141,13 @@ func NewDB() DB { } // FindPaymentSystem returns payment system of given credit card. -func FindPaymentSystem(creditCard string) (paymentSystem *PaymentSystem) { +func FindPaymentSystem(creditCard string) *PaymentSystem { return db.FindPaymentSystem(creditCard) } // FindPaymentSystemByPrefix returns payment system by credit card prefix. // Similar to FindPaymentSystem, but finds the payment system with the longest prefix, ignoring the length of the card. -func FindPaymentSystemByPrefix(creditCard string) (paymentSystem *PaymentSystem) { +func FindPaymentSystemByPrefix(creditCard string) *PaymentSystem { return db.FindPaymentSystemByPrefix(creditCard) } diff --git a/paymentsystem/payment_system_test.go b/paymentsystem/payment_system_test.go index 1f9aa09..5d7613f 100644 --- a/paymentsystem/payment_system_test.go +++ b/paymentsystem/payment_system_test.go @@ -1,4 +1,3 @@ -//nolint:testpackage package paymentsystem import ( @@ -10,6 +9,8 @@ import ( ) func TestFindPaymentSystem(t *testing.T) { + t.Parallel() + tests := map[PaymentSystem]string{ AmericanExpress: "341414688673814", Dankort: "5019613744152545", @@ -36,6 +37,8 @@ func TestFindPaymentSystem(t *testing.T) { creditCard := creditCard t.Run(string(ps), func(t *testing.T) { + t.Parallel() + actualPaymentSystem := FindPaymentSystem(creditCard) require.NotNil(t, actualPaymentSystem) require.EqualValues(t, ps, *actualPaymentSystem) @@ -44,6 +47,8 @@ func TestFindPaymentSystem(t *testing.T) { } func TestEmptyCreditCardFindPaymentSystem(t *testing.T) { + t.Parallel() + actualPaymentSystem := FindPaymentSystem("") require.Nil(t, actualPaymentSystem) } @@ -92,5 +97,7 @@ func (suite *RadixDBTestSuite) TestInitErrorAtSamePrefix() { } func TestRadixDBTestSuite(t *testing.T) { + t.Parallel() + suite.Run(t, new(RadixDBTestSuite)) } diff --git a/paymentsystem/prefix_range_splitter.go b/paymentsystem/prefix_range_splitter.go index 38134b0..678504d 100644 --- a/paymentsystem/prefix_range_splitter.go +++ b/paymentsystem/prefix_range_splitter.go @@ -54,7 +54,7 @@ func appendZeros(str string, totalSize int) string { return appendChars(str, '0', totalSize) } -func splitPrefixRangeStr(fromStr string, toStr string) (prefixes []string) { +func splitPrefixRangeStr(fromStr string, toStr string) []string { commonPrefixLength := findCommonPrefixLength(fromStr, toStr) commonPrefix := fromStr[:commonPrefixLength] @@ -68,6 +68,8 @@ func splitPrefixRangeStr(fromStr string, toStr string) (prefixes []string) { startChar := fromStr[0] endChar := toStr[0] + var prefixes []string + if len(fromStr) > 1 && !isOnlyZeros(fromStr[1:]) { startChar++ diff --git a/paymentsystem/prefix_range_splitter_test.go b/paymentsystem/prefix_range_splitter_test.go index 1360ffa..f53ce2b 100644 --- a/paymentsystem/prefix_range_splitter_test.go +++ b/paymentsystem/prefix_range_splitter_test.go @@ -1,4 +1,3 @@ -//nolint:testpackage package paymentsystem import ( @@ -8,6 +7,8 @@ import ( ) func TestSplitPrefixRange(t *testing.T) { + t.Parallel() + tests := map[string]struct { prefixRange prefixRange expectedPrefixes []int @@ -30,6 +31,8 @@ func TestSplitPrefixRange(t *testing.T) { testParams := testParams t.Run(testName, func(t *testing.T) { + t.Parallel() + result, err := splitPrefixRange(testParams.prefixRange) require.NoError(t, err) require.ElementsMatchf(t, testParams.expectedPrefixes, result, "%v", result)