diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..b1be04c0 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,34 @@ +name: Tests + +on: [pull_request, push] + +jobs: + linux_test: + 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 testenv + + windows_test: + name: Tests - windows + + runs-on: windows-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 windows_test.dockerfile . + + - name: Run the image + run: docker run testenv 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 8459f6ec..1fb611e6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,4 +6,4 @@ ENV GO111MODULE on RUN go version -ENTRYPOINT [ "./run_tests.sh", "lint"] +ENTRYPOINT [ "./run_tests.sh", "lint"] \ No newline at end of file diff --git a/account_test.go b/account_test.go new file mode 100644 index 00000000..5572e5ce --- /dev/null +++ b/account_test.go @@ -0,0 +1,253 @@ +package dcrlibwallet_test + +import ( + "context" + "encoding/json" + "strconv" + + 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" +) + +const rootDir = ".dcrlibwallet_tests_root" + +func init() { + SetLogLevels("error") +} + +var _ = Describe("Account", func() { + + getWrongAccountNumber := func() uint32 { + var accountNumber uint32 = 1220 + var err error + for err == nil { + accountNumber++ + _, err = internalWallet.AccountName(context.Background(), accountNumber) + } + 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(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() + By("returning a nil error") + 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 uint32 = 0 + account, err := wallet.GetAccount(int32(accountNumber)) + 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) + }) + }) + + Context("when called for non-existing account", func() { + It("it should fail", func() { + account, err := wallet.GetAccount(1000000000) + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + By("by returning nil account") + Expect(account).To(BeNil()) + }) + }) + }) + + Describe("GetAccountBalance", func() { + It("should get the account balance", 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)) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(balance).ToNot(BeNil()) + assertBalanceEqual(internalBalance, balance) + }) + }) + + Describe("SpendableForAccount", func() { + It("should return the spendable balance", 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)) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected balance") + Expect(balance).To(BeEquivalentTo(internalBalance.Spendable)) + }) + }) + + Describe("NextAccount", 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") + 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() { + 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") + Expect(err.Error()).To(BeEquivalentTo("invalid_passphrase")) + }) + }) + }) + + 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") + Expect(err).To(BeNil()) + + account, err := wallet.GetAccount(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", 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(internalAccountName)) + }) + }) + + Context("when called with a non-existing account number", func() { + It("should fail", func() { + var wrongAccountNumber uint32 = getWrongAccountNumber() + name := wallet.AccountName(int32(wrongAccountNumber)) + By("returning 'Account not found'") + Expect(name).To(BeEquivalentTo("Account not found")) + }) + }) + }) + + Describe("AccountNameRaw", func() { + Context("when called with a valid 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, err := wallet.AccountNameRaw(accountNumber) + By("returning a nil error") + Expect(err).To(BeNil()) + By("returning the expected account name") + Expect(name).To(BeEquivalentTo(internalAccountName)) + }) + }) + Context("when called with a non-existing account number", func() { + It("should fail", func() { + var wrongAccountNumber = getWrongAccountNumber() + _, err := wallet.AccountNameRaw(wrongAccountNumber) + By("returning a non nil error") + Expect(err).ToNot(BeNil()) + }) + }) + }) + + Describe("AccountNumber", func() { + It("should return the account number", 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()) + By("returning the expected account number") + Expect(number).To(BeEquivalentTo(accountNumber)) + }) + }) + + Describe("HDPathForAccount", 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..91e999eb --- /dev/null +++ b/dcrlibwallet_suite_test.go @@ -0,0 +1,55 @@ +package dcrlibwallet_test + +import ( + "math/rand" + "os" + "testing" + "time" + + 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("main", password, 0) + Expect(err).To(BeNil()) + Expect(wallet).ToNot(BeNil()) + wallet.SaveUserConfigValue(SpendUnconfirmedConfigKey, true) + internalWallet = wallet.InternalWallet() + }) + + AfterSuite(func() { + if wallet != nil { + wallet.Shutdown() + } + }) + + 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) +} diff --git a/go.mod b/go.mod index 7dc3aed6..00eb45d2 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 @@ -39,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 84696662..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,16 +214,26 @@ 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= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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= @@ -253,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= @@ -275,15 +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= @@ -294,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= @@ -305,15 +330,30 @@ 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-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= @@ -325,3 +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= diff --git a/linux_test.dockerfile b/linux_test.dockerfile new file mode 100644 index 00000000..7fa57757 --- /dev/null +++ b/linux_test.dockerfile @@ -0,0 +1,9 @@ +FROM golang + +COPY . /src + +WORKDIR /src + +RUN go mod download + +ENTRYPOINT [ "go", "test", "-timeout", "1m"] 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 +} diff --git a/windows_test.dockerfile b/windows_test.dockerfile new file mode 100644 index 00000000..df295929 --- /dev/null +++ b/windows_test.dockerfile @@ -0,0 +1,9 @@ +FROM golang:nanoserver + +COPY . /src + +WORKDIR /src + +RUN go mod download + +ENTRYPOINT [ "go", "test", "-timeout", "1m"] \ No newline at end of file