github.com/braveheart12/just@v0.8.7/functest/send_money_test.go (about) 1 // +build functest 2 3 /* 4 * Copyright 2019 Insolar Technologies 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 19 package functest 20 21 import ( 22 "testing" 23 "time" 24 25 "github.com/insolar/insolar/testutils" 26 "github.com/stretchr/testify/require" 27 ) 28 29 const times = 5 30 31 func checkBalanceFewTimes(t *testing.T, caller *user, ref string, expected int) { 32 for i := 0; i < times; i++ { 33 balance := getBalanceNoErr(t, caller, ref) 34 if balance == expected { 35 return 36 } 37 time.Sleep(time.Second) 38 } 39 t.Error("Received balance is not equal expected") 40 } 41 42 // TODO: uncomment after undoing of all transaction in failed request will be supported 43 func TestTransferMoney(t *testing.T) { 44 firstMember := createMember(t, "Member1") 45 secondMember := createMember(t, "Member2") 46 // Skip validation of balance before/after transfer 47 // oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 48 // oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 49 50 amount := 111 51 52 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 53 require.NoError(t, err) 54 55 // Skip validation of balance before/after transfer 56 // checkBalanceFewTimes(t, secondMember, secondMember.ref, oldSecondBalance+amount) 57 // newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 58 // require.Equal(t, oldFirstBalance-amount, newFirstBalance) 59 } 60 61 func TestTransferMoneyFromNotExist(t *testing.T) { 62 firstMember := createMember(t, "Member1") 63 firstMember.ref = testutils.RandomRef().String() 64 65 secondMember := createMember(t, "Member2") 66 oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 67 68 amount := 111 69 70 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 71 require.Contains(t, err.Error(), "not found") 72 73 newSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 74 require.Equal(t, oldSecondBalance, newSecondBalance) 75 } 76 77 func TestTransferMoneyToNotExist(t *testing.T) { 78 firstMember := createMember(t, "Member1") 79 oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 80 81 amount := 111 82 83 _, err := signedRequest(firstMember, "Transfer", amount, testutils.RandomRef().String()) 84 require.Contains(t, err.Error(), "[ Transfer ] Can't get implementation: [ GetDelegate ] on calling main API") 85 86 newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 87 require.Equal(t, oldFirstBalance, newFirstBalance) 88 } 89 90 func TestTransferNegativeAmount(t *testing.T) { 91 firstMember := createMember(t, "Member1") 92 secondMember := createMember(t, "Member2") 93 oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 94 oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 95 96 amount := -111 97 98 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 99 require.Error(t, err) 100 101 newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 102 newSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 103 require.Equal(t, oldFirstBalance, newFirstBalance) 104 require.Equal(t, oldSecondBalance, newSecondBalance) 105 } 106 107 // TODO: unskip test after undoing of all transaction in failed request will be supported 108 func TestTransferAllAmount(t *testing.T) { 109 t.Skip() 110 firstMember := createMember(t, "Member1") 111 secondMember := createMember(t, "Member2") 112 oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 113 oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 114 115 amount := oldFirstBalance 116 117 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 118 require.NoError(t, err) 119 120 checkBalanceFewTimes(t, secondMember, secondMember.ref, oldSecondBalance+oldFirstBalance) 121 newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 122 require.Equal(t, 0, newFirstBalance) 123 } 124 125 func TestTransferMoreThanAvailableAmount(t *testing.T) { 126 firstMember := createMember(t, "Member1") 127 secondMember := createMember(t, "Member2") 128 oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 129 oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 130 131 amount := oldFirstBalance + 100 132 133 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 134 require.Contains(t, err.Error(), "[ Transfer ] Not enough balance for transfer: subtrahend must be smaller than minuend") 135 136 newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 137 newSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 138 require.Equal(t, oldFirstBalance, newFirstBalance) 139 require.Equal(t, oldSecondBalance, newSecondBalance) 140 } 141 142 func TestTransferToMyself(t *testing.T) { 143 member := createMember(t, "Member1") 144 oldMemberBalance := getBalanceNoErr(t, member, member.ref) 145 146 amount := 100 147 148 _, err := signedRequest(member, "Transfer", amount, member.ref) 149 require.Contains(t, err.Error(), "[ transferCall ] Recipient must be different from the sender") 150 151 newMemberBalance := getBalanceNoErr(t, member, member.ref) 152 require.Equal(t, oldMemberBalance, newMemberBalance) 153 } 154 155 // TODO: test to check overflow of balance 156 // TODO: check transfer zero amount 157 158 // TODO: uncomment after undoing of all transaction in failed request will be supported 159 func TestTransferTwoTimes(t *testing.T) { 160 firstMember := createMember(t, "Member1") 161 secondMember := createMember(t, "Member2") 162 // Skip validation of balance before/after transfer 163 // oldFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 164 // oldSecondBalance := getBalanceNoErr(t, secondMember, secondMember.ref) 165 166 amount := 100 167 168 _, err := signedRequest(firstMember, "Transfer", amount, secondMember.ref) 169 require.NoError(t, err) 170 _, err = signedRequest(firstMember, "Transfer", amount, secondMember.ref) 171 require.NoError(t, err) 172 173 // Skip validation of balance before/after transfer 174 // checkBalanceFewTimes(t, secondMember, secondMember.ref, oldSecondBalance+2*amount) 175 // newFirstBalance := getBalanceNoErr(t, firstMember, firstMember.ref) 176 // require.Equal(t, oldFirstBalance-2*amount, newFirstBalance) 177 }