code.vegaprotocol.io/vega@v0.79.0/cmd/vegawallet/commands/raw_transaction_send_test.go (about) 1 // Copyright (C) 2023 Gobalsky Labs Limited 2 // 3 // This program is free software: you can redistribute it and/or modify 4 // it under the terms of the GNU Affero General Public License as 5 // published by the Free Software Foundation, either version 3 of the 6 // License, or (at your option) any later version. 7 // 8 // This program is distributed in the hope that it will be useful, 9 // but WITHOUT ANY WARRANTY; without even the implied warranty of 10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 // GNU Affero General Public License for more details. 12 // 13 // You should have received a copy of the GNU Affero General Public License 14 // along with this program. If not, see <http://www.gnu.org/licenses/>. 15 16 package cmd_test 17 18 import ( 19 "fmt" 20 "testing" 21 22 cmd "code.vegaprotocol.io/vega/cmd/vegawallet/commands" 23 "code.vegaprotocol.io/vega/cmd/vegawallet/commands/flags" 24 vgrand "code.vegaprotocol.io/vega/libs/rand" 25 "code.vegaprotocol.io/vega/wallet/api" 26 27 "github.com/stretchr/testify/assert" 28 "github.com/stretchr/testify/require" 29 ) 30 31 func TestSendTxFlags(t *testing.T) { 32 t.Run("Valid flags succeeds", testSendTxFlagsValidFlagsSucceeds) 33 t.Run("Missing log level fails", testSendTxFlagsMissingLogLevelFails) 34 t.Run("Unsupported log level fails", testSendTxFlagsUnsupportedLogLevelFails) 35 t.Run("Missing network and node address fails", testSendTxFlagsMissingNetworkAndNodeAddressFails) 36 t.Run("Both network and node address specified fails", testSendTxFlagsBothNetworkAndNodeAddressSpecifiedFails) 37 t.Run("Missing tx fails", testSendTxFlagsMissingTxFails) 38 t.Run("Malformed tx fails", testSendTxFlagsMalformedTxFails) 39 } 40 41 func testSendTxFlagsValidFlagsSucceeds(t *testing.T) { 42 // given 43 network := vgrand.RandomStr(10) 44 45 encodedTx := "ChwIxZXB58qn4K06EMC2BPI+CwoHc29tZS1pZBACEpMBCoABMTM1ZDdmN2Q4MjhkMjg3ZDMyNDQzYjQ2NGEyZDQwNTkyZjQ1OTgwMGQ0MGZmMzY5Y2VhMGFkZDUzZmZjNjYzYzlkZmU2YTI4MGIxZWI4MjdiOTJmYmY2NTY3NzI3MjgwYzMwODBiNjg5NGYyMjYzZmJlYmFkN2I2M2VhN2M4MGYSDHZlZ2EvZWQyNTUxORgBgH0B0j5AZjM4MTc5NjljZDMxNmQ1NmMzN2EzYzE5MjVjMDMyOWM5ZTMxMDQ0ODI5OGZmNzYyMjMwMTVjN2QyY2RiOTFiOQ==" 46 f := &cmd.SendRawTransactionFlags{ 47 Network: network, 48 NodeAddress: "", 49 Retries: 10, 50 LogLevel: "debug", 51 RawTx: encodedTx, 52 } 53 54 expectedReq := api.AdminSendRawTransactionParams{ 55 Network: network, 56 NodeAddress: "", 57 Retries: 10, 58 EncodedTransaction: encodedTx, 59 SendingMode: "TYPE_ASYNC", 60 } 61 62 // when 63 req, err := f.Validate() 64 65 // then 66 require.NoError(t, err) 67 require.NotNil(t, req) 68 assert.Equal(t, expectedReq, req) 69 } 70 71 func testSendTxFlagsMissingLogLevelFails(t *testing.T) { 72 // given 73 f := newSendTxFlags(t) 74 f.LogLevel = "" 75 76 // when 77 req, err := f.Validate() 78 79 // then 80 assert.ErrorIs(t, err, flags.MustBeSpecifiedError("level")) 81 assert.Empty(t, req) 82 } 83 84 func testSendTxFlagsUnsupportedLogLevelFails(t *testing.T) { 85 // given 86 f := newSendTxFlags(t) 87 f.LogLevel = vgrand.RandomStr(5) 88 89 // when 90 req, err := f.Validate() 91 92 // then 93 assert.EqualError(t, err, fmt.Sprintf("unsupported log level %q, supported levels: debug, info, warn, error", f.LogLevel)) 94 assert.Empty(t, req) 95 } 96 97 func testSendTxFlagsMissingNetworkAndNodeAddressFails(t *testing.T) { 98 // given 99 f := newSendTxFlags(t) 100 f.Network = "" 101 f.NodeAddress = "" 102 103 // when 104 req, err := f.Validate() 105 106 // then 107 assert.ErrorIs(t, err, flags.OneOfFlagsMustBeSpecifiedError("network", "node-address")) 108 assert.Empty(t, req) 109 } 110 111 func testSendTxFlagsBothNetworkAndNodeAddressSpecifiedFails(t *testing.T) { 112 // given 113 f := newSendTxFlags(t) 114 f.Network = vgrand.RandomStr(10) 115 f.NodeAddress = vgrand.RandomStr(10) 116 117 // when 118 req, err := f.Validate() 119 120 // then 121 assert.ErrorIs(t, err, flags.MutuallyExclusiveError("network", "node-address")) 122 assert.Empty(t, req) 123 } 124 125 func testSendTxFlagsMissingTxFails(t *testing.T) { 126 // given 127 f := newSendTxFlags(t) 128 f.RawTx = "" 129 130 // when 131 req, err := f.Validate() 132 133 // then 134 assert.ErrorIs(t, err, flags.ArgMustBeSpecifiedError("transaction")) 135 assert.Empty(t, req) 136 } 137 138 func testSendTxFlagsMalformedTxFails(t *testing.T) { 139 // given 140 f := newSendTxFlags(t) 141 f.RawTx = vgrand.RandomStr(5) 142 143 // when 144 req, err := f.Validate() 145 146 // then 147 assert.Error(t, err) 148 assert.Empty(t, req) 149 } 150 151 func newSendTxFlags(t *testing.T) *cmd.SendRawTransactionFlags { 152 t.Helper() 153 154 networkName := vgrand.RandomStr(10) 155 156 return &cmd.SendRawTransactionFlags{ 157 Network: networkName, 158 NodeAddress: "", 159 Retries: 10, 160 LogLevel: "debug", 161 RawTx: "ChsItbycz7nhsO4/EPZ38j4LCgdzb21lLWlkEAISkwEKgAE4NjNjY2NhZGU5OTM5NTU5NWFmMmRkYjc4MTRiM2Q0NTE4NTllNDljNGRkZjUwYjRkZTJkOGUwNTBhY2U2YTQzOTM4OGJmMmFiN2E0N2NhZDM3MjQ3YWEwNzU1Yzk5NmMxZDJmMDY4MTI1YzY5NGVlNGNiMmU4ZWEyZmE2YmYwNRIMdmVnYS9lZDI1NTE5GAGAfQHSPkBmMzgxNzk2OWNkMzE2ZDU2YzM3YTNjMTkyNWMwMzI5YzllMzEwNDQ4Mjk4ZmY3NjIyMzAxNWM3ZDJjZGI5MWI5", 162 } 163 }