From 3848f5d1bca1b7e266fef9bb8db2c10404629778 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 12 Mar 2020 16:24:06 +0100 Subject: [PATCH 01/19] Black box testing of account related functions --- account_test.go | 218 +++++++++++++++++++++++++++++++++++++ dcrlibwallet_suite_test.go | 13 +++ go.mod | 5 +- go.sum | 7 ++ 4 files changed, 241 insertions(+), 2 deletions(-) create mode 100644 account_test.go create mode 100644 dcrlibwallet_suite_test.go diff --git a/account_test.go b/account_test.go new file mode 100644 index 00000000..5a5b853d --- /dev/null +++ b/account_test.go @@ -0,0 +1,218 @@ +package dcrlibwallet_test + +import ( + "os" + "strconv" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" + . "github.com/raedahgroup/dcrlibwallet" +) + +const rootDir = ".dcrlibwallet_tests_root" + +var _ = Describe("Account", func() { + var ( + wallet *Wallet + ) + + BeforeEach(func() { + multi, err := NewMultiWallet(rootDir, "", "testnet3") + Expect(err).To(BeNil()) + Expect(multi).ToNot(BeNil()) + + wallet, err = multi.CreateNewWallet("0000", 0) + Expect(err).To(BeNil()) + Expect(wallet).ToNot(BeNil()) + }) + + AfterEach(func() { + if wallet != nil { + wallet.Shutdown() + } + err := os.RemoveAll(rootDir) + Expect(err).To(BeNil()) + }) + + Describe("GetAccounts(requiredConfirmations int32) (string, error)", func() { + Context("when called", func() { + It("should get accounts", func() { + + res, err := wallet.GetAccounts(0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning nonempty accounts string") + Expect(res).ToNot(BeEquivalentTo("")) + }) + }) + }) + + Describe("GetAccount(accountNumber int32, requiredConfirmations int32) (*Account, error)", func() { + Context("when called with the right parameters", func() { + It("should get account", func() { + + var accountNumber int32 = 0 + account, err := wallet.GetAccount(accountNumber, 0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning a non nil account") + Expect(account).ToNot(BeNil()) + By("returning an account with the supplied account number") + Expect(account.Number).To(BeEquivalentTo(accountNumber)) + }) + }) + + Context("when called for non-existing account", func() { + It("it should fail", func() { + + account, err := wallet.GetAccount(1000000000, 0) + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + By("by returning nil account") + Expect(account).To(BeNil()) + }) + }) + }) + + Describe("GetAccountBalance(accountNumber int32, requiredConfirmations int32) (*Balance, error)", func() { + Context("when called", func() { + It("should get the account balance", func() { + + balance, err := wallet.GetAccountBalance(0, 0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(balance).ToNot(BeNil()) + }) + }) + }) + + Describe("SpendableForAccount(account int32, requiredConfirmations int32) (int64, error)", func() { + Context("when called", func() { + It("should return the spendable balance", func() { + + result, err := wallet.SpendableForAccount(0, 0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(result).ToNot(BeNil()) + }) + }) + }) + + Describe("NextAccount(accountName string, privPass []byte) (int32, error)", func() { + Context("when called", func() { + It("should return the next account number", func() { + + accountNumber, err := wallet.NextAccount("account 1", []byte("0000")) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected account number") + Expect(accountNumber).To(BeEquivalentTo(int32(1))) + }) + }) + Context("when called with a wrong password", func () { + It("should failed", func() { + _, err := wallet.NextAccount("account 1", []byte("1902")) + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + By("reporting invalid password") + Expect(err.Error()).To(BeEquivalentTo("invalid_passphrase")) + }) + }) + }) + + Describe("RenameAccount(accountNumber int32, newName string) error", func() { + Context("when called with the right args", func() { + It("should rename the account", func() { + + updatedName := "first account" + err := wallet.RenameAccount(0, updatedName) + By("returning a nil error") + Expect(err).To(BeNil()) + + account, err := wallet.GetAccount(0, 0) + Expect(err).To(BeNil()) + By("changing the account name in the wallet") + Expect(account.Name).To(BeEquivalentTo(updatedName)) + }) + }) + Context("when called with a non-existing account number", func() { + It("should fail", func() { + + err := wallet.RenameAccount(56, "first account") + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + }) + }) + }) + + Describe("AccountName(accountNumber int32) string", func() { + Context("when called", func() { + It("should return the account name", func() { + + name := wallet.AccountName(0) + By("returning the expected account name") + Expect(name).To(BeEquivalentTo("default")) + }) + }) + + Context("when called with a non-existing account number", func() { + It("should fail", func() { + + name := wallet.AccountName(1220) + By("returning 'Account not found'") + Expect(name).To(BeEquivalentTo("Account not found")) + }) + }) + }) + + Describe("AccountNameRaw(accountNumber uint32) (string, error)", func() { + Context("when called with a valid account number", func() { + It("should return the account name", func() { + + name, err := wallet.AccountNameRaw(0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected account name") + Expect(name).To(BeEquivalentTo("default")) + }) + }) + Context("when called with a non-existing account number", func() { + It("should fail", func() { + + _, err := wallet.AccountNameRaw(10290) + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + }) + }) + }) + + Describe("AccountNumber(accountName string) (uint32, error)", func() { + Context("when called", func() { + It("should return the account number", func() { + + number, err := wallet.AccountNumber("default") + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected account number") + Expect(number).To(BeEquivalentTo(uint32(0))) + }) + }) + }) + + Describe("HDPathForAccount(accountNumber int32) (string, error)", func() { + Context("when called", func() { + It("should return the HD path for account", func() { + + var accountNumber int32 = 0 + path, err := wallet.HDPathForAccount(accountNumber) + By("returning a nil error") + Expect(err).To(BeNil()) + expectedPath := LegacyTestnetHDPath + strconv.Itoa(int(accountNumber)) + By("returning the expected path") + Expect(path).To(BeEquivalentTo(expectedPath)) + }) + }) + }) +}) diff --git a/dcrlibwallet_suite_test.go b/dcrlibwallet_suite_test.go new file mode 100644 index 00000000..13c6e665 --- /dev/null +++ b/dcrlibwallet_suite_test.go @@ -0,0 +1,13 @@ +package dcrlibwallet_test + +import ( + "testing" + + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" +) + +func TestDcrlibwallet(t *testing.T) { + RegisterFailHandler(Fail) + RunSpecs(t, "Dcrlibwallet Suite") +} diff --git a/go.mod b/go.mod index 7dc3aed6..8c1e3ffd 100644 --- a/go.mod +++ b/go.mod @@ -28,10 +28,11 @@ require ( github.com/decred/slog v1.0.0 github.com/dgraph-io/badger v1.5.4 github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f // indirect + github.com/golang/mock v1.4.1 github.com/gorilla/websocket v1.4.1 // indirect github.com/jrick/logrotate v1.0.0 - github.com/onsi/ginkgo v1.8.0 // indirect - github.com/onsi/gomega v1.5.0 // indirect + github.com/onsi/ginkgo v1.8.0 + github.com/onsi/gomega v1.5.0 github.com/pkg/errors v0.8.1 // indirect github.com/raedahgroup/dcrlibwallet/spv v0.0.0-00010101000000-000000000000 github.com/stretchr/testify v1.3.0 // indirect diff --git a/go.sum b/go.sum index 84696662..b75fc392 100644 --- a/go.sum +++ b/go.sum @@ -211,6 +211,8 @@ github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f h1:dDxpBYafY/GYpcl github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/mock v1.4.1 h1:ocYkMQY5RrXTYgXl7ICpV0IXwlEQGwKIsery4gyXa1U= +github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.1.0 h1:0iH4Ffd/meGoXqF2lSAhZHt8X+cPgkfn/cb6Cce5Vpc= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= @@ -281,6 +283,7 @@ golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24 h1:mEsFm194MmS9vCwxFy+zwu0EU golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -305,11 +308,13 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47 h1:/XfQ9z7ib8eEJX2hdgFTZJ/ntt0swNk5oYBziWeTCvY= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= 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-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= @@ -325,3 +330,5 @@ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= +rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From f92f1d776d0bdf6283342068518d9e741dbb8c63 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 12 Mar 2020 16:28:46 +0100 Subject: [PATCH 02/19] Go fmt --- account_test.go | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/account_test.go b/account_test.go index 5a5b853d..788e1308 100644 --- a/account_test.go +++ b/account_test.go @@ -13,7 +13,7 @@ const rootDir = ".dcrlibwallet_tests_root" var _ = Describe("Account", func() { var ( - wallet *Wallet + wallet *Wallet ) BeforeEach(func() { @@ -77,7 +77,7 @@ var _ = Describe("Account", func() { Describe("GetAccountBalance(accountNumber int32, requiredConfirmations int32) (*Balance, error)", func() { Context("when called", func() { It("should get the account balance", func() { - + balance, err := wallet.GetAccountBalance(0, 0) By("returning a nil error") Expect(err).To(BeNil()) @@ -90,7 +90,7 @@ var _ = Describe("Account", func() { Describe("SpendableForAccount(account int32, requiredConfirmations int32) (int64, error)", func() { Context("when called", func() { It("should return the spendable balance", func() { - + result, err := wallet.SpendableForAccount(0, 0) By("returning a nil error") Expect(err).To(BeNil()) @@ -103,7 +103,7 @@ var _ = Describe("Account", func() { Describe("NextAccount(accountName string, privPass []byte) (int32, error)", func() { Context("when called", func() { It("should return the next account number", func() { - + accountNumber, err := wallet.NextAccount("account 1", []byte("0000")) By("returning a nil error") Expect(err).To(BeNil()) @@ -111,7 +111,7 @@ var _ = Describe("Account", func() { Expect(accountNumber).To(BeEquivalentTo(int32(1))) }) }) - Context("when called with a wrong password", func () { + Context("when called with a wrong password", func() { It("should failed", func() { _, err := wallet.NextAccount("account 1", []byte("1902")) By("returning a non nil error") @@ -139,7 +139,7 @@ var _ = Describe("Account", func() { }) Context("when called with a non-existing account number", func() { It("should fail", func() { - + err := wallet.RenameAccount(56, "first account") By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -159,7 +159,7 @@ var _ = Describe("Account", func() { Context("when called with a non-existing account number", func() { It("should fail", func() { - + name := wallet.AccountName(1220) By("returning 'Account not found'") Expect(name).To(BeEquivalentTo("Account not found")) @@ -170,7 +170,7 @@ var _ = Describe("Account", func() { Describe("AccountNameRaw(accountNumber uint32) (string, error)", func() { Context("when called with a valid account number", func() { It("should return the account name", func() { - + name, err := wallet.AccountNameRaw(0) By("returning a nil error") Expect(err).To(BeNil()) @@ -180,7 +180,7 @@ var _ = Describe("Account", func() { }) Context("when called with a non-existing account number", func() { It("should fail", func() { - + _, err := wallet.AccountNameRaw(10290) By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -191,7 +191,7 @@ var _ = Describe("Account", func() { Describe("AccountNumber(accountName string) (uint32, error)", func() { Context("when called", func() { It("should return the account number", func() { - + number, err := wallet.AccountNumber("default") By("returning a nil error") Expect(err).To(BeNil()) @@ -204,7 +204,7 @@ var _ = Describe("Account", func() { Describe("HDPathForAccount(accountNumber int32) (string, error)", func() { Context("when called", func() { It("should return the HD path for account", func() { - + var accountNumber int32 = 0 path, err := wallet.HDPathForAccount(accountNumber) By("returning a nil error") From 1cc4e132bbde7944b8080378cc04b1071d0d8934 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Tue, 17 Mar 2020 09:39:15 +0100 Subject: [PATCH 03/19] Run test with docker file --- Dockerfile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8459f6ec..866ca826 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,9 +1,13 @@ FROM golang +RUN mkdir /app +ADD . /app/ +WORKDIR /app + RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.19.1 ENV GO111MODULE on -RUN go version +RUN go mod download -ENTRYPOINT [ "./run_tests.sh", "lint"] +ENTRYPOINT [ "./run_tests.sh", "all"] From d54a7897fee852daaab6b470d6d110ad5355cb51 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Tue, 17 Mar 2020 10:45:16 +0100 Subject: [PATCH 04/19] Random password in test. Separate docker file for test --- .gitignore | 1 + Dockerfile | 8 ++----- Test.Dockerfile | 13 ++++++++++ account_test.go | 63 ++++++++++++++++++++++++++----------------------- go.mod | 1 + go.sum | 37 +++++++++++++++++++++++++++++ 6 files changed, 88 insertions(+), 35 deletions(-) create mode 100644 Test.Dockerfile diff --git a/.gitignore b/.gitignore index 234385e7..330aa774 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ vendor Dcrlibwallet.framework dcrlibwallet.aar dcrlibwallet-sources.jar +.dcrlibwallet_tests_root diff --git a/Dockerfile b/Dockerfile index 866ca826..1fb611e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,9 @@ FROM golang -RUN mkdir /app -ADD . /app/ -WORKDIR /app - RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.19.1 ENV GO111MODULE on -RUN go mod download +RUN go version -ENTRYPOINT [ "./run_tests.sh", "all"] +ENTRYPOINT [ "./run_tests.sh", "lint"] \ No newline at end of file diff --git a/Test.Dockerfile b/Test.Dockerfile new file mode 100644 index 00000000..866ca826 --- /dev/null +++ b/Test.Dockerfile @@ -0,0 +1,13 @@ +FROM golang + +RUN mkdir /app +ADD . /app/ +WORKDIR /app + +RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.19.1 + +ENV GO111MODULE on + +RUN go mod download + +ENTRYPOINT [ "./run_tests.sh", "all"] diff --git a/account_test.go b/account_test.go index 788e1308..264ed0a5 100644 --- a/account_test.go +++ b/account_test.go @@ -1,8 +1,10 @@ package dcrlibwallet_test import ( + "math/rand" "os" "strconv" + "time" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" @@ -14,6 +16,7 @@ const rootDir = ".dcrlibwallet_tests_root" var _ = Describe("Account", func() { var ( wallet *Wallet + password string ) BeforeEach(func() { @@ -21,7 +24,8 @@ var _ = Describe("Account", func() { Expect(err).To(BeNil()) Expect(multi).ToNot(BeNil()) - wallet, err = multi.CreateNewWallet("0000", 0) + password = randomPassword() + wallet, err = multi.CreateNewWallet(password, 0) Expect(err).To(BeNil()) Expect(wallet).ToNot(BeNil()) }) @@ -34,10 +38,9 @@ var _ = Describe("Account", func() { Expect(err).To(BeNil()) }) - Describe("GetAccounts(requiredConfirmations int32) (string, error)", func() { + Describe("GetAccounts", func() { Context("when called", func() { It("should get accounts", func() { - res, err := wallet.GetAccounts(0) By("returning a nil error") Expect(err).To(BeNil()) @@ -47,10 +50,9 @@ var _ = Describe("Account", func() { }) }) - Describe("GetAccount(accountNumber int32, requiredConfirmations int32) (*Account, error)", func() { + Describe("GetAccount", func() { Context("when called with the right parameters", func() { It("should get account", func() { - var accountNumber int32 = 0 account, err := wallet.GetAccount(accountNumber, 0) By("returning a nil error") @@ -64,7 +66,6 @@ var _ = Describe("Account", func() { Context("when called for non-existing account", func() { It("it should fail", func() { - account, err := wallet.GetAccount(1000000000, 0) By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -74,37 +75,35 @@ var _ = Describe("Account", func() { }) }) - Describe("GetAccountBalance(accountNumber int32, requiredConfirmations int32) (*Balance, error)", func() { + Describe("GetAccountBalance", func() { Context("when called", func() { It("should get the account balance", func() { - balance, err := wallet.GetAccountBalance(0, 0) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") Expect(balance).ToNot(BeNil()) + Expect(balance.Total).To(BeEquivalentTo(0)) }) }) }) - Describe("SpendableForAccount(account int32, requiredConfirmations int32) (int64, error)", func() { + Describe("SpendableForAccount", func() { Context("when called", func() { It("should return the spendable balance", func() { - - result, err := wallet.SpendableForAccount(0, 0) + balance, err := wallet.SpendableForAccount(0, 0) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") - Expect(result).ToNot(BeNil()) + Expect(balance).To(BeEquivalentTo(0)) }) }) }) - Describe("NextAccount(accountName string, privPass []byte) (int32, error)", func() { + Describe("NextAccount", func() { Context("when called", func() { It("should return the next account number", func() { - - accountNumber, err := wallet.NextAccount("account 1", []byte("0000")) + accountNumber, err := wallet.NextAccount("account 1", []byte(password)) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected account number") @@ -113,7 +112,11 @@ var _ = Describe("Account", func() { }) Context("when called with a wrong password", func() { It("should failed", func() { - _, err := wallet.NextAccount("account 1", []byte("1902")) + var wrongPasword = randomPassword() + for wrongPasword == password { + wrongPasword += "1" + } + _, err := wallet.NextAccount("account 1", []byte(wrongPasword)) By("returning a non nil error") Expect(err).ToNot(BeNil()) By("reporting invalid password") @@ -122,10 +125,9 @@ var _ = Describe("Account", func() { }) }) - Describe("RenameAccount(accountNumber int32, newName string) error", func() { + Describe("RenameAccount", func() { Context("when called with the right args", func() { It("should rename the account", func() { - updatedName := "first account" err := wallet.RenameAccount(0, updatedName) By("returning a nil error") @@ -139,7 +141,6 @@ var _ = Describe("Account", func() { }) Context("when called with a non-existing account number", func() { It("should fail", func() { - err := wallet.RenameAccount(56, "first account") By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -147,10 +148,9 @@ var _ = Describe("Account", func() { }) }) - Describe("AccountName(accountNumber int32) string", func() { + Describe("AccountName", func() { Context("when called", func() { It("should return the account name", func() { - name := wallet.AccountName(0) By("returning the expected account name") Expect(name).To(BeEquivalentTo("default")) @@ -159,7 +159,6 @@ var _ = Describe("Account", func() { Context("when called with a non-existing account number", func() { It("should fail", func() { - name := wallet.AccountName(1220) By("returning 'Account not found'") Expect(name).To(BeEquivalentTo("Account not found")) @@ -167,10 +166,9 @@ var _ = Describe("Account", func() { }) }) - Describe("AccountNameRaw(accountNumber uint32) (string, error)", func() { + Describe("AccountNameRaw", func() { Context("when called with a valid account number", func() { It("should return the account name", func() { - name, err := wallet.AccountNameRaw(0) By("returning a nil error") Expect(err).To(BeNil()) @@ -180,7 +178,6 @@ var _ = Describe("Account", func() { }) Context("when called with a non-existing account number", func() { It("should fail", func() { - _, err := wallet.AccountNameRaw(10290) By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -188,10 +185,9 @@ var _ = Describe("Account", func() { }) }) - Describe("AccountNumber(accountName string) (uint32, error)", func() { + Describe("AccountNumber", func() { Context("when called", func() { It("should return the account number", func() { - number, err := wallet.AccountNumber("default") By("returning a nil error") Expect(err).To(BeNil()) @@ -201,10 +197,9 @@ var _ = Describe("Account", func() { }) }) - Describe("HDPathForAccount(accountNumber int32) (string, error)", func() { + Describe("HDPathForAccount", func() { Context("when called", func() { It("should return the HD path for account", func() { - var accountNumber int32 = 0 path, err := wallet.HDPathForAccount(accountNumber) By("returning a nil error") @@ -216,3 +211,13 @@ var _ = Describe("Account", func() { }) }) }) + +func randomPassword() string { + var random = rand.New(rand.NewSource(time.Now().UnixNano())) + const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + b := make([]byte, 8) + for i := range b { + b[i] = charset[random.Intn(len(charset))] + } + return string(b) +} diff --git a/go.mod b/go.mod index 8c1e3ffd..00eb45d2 100644 --- a/go.mod +++ b/go.mod @@ -40,6 +40,7 @@ require ( golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e google.golang.org/appengine v1.5.0 // indirect + google.golang.org/grpc v1.28.0 // indirect ) replace ( diff --git a/go.sum b/go.sum index b75fc392..1905126f 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,9 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= decred.org/cspp v0.2.0 h1:SdwdoGT2wZenkczeDxzcKwoAA55Y0Ti3aZslabBORvA= decred.org/cspp v0.2.0/go.mod h1:KVnB49sueBFCldRa/ivZCaWZbrPNEiXWwxHCf1jTYKI= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9 h1:HD8gA2tkByhMAwYaFAX9w2l7vxvBQ5NMoxDrkhqhtn4= github.com/AndreasBriese/bbloom v0.0.0-20190306092124-e2d15f34fcf9/go.mod h1:bOvUY6CB00SOBii9/FifXqc0awNKxLFCL/+pkDPuyl8= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/DataDog/zstd v1.3.5 h1:DtpNbljikUepEPD16hD4LvIcmhnhdLTiW/5pHgbmp14= github.com/DataDog/zstd v1.3.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/Sereal/Sereal v0.0.0-20181211220259-509a78ddbda3 h1:Xu7z47ZiE/J+sKXHZMGxEor/oY2q6dq51fkO0JqdSwY= @@ -17,6 +19,9 @@ github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79il github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= 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= @@ -209,8 +214,13 @@ github.com/dgraph-io/badger v1.5.4 h1:gVTrpUTbbr/T24uvoCaqY2KSHfNLVGm0w+hbee2HMe github.com/dgraph-io/badger v1.5.4/go.mod h1:VZxzAIRPHRVNRKRo6AXrX9BJegn6il06VMTZVJYCIjQ= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f h1:dDxpBYafY/GYpcl+LS4Bn3ziLPuEdGRkRjYAbSlWxSA= github.com/dgryski/go-farm v0.0.0-20190104051053-3adb47b1fb0f/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/mock v1.4.1 h1:ocYkMQY5RrXTYgXl7ICpV0IXwlEQGwKIsery4gyXa1U= github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/protobuf v1.1.0 h1:0iH4Ffd/meGoXqF2lSAhZHt8X+cPgkfn/cb6Cce5Vpc= @@ -219,8 +229,11 @@ github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= @@ -255,6 +268,7 @@ 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/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/raedahgroup/dcrwallet/wallet/v3 v3.2.1-badger h1:VeMaBDPPCLtt/gT7irdR+v26LhC7m6LWdiGGJJBEVIE= github.com/raedahgroup/dcrwallet/wallet/v3 v3.2.1-badger/go.mod h1:SJ+++gtMdcUeqMv6iIO3gVGlGJfM+4iY2QSaAakhbUw= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -277,16 +291,23 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8 h1:1wopBVtVdWnn03fZelqdXT golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586 h1:7KByu05hhLed2MO29w7p1XfZvZ13m8mub3shuVftRs0= golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24 h1:mEsFm194MmS9vCwxFy+zwu0EU7ZkxxMD1iH++vmGdUY= golang.org/x/net v0.0.0-20180808004115-f9ce57c11b24/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ= @@ -297,6 +318,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180816055513-1c9583448a9c/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181206074257-70b957f3b65e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181212120007-b05ddf57801d h1:G59MrP9Qg6bymPjN3yGmqnmuCEH1h0eFP8zpRpl1RiU= @@ -314,11 +336,24 @@ 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-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4= +google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= 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= @@ -330,5 +365,7 @@ gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= From 267f46ae4e65b830aec3ee720a0101ea86d52402 Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Wed, 18 Mar 2020 16:24:14 +0200 Subject: [PATCH 05/19] main: add dockerfiles for tests - add github workflows for tests --- .github/workflows/tests.yml | 34 ++++++++++++++++++++++++++++++++++ Test.Dockerfile | 13 ------------- linux_test.dockerfile | 9 +++++++++ windows_test.dockerfile | 9 +++++++++ 4 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 .github/workflows/tests.yml delete mode 100644 Test.Dockerfile create mode 100644 linux_test.dockerfile create mode 100644 windows_test.dockerfile diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..7510bb53 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,34 @@ +name: Tests + +on: [pull_request, push] + +jobs: + build: + name: Tests - linux + + runs-on: ubuntu-latest + + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v1 + + - name: Build the docker image + run: docker build -t testenv -f linux_test.dockerfile . + + - name: Run the image + run: docker run devenv + + build: + name: Tests - windows + + runs-on: windows + + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@v1 + + - name: Build the docker image + run: docker build -t testenv -f windows_test.dockerfile . + + - name: Run the image + run: docker run devenv diff --git a/Test.Dockerfile b/Test.Dockerfile deleted file mode 100644 index 866ca826..00000000 --- a/Test.Dockerfile +++ /dev/null @@ -1,13 +0,0 @@ -FROM golang - -RUN mkdir /app -ADD . /app/ -WORKDIR /app - -RUN curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.19.1 - -ENV GO111MODULE on - -RUN go mod download - -ENTRYPOINT [ "./run_tests.sh", "all"] diff --git a/linux_test.dockerfile b/linux_test.dockerfile new file mode 100644 index 00000000..6789321f --- /dev/null +++ b/linux_test.dockerfile @@ -0,0 +1,9 @@ +FROM golang + +COPY . /src + +WORKDIR /src + +RUN go build + +ENTRYPOINT [ "go", "test"] diff --git a/windows_test.dockerfile b/windows_test.dockerfile new file mode 100644 index 00000000..98d85804 --- /dev/null +++ b/windows_test.dockerfile @@ -0,0 +1,9 @@ +FROM golang:windowsservercore + +COPY . /src + +WORKDIR /src + +RUN go build + +ENTRYPOINT [ "go", "test"] From 94fb7dcc67681f3db7a7917aa7f9502ec48d5b95 Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Wed, 18 Mar 2020 16:26:02 +0200 Subject: [PATCH 06/19] main: change workflow build names --- .github/workflows/tests.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7510bb53..a85d55ca 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -3,7 +3,7 @@ name: Tests on: [pull_request, push] jobs: - build: + linux_test: name: Tests - linux runs-on: ubuntu-latest @@ -17,8 +17,8 @@ jobs: - name: Run the image run: docker run devenv - - build: + + windows_test: name: Tests - windows runs-on: windows @@ -28,7 +28,7 @@ jobs: uses: actions/checkout@v1 - name: Build the docker image - run: docker build -t testenv -f windows_test.dockerfile . + run: docker build -t testenv -f windows_test.dockerfile . - name: Run the image run: docker run devenv From bb34f1073534810367575f6f6b02da95be5bd20f Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Wed, 18 Mar 2020 16:29:49 +0200 Subject: [PATCH 07/19] main: correct docker command --- .github/workflows/tests.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index a85d55ca..b1be04c0 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -16,12 +16,12 @@ jobs: run: docker build -t testenv -f linux_test.dockerfile . - name: Run the image - run: docker run devenv + run: docker run testenv windows_test: name: Tests - windows - runs-on: windows + runs-on: windows-latest steps: - name: Check out code into the Go module directory @@ -31,4 +31,4 @@ jobs: run: docker build -t testenv -f windows_test.dockerfile . - name: Run the image - run: docker run devenv + run: docker run testenv From e6dd0b00a11b1f1e5bdf0742bde2ad6e486576df Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Wed, 18 Mar 2020 23:33:14 +0200 Subject: [PATCH 08/19] main: set log levels to error for test - change windows_test.dockerfile base image to nanoserver --- account_test.go | 6 +++++- linux_test.dockerfile | 2 +- windows_test.dockerfile | 6 +++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/account_test.go b/account_test.go index 264ed0a5..3583e061 100644 --- a/account_test.go +++ b/account_test.go @@ -13,9 +13,13 @@ import ( const rootDir = ".dcrlibwallet_tests_root" +func init() { + SetLogLevels("error") +} + var _ = Describe("Account", func() { var ( - wallet *Wallet + wallet *Wallet password string ) diff --git a/linux_test.dockerfile b/linux_test.dockerfile index 6789321f..e3e00484 100644 --- a/linux_test.dockerfile +++ b/linux_test.dockerfile @@ -4,6 +4,6 @@ COPY . /src WORKDIR /src -RUN go build +RUN go mod download ENTRYPOINT [ "go", "test"] diff --git a/windows_test.dockerfile b/windows_test.dockerfile index 98d85804..e6d134b3 100644 --- a/windows_test.dockerfile +++ b/windows_test.dockerfile @@ -1,9 +1,9 @@ -FROM golang:windowsservercore +FROM golang:nanoserver COPY . /src WORKDIR /src -RUN go build +RUN go mod download -ENTRYPOINT [ "go", "test"] +ENTRYPOINT ["go", "test"] \ No newline at end of file From 24e1a96e3e9513541e275745b1b966c3083cc309 Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Wed, 18 Mar 2020 23:47:48 +0200 Subject: [PATCH 09/19] main: add 1 minute timeout to docker tests --- linux_test.dockerfile | 2 +- windows_test.dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/linux_test.dockerfile b/linux_test.dockerfile index e3e00484..7fa57757 100644 --- a/linux_test.dockerfile +++ b/linux_test.dockerfile @@ -6,4 +6,4 @@ WORKDIR /src RUN go mod download -ENTRYPOINT [ "go", "test"] +ENTRYPOINT [ "go", "test", "-timeout", "1m"] diff --git a/windows_test.dockerfile b/windows_test.dockerfile index e6d134b3..df295929 100644 --- a/windows_test.dockerfile +++ b/windows_test.dockerfile @@ -6,4 +6,4 @@ WORKDIR /src RUN go mod download -ENTRYPOINT ["go", "test"] \ No newline at end of file +ENTRYPOINT [ "go", "test", "-timeout", "1m"] \ No newline at end of file From 5b19ab0e96292f6d23aa788b9b8196776391e9a5 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 19 Mar 2020 09:02:28 +0100 Subject: [PATCH 10/19] Removed unnecessary context info --- account_test.go | 80 ++++++++++++++++++++++--------------------------- 1 file changed, 35 insertions(+), 45 deletions(-) diff --git a/account_test.go b/account_test.go index 3583e061..2a777896 100644 --- a/account_test.go +++ b/account_test.go @@ -43,14 +43,12 @@ var _ = Describe("Account", func() { }) Describe("GetAccounts", func() { - Context("when called", func() { - It("should get accounts", func() { - res, err := wallet.GetAccounts(0) - By("returning a nil error") - Expect(err).To(BeNil()) - By("returning nonempty accounts string") - Expect(res).ToNot(BeEquivalentTo("")) - }) + It("should get accounts", func() { + res, err := wallet.GetAccounts(0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning nonempty accounts string") + Expect(res).ToNot(BeEquivalentTo("")) }) }) @@ -80,32 +78,28 @@ var _ = Describe("Account", func() { }) Describe("GetAccountBalance", func() { - Context("when called", func() { - It("should get the account balance", func() { - balance, err := wallet.GetAccountBalance(0, 0) - By("returning a nil error") - Expect(err).To(BeNil()) - By("returning the expected balance") - Expect(balance).ToNot(BeNil()) - Expect(balance.Total).To(BeEquivalentTo(0)) - }) + It("should get the account balance", func() { + balance, err := wallet.GetAccountBalance(0, 0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(balance).ToNot(BeNil()) + Expect(balance.Total).To(BeEquivalentTo(0)) }) }) Describe("SpendableForAccount", func() { - Context("when called", func() { - It("should return the spendable balance", func() { - balance, err := wallet.SpendableForAccount(0, 0) - By("returning a nil error") - Expect(err).To(BeNil()) - By("returning the expected balance") - Expect(balance).To(BeEquivalentTo(0)) - }) + It("should return the spendable balance", func() { + balance, err := wallet.SpendableForAccount(0, 0) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(balance).To(BeEquivalentTo(0)) }) }) Describe("NextAccount", func() { - Context("when called", func() { + Context("when called with the right args", func() { It("should return the next account number", func() { accountNumber, err := wallet.NextAccount("account 1", []byte(password)) By("returning a nil error") @@ -153,7 +147,7 @@ var _ = Describe("Account", func() { }) Describe("AccountName", func() { - Context("when called", func() { + Context("when called with an existing account number", func() { It("should return the account name", func() { name := wallet.AccountName(0) By("returning the expected account name") @@ -190,28 +184,24 @@ var _ = Describe("Account", func() { }) Describe("AccountNumber", func() { - Context("when called", func() { - It("should return the account number", func() { - number, err := wallet.AccountNumber("default") - By("returning a nil error") - Expect(err).To(BeNil()) - By("returning the expected account number") - Expect(number).To(BeEquivalentTo(uint32(0))) - }) + It("should return the account number", func() { + number, err := wallet.AccountNumber("default") + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected account number") + Expect(number).To(BeEquivalentTo(uint32(0))) }) }) Describe("HDPathForAccount", func() { - Context("when called", func() { - It("should return the HD path for account", func() { - var accountNumber int32 = 0 - path, err := wallet.HDPathForAccount(accountNumber) - By("returning a nil error") - Expect(err).To(BeNil()) - expectedPath := LegacyTestnetHDPath + strconv.Itoa(int(accountNumber)) - By("returning the expected path") - Expect(path).To(BeEquivalentTo(expectedPath)) - }) + It("should return the HD path for account", func() { + var accountNumber int32 = 0 + path, err := wallet.HDPathForAccount(accountNumber) + By("returning a nil error") + Expect(err).To(BeNil()) + expectedPath := LegacyTestnetHDPath + strconv.Itoa(int(accountNumber)) + By("returning the expected path") + Expect(path).To(BeEquivalentTo(expectedPath)) }) }) }) From b2c40050de1ece1231bb12b417121fe94ccca36f Mon Sep 17 00:00:00 2001 From: Alawode Oluwandabira <24304808+RogueElement@users.noreply.github.com> Date: Thu, 19 Mar 2020 12:38:30 +0200 Subject: [PATCH 11/19] wallet: add wallet.InternalWallet for testing --- wallet_test.go | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 wallet_test.go diff --git a/wallet_test.go b/wallet_test.go new file mode 100644 index 00000000..7f51acba --- /dev/null +++ b/wallet_test.go @@ -0,0 +1,11 @@ +package dcrlibwallet + +import ( + w "github.com/decred/dcrwallet/wallet/v3" +) + +// InternalWallet returns the internal dcrwallet.Wallet. +// Only for testing purposes. +func (wallet *Wallet) InternalWallet() *w.Wallet { + return wallet.internal +} From 17bba031c4508091488fb6867ca26ad25b84f2d9 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 19 Mar 2020 12:58:22 +0100 Subject: [PATCH 12/19] Use internal wallet directly for assertion --- account_test.go | 64 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 13 deletions(-) diff --git a/account_test.go b/account_test.go index 2a777896..09d75df6 100644 --- a/account_test.go +++ b/account_test.go @@ -1,11 +1,13 @@ package dcrlibwallet_test import ( + "context" "math/rand" "os" "strconv" "time" + w "github.com/decred/dcrwallet/wallet/v3" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/raedahgroup/dcrlibwallet" @@ -20,10 +22,11 @@ func init() { var _ = Describe("Account", func() { var ( wallet *Wallet + internalWallet *w.Wallet password string ) - BeforeEach(func() { + BeforeSuite(func () { multi, err := NewMultiWallet(rootDir, "", "testnet3") Expect(err).To(BeNil()) Expect(multi).ToNot(BeNil()) @@ -32,9 +35,10 @@ var _ = Describe("Account", func() { wallet, err = multi.CreateNewWallet(password, 0) Expect(err).To(BeNil()) Expect(wallet).ToNot(BeNil()) + internalWallet = wallet.InternalWallet() }) - AfterEach(func() { + AfterSuite(func() { if wallet != nil { wallet.Shutdown() } @@ -42,6 +46,16 @@ var _ = Describe("Account", func() { Expect(err).To(BeNil()) }) + getWrongAccountNumber := func () uint32 { + var accountNumber uint32 = 1220 + var err error + for err == nil { + accountNumber++ + _, err = internalWallet.AccountName(context.Background(), accountNumber) + } + return accountNumber + } + Describe("GetAccounts", func() { It("should get accounts", func() { res, err := wallet.GetAccounts(0) @@ -79,22 +93,34 @@ var _ = Describe("Account", func() { Describe("GetAccountBalance", func() { It("should get the account balance", func() { - balance, err := wallet.GetAccountBalance(0, 0) + var accountNumber uint32 = 0 + var confirmations int32 = 0 + internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) + balance, err := wallet.GetAccountBalance(int32(accountNumber), confirmations) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") Expect(balance).ToNot(BeNil()) - Expect(balance.Total).To(BeEquivalentTo(0)) + Expect(balance.Total).To(BeEquivalentTo(internalBalance.Total)) + Expect(balance.ImmatureReward).To(BeEquivalentTo(internalBalance.ImmatureCoinbaseRewards)) + Expect(balance.ImmatureStakeGeneration).To(BeEquivalentTo(internalBalance.ImmatureStakeGeneration)) + Expect(balance.Spendable).To(BeEquivalentTo(internalBalance.Spendable)) + Expect(balance.LockedByTickets).To(BeEquivalentTo(internalBalance.LockedByTickets)) + Expect(balance.VotingAuthority).To(BeEquivalentTo(internalBalance.VotingAuthority)) + Expect(balance.UnConfirmed).To(BeEquivalentTo(internalBalance.Unconfirmed)) }) }) Describe("SpendableForAccount", func() { It("should return the spendable balance", func() { - balance, err := wallet.SpendableForAccount(0, 0) + var accountNumber uint32 = 0 + var confirmations int32 = 0 + internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) + balance, err := wallet.SpendableForAccount(int32(accountNumber), confirmations) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") - Expect(balance).To(BeEquivalentTo(0)) + Expect(balance).To(BeEquivalentTo(internalBalance.Spendable)) }) }) @@ -149,15 +175,19 @@ var _ = Describe("Account", func() { Describe("AccountName", func() { Context("when called with an existing account number", func() { It("should return the account name", func() { + var accountNumber uint32 = 0 + internalAccountName, err := internalWallet.AccountName(context.Background(), accountNumber) + Expect(err).To(BeNil()) name := wallet.AccountName(0) By("returning the expected account name") - Expect(name).To(BeEquivalentTo("default")) + Expect(name).To(BeEquivalentTo(internalAccountName)) }) }) Context("when called with a non-existing account number", func() { It("should fail", func() { - name := wallet.AccountName(1220) + var wrongAccountNumber uint32 = getWrongAccountNumber() + name := wallet.AccountName(int32(wrongAccountNumber)) By("returning 'Account not found'") Expect(name).To(BeEquivalentTo("Account not found")) }) @@ -167,16 +197,20 @@ var _ = Describe("Account", func() { Describe("AccountNameRaw", func() { Context("when called with a valid account number", func() { It("should return the account name", func() { - name, err := wallet.AccountNameRaw(0) + var accountNumber uint32 = 0 + internalAccountName, err := internalWallet.AccountName(context.Background(), accountNumber) + Expect(err).To(BeNil()) + name, err := wallet.AccountNameRaw(accountNumber) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected account name") - Expect(name).To(BeEquivalentTo("default")) + Expect(name).To(BeEquivalentTo(internalAccountName)) }) }) Context("when called with a non-existing account number", func() { It("should fail", func() { - _, err := wallet.AccountNameRaw(10290) + var wrongAccountNumber = getWrongAccountNumber() + _, err := wallet.AccountNameRaw(wrongAccountNumber) By("returning a non nil error") Expect(err).ToNot(BeNil()) }) @@ -185,11 +219,15 @@ var _ = Describe("Account", func() { Describe("AccountNumber", func() { It("should return the account number", func() { - number, err := wallet.AccountNumber("default") + var accountNumber uint32 = 0 + internalAccountName, err := internalWallet.AccountName(context.Background(), accountNumber) + Expect(err).To(BeNil()) + + number, err := wallet.AccountNumber(internalAccountName) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected account number") - Expect(number).To(BeEquivalentTo(uint32(0))) + Expect(number).To(BeEquivalentTo(accountNumber)) }) }) From 7e670f6dec9a6a2ed54c8e3fc01e002bf2678a82 Mon Sep 17 00:00:00 2001 From: Ademu Date: Thu, 19 Mar 2020 16:11:42 +0100 Subject: [PATCH 13/19] Remove test root before running new test --- account_test.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/account_test.go b/account_test.go index 09d75df6..e169264d 100644 --- a/account_test.go +++ b/account_test.go @@ -27,6 +27,7 @@ var _ = Describe("Account", func() { ) BeforeSuite(func () { + os.RemoveAll(rootDir) multi, err := NewMultiWallet(rootDir, "", "testnet3") Expect(err).To(BeNil()) Expect(multi).ToNot(BeNil()) @@ -42,8 +43,6 @@ var _ = Describe("Account", func() { if wallet != nil { wallet.Shutdown() } - err := os.RemoveAll(rootDir) - Expect(err).To(BeNil()) }) getWrongAccountNumber := func () uint32 { From 9f8dad8b9256aa4e2a95cce6f96e398d19f65a0e Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 19 Mar 2020 16:43:22 +0100 Subject: [PATCH 14/19] gofmt --- account_test.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/account_test.go b/account_test.go index e169264d..44659a7c 100644 --- a/account_test.go +++ b/account_test.go @@ -21,12 +21,12 @@ func init() { var _ = Describe("Account", func() { var ( - wallet *Wallet + wallet *Wallet internalWallet *w.Wallet - password string + password string ) - BeforeSuite(func () { + BeforeSuite(func() { os.RemoveAll(rootDir) multi, err := NewMultiWallet(rootDir, "", "testnet3") Expect(err).To(BeNil()) @@ -45,7 +45,7 @@ var _ = Describe("Account", func() { } }) - getWrongAccountNumber := func () uint32 { + getWrongAccountNumber := func() uint32 { var accountNumber uint32 = 1220 var err error for err == nil { @@ -95,6 +95,7 @@ var _ = Describe("Account", func() { var accountNumber uint32 = 0 var confirmations int32 = 0 internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) + Expect(err).To(BeNil()) balance, err := wallet.GetAccountBalance(int32(accountNumber), confirmations) By("returning a nil error") Expect(err).To(BeNil()) @@ -115,6 +116,7 @@ var _ = Describe("Account", func() { var accountNumber uint32 = 0 var confirmations int32 = 0 internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) + Expect(err).To(BeNil()) balance, err := wallet.SpendableForAccount(int32(accountNumber), confirmations) By("returning a nil error") Expect(err).To(BeNil()) @@ -208,7 +210,7 @@ var _ = Describe("Account", func() { }) Context("when called with a non-existing account number", func() { It("should fail", func() { - var wrongAccountNumber = getWrongAccountNumber() + var wrongAccountNumber = getWrongAccountNumber() _, err := wallet.AccountNameRaw(wrongAccountNumber) By("returning a non nil error") Expect(err).ToNot(BeNil()) @@ -221,7 +223,7 @@ var _ = Describe("Account", func() { var accountNumber uint32 = 0 internalAccountName, err := internalWallet.AccountName(context.Background(), accountNumber) Expect(err).To(BeNil()) - + number, err := wallet.AccountNumber(internalAccountName) By("returning a nil error") Expect(err).To(BeNil()) From a97f13381e718a68052ef261045926c35b4f0081 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Thu, 19 Mar 2020 19:45:38 +0100 Subject: [PATCH 15/19] Deep assertion --- account_test.go | 52 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/account_test.go b/account_test.go index 44659a7c..09d4b7da 100644 --- a/account_test.go +++ b/account_test.go @@ -2,12 +2,14 @@ package dcrlibwallet_test import ( "context" + "encoding/json" "math/rand" "os" "strconv" "time" w "github.com/decred/dcrwallet/wallet/v3" + "github.com/decred/dcrwallet/wallet/v3/udb" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" . "github.com/raedahgroup/dcrlibwallet" @@ -55,6 +57,28 @@ var _ = Describe("Account", func() { return accountNumber } + assertBalanceEqual := func (intBal udb.Balances, bal *Balance) { + Expect(bal.ImmatureReward).To(BeEquivalentTo(intBal.ImmatureCoinbaseRewards)) + Expect(bal.ImmatureStakeGeneration).To(BeEquivalentTo(intBal.ImmatureStakeGeneration)) + Expect(bal.LockedByTickets).To(BeEquivalentTo(intBal.LockedByTickets)) + Expect(bal.Spendable).To(BeEquivalentTo(intBal.Spendable)) + Expect(bal.Total).To(BeEquivalentTo(intBal.Total)) + Expect(bal.UnConfirmed).To(BeEquivalentTo(intBal.Unconfirmed)) + Expect(bal.VotingAuthority).To(BeEquivalentTo(intBal.VotingAuthority)) + } + + assertAccountsEquals := func (intAcc w.AccountResult, acc *Account) { + Expect(intAcc.AccountName).To(BeEquivalentTo(acc.Name)) + Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) + Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) + Expect(int32(int32(intAcc.LastUsedExternalIndex + 20))).To(BeEquivalentTo(acc.ExternalKeyCount)) + Expect(int32(intAcc.LastUsedInternalIndex + 20)).To(BeEquivalentTo(acc.InternalKeyCount)) + Expect(intAcc.ImportedKeyCount).To(BeEquivalentTo(acc.ImportedKeyCount)) + intBalance, err := internalWallet.CalculateAccountBalance(context.Background(), uint32(acc.Number), 0) + Expect(err).To(BeNil()) + assertBalanceEqual(intBalance, acc.Balance) + } + Describe("GetAccounts", func() { It("should get accounts", func() { res, err := wallet.GetAccounts(0) @@ -62,20 +86,36 @@ var _ = Describe("Account", func() { Expect(err).To(BeNil()) By("returning nonempty accounts string") Expect(res).ToNot(BeEquivalentTo("")) + var accountsRes Accounts + err = json.Unmarshal([]byte(res), &accountsRes) + Expect(err).To(BeNil()) + internalAccount, err := internalWallet.Accounts(context.Background()) + Expect(err).To(BeNil()) + Expect(accountsRes.Count).To(BeEquivalentTo(len(internalAccount.Accounts))) + Expect(accountsRes.CurrentBlockHash).To(BeEquivalentTo(internalAccount.CurrentBlockHash[:])) + Expect(accountsRes.CurrentBlockHeight).To(BeEquivalentTo(internalAccount.CurrentBlockHeight)) + for i := 0; i < len(internalAccount.Accounts); i++ { + assertAccountsEquals(internalAccount.Accounts[i], accountsRes.Acc[i]) + } }) }) Describe("GetAccount", func() { Context("when called with the right parameters", func() { It("should get account", func() { - var accountNumber int32 = 0 - account, err := wallet.GetAccount(accountNumber, 0) + var accountNumber uint32 = 0 + account, err := wallet.GetAccount(int32(accountNumber), 0) By("returning a nil error") Expect(err).To(BeNil()) By("returning a non nil account") Expect(account).ToNot(BeNil()) By("returning an account with the supplied account number") Expect(account.Number).To(BeEquivalentTo(accountNumber)) + intAccount, err := internalWallet.AccountProperties(context.Background(), accountNumber) + Expect(err).To(BeNil()) + assertAccountsEquals(w.AccountResult{ + AccountProperties: *intAccount, + }, account) }) }) @@ -101,13 +141,7 @@ var _ = Describe("Account", func() { Expect(err).To(BeNil()) By("returning the expected balance") Expect(balance).ToNot(BeNil()) - Expect(balance.Total).To(BeEquivalentTo(internalBalance.Total)) - Expect(balance.ImmatureReward).To(BeEquivalentTo(internalBalance.ImmatureCoinbaseRewards)) - Expect(balance.ImmatureStakeGeneration).To(BeEquivalentTo(internalBalance.ImmatureStakeGeneration)) - Expect(balance.Spendable).To(BeEquivalentTo(internalBalance.Spendable)) - Expect(balance.LockedByTickets).To(BeEquivalentTo(internalBalance.LockedByTickets)) - Expect(balance.VotingAuthority).To(BeEquivalentTo(internalBalance.VotingAuthority)) - Expect(balance.UnConfirmed).To(BeEquivalentTo(internalBalance.Unconfirmed)) + assertBalanceEqual(internalBalance, balance) }) }) From 82445c219fcec57fe57cb31a0ae46fd00a21953e Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Fri, 20 Mar 2020 05:35:18 +0100 Subject: [PATCH 16/19] gofmt --- account_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/account_test.go b/account_test.go index 09d4b7da..54416159 100644 --- a/account_test.go +++ b/account_test.go @@ -57,7 +57,7 @@ var _ = Describe("Account", func() { return accountNumber } - assertBalanceEqual := func (intBal udb.Balances, bal *Balance) { + assertBalanceEqual := func(intBal udb.Balances, bal *Balance) { Expect(bal.ImmatureReward).To(BeEquivalentTo(intBal.ImmatureCoinbaseRewards)) Expect(bal.ImmatureStakeGeneration).To(BeEquivalentTo(intBal.ImmatureStakeGeneration)) Expect(bal.LockedByTickets).To(BeEquivalentTo(intBal.LockedByTickets)) @@ -67,7 +67,7 @@ var _ = Describe("Account", func() { Expect(bal.VotingAuthority).To(BeEquivalentTo(intBal.VotingAuthority)) } - assertAccountsEquals := func (intAcc w.AccountResult, acc *Account) { + assertAccountsEquals := func(intAcc w.AccountResult, acc *Account) { Expect(intAcc.AccountName).To(BeEquivalentTo(acc.Name)) Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) From 904fd63a4168caf3b637b26a9d1415762fd734bd Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Fri, 20 Mar 2020 05:39:48 +0100 Subject: [PATCH 17/19] Lint --- account_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/account_test.go b/account_test.go index 54416159..b401fb1d 100644 --- a/account_test.go +++ b/account_test.go @@ -71,7 +71,7 @@ var _ = Describe("Account", func() { Expect(intAcc.AccountName).To(BeEquivalentTo(acc.Name)) Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) Expect(intAcc.AccountNumber).To(BeEquivalentTo(acc.Number)) - Expect(int32(int32(intAcc.LastUsedExternalIndex + 20))).To(BeEquivalentTo(acc.ExternalKeyCount)) + Expect(int32(intAcc.LastUsedExternalIndex + 20)).To(BeEquivalentTo(acc.ExternalKeyCount)) Expect(int32(intAcc.LastUsedInternalIndex + 20)).To(BeEquivalentTo(acc.InternalKeyCount)) Expect(intAcc.ImportedKeyCount).To(BeEquivalentTo(acc.ImportedKeyCount)) intBalance, err := internalWallet.CalculateAccountBalance(context.Background(), uint32(acc.Number), 0) From 39d13f3df8547b08dd4bc8ab37baa9a1709bc8f0 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Wed, 29 Apr 2020 12:04:23 +0100 Subject: [PATCH 18/19] Move befor and after suit to outside block --- account_test.go | 27 +-------------------------- dcrlibwallet_suite_test.go | 29 +++++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/account_test.go b/account_test.go index b401fb1d..372b4fc3 100644 --- a/account_test.go +++ b/account_test.go @@ -4,7 +4,6 @@ import ( "context" "encoding/json" "math/rand" - "os" "strconv" "time" @@ -22,31 +21,7 @@ func init() { } var _ = Describe("Account", func() { - var ( - wallet *Wallet - internalWallet *w.Wallet - password string - ) - - BeforeSuite(func() { - os.RemoveAll(rootDir) - multi, err := NewMultiWallet(rootDir, "", "testnet3") - Expect(err).To(BeNil()) - Expect(multi).ToNot(BeNil()) - - password = randomPassword() - wallet, err = multi.CreateNewWallet(password, 0) - Expect(err).To(BeNil()) - Expect(wallet).ToNot(BeNil()) - internalWallet = wallet.InternalWallet() - }) - - AfterSuite(func() { - if wallet != nil { - wallet.Shutdown() - } - }) - + getWrongAccountNumber := func() uint32 { var accountNumber uint32 = 1220 var err error diff --git a/dcrlibwallet_suite_test.go b/dcrlibwallet_suite_test.go index 13c6e665..caf71174 100644 --- a/dcrlibwallet_suite_test.go +++ b/dcrlibwallet_suite_test.go @@ -1,13 +1,42 @@ package dcrlibwallet_test import ( + "os" "testing" + w "github.com/decred/dcrwallet/wallet/v3" . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + . "github.com/raedahgroup/dcrlibwallet" +) + +var ( + wallet *Wallet + internalWallet *w.Wallet + password string ) func TestDcrlibwallet(t *testing.T) { + + BeforeSuite(func() { + os.RemoveAll(rootDir) + multi, err := NewMultiWallet(rootDir, "", "testnet3") + Expect(err).To(BeNil()) + Expect(multi).ToNot(BeNil()) + + password = randomPassword() + wallet, err = multi.CreateNewWallet(password, 0) + Expect(err).To(BeNil()) + Expect(wallet).ToNot(BeNil()) + internalWallet = wallet.InternalWallet() + }) + + AfterSuite(func() { + if wallet != nil { + wallet.Shutdown() + } + }) + RegisterFailHandler(Fail) RunSpecs(t, "Dcrlibwallet Suite") } From fbda18baf92f14f9fa950fe6240f8cea321a7aa0 Mon Sep 17 00:00:00 2001 From: Ademu Anthony Date: Wed, 29 Apr 2020 16:24:45 +0100 Subject: [PATCH 19/19] Rebased and cleaned up --- account_test.go | 26 +++++++------------------- dcrlibwallet_suite_test.go | 17 +++++++++++++++-- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/account_test.go b/account_test.go index 372b4fc3..5572e5ce 100644 --- a/account_test.go +++ b/account_test.go @@ -3,9 +3,7 @@ package dcrlibwallet_test import ( "context" "encoding/json" - "math/rand" "strconv" - "time" w "github.com/decred/dcrwallet/wallet/v3" "github.com/decred/dcrwallet/wallet/v3/udb" @@ -21,7 +19,7 @@ func init() { } var _ = Describe("Account", func() { - + getWrongAccountNumber := func() uint32 { var accountNumber uint32 = 1220 var err error @@ -56,7 +54,7 @@ var _ = Describe("Account", func() { Describe("GetAccounts", func() { It("should get accounts", func() { - res, err := wallet.GetAccounts(0) + res, err := wallet.GetAccounts() By("returning a nil error") Expect(err).To(BeNil()) By("returning nonempty accounts string") @@ -79,7 +77,7 @@ var _ = Describe("Account", func() { Context("when called with the right parameters", func() { It("should get account", func() { var accountNumber uint32 = 0 - account, err := wallet.GetAccount(int32(accountNumber), 0) + account, err := wallet.GetAccount(int32(accountNumber)) By("returning a nil error") Expect(err).To(BeNil()) By("returning a non nil account") @@ -96,7 +94,7 @@ var _ = Describe("Account", func() { Context("when called for non-existing account", func() { It("it should fail", func() { - account, err := wallet.GetAccount(1000000000, 0) + account, err := wallet.GetAccount(1000000000) By("returning a non nil error") Expect(err).ToNot(BeNil()) By("by returning nil account") @@ -111,7 +109,7 @@ var _ = Describe("Account", func() { var confirmations int32 = 0 internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) Expect(err).To(BeNil()) - balance, err := wallet.GetAccountBalance(int32(accountNumber), confirmations) + balance, err := wallet.GetAccountBalance(int32(accountNumber)) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") @@ -126,7 +124,7 @@ var _ = Describe("Account", func() { var confirmations int32 = 0 internalBalance, err := internalWallet.CalculateAccountBalance(context.Background(), accountNumber, confirmations) Expect(err).To(BeNil()) - balance, err := wallet.SpendableForAccount(int32(accountNumber), confirmations) + balance, err := wallet.SpendableForAccount(int32(accountNumber)) By("returning a nil error") Expect(err).To(BeNil()) By("returning the expected balance") @@ -167,7 +165,7 @@ var _ = Describe("Account", func() { By("returning a nil error") Expect(err).To(BeNil()) - account, err := wallet.GetAccount(0, 0) + account, err := wallet.GetAccount(0) Expect(err).To(BeNil()) By("changing the account name in the wallet") Expect(account.Name).To(BeEquivalentTo(updatedName)) @@ -253,13 +251,3 @@ var _ = Describe("Account", func() { }) }) }) - -func randomPassword() string { - var random = rand.New(rand.NewSource(time.Now().UnixNano())) - const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" - b := make([]byte, 8) - for i := range b { - b[i] = charset[random.Intn(len(charset))] - } - return string(b) -} diff --git a/dcrlibwallet_suite_test.go b/dcrlibwallet_suite_test.go index caf71174..91e999eb 100644 --- a/dcrlibwallet_suite_test.go +++ b/dcrlibwallet_suite_test.go @@ -1,8 +1,10 @@ package dcrlibwallet_test import ( + "math/rand" "os" "testing" + "time" w "github.com/decred/dcrwallet/wallet/v3" . "github.com/onsi/ginkgo" @@ -17,7 +19,7 @@ var ( ) func TestDcrlibwallet(t *testing.T) { - + BeforeSuite(func() { os.RemoveAll(rootDir) multi, err := NewMultiWallet(rootDir, "", "testnet3") @@ -25,9 +27,10 @@ func TestDcrlibwallet(t *testing.T) { Expect(multi).ToNot(BeNil()) password = randomPassword() - wallet, err = multi.CreateNewWallet(password, 0) + wallet, err = multi.CreateNewWallet("main", password, 0) Expect(err).To(BeNil()) Expect(wallet).ToNot(BeNil()) + wallet.SaveUserConfigValue(SpendUnconfirmedConfigKey, true) internalWallet = wallet.InternalWallet() }) @@ -40,3 +43,13 @@ func TestDcrlibwallet(t *testing.T) { RegisterFailHandler(Fail) RunSpecs(t, "Dcrlibwallet Suite") } + +func randomPassword() string { + var random = rand.New(rand.NewSource(time.Now().UnixNano())) + const charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789" + b := make([]byte, 8) + for i := range b { + b[i] = charset[random.Intn(len(charset))] + } + return string(b) +}