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  }