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  }