github.com/inklabsfoundation/inkchain@v0.17.1-0.20181025012015-c3cef8062f19/core/scc/ascc/ascc_test.go (about)

     1  /*
     2  Copyright Ziggurat Corp. 2017 All Rights Reserved.
     3  
     4  SPDX-License-Identifier: Apache-2.0
     5  */
     6  
     7  package ascc
     8  
     9  import (
    10  	"testing"
    11  	"github.com/inklabsfoundation/inkchain/core/chaincode/shim"
    12  	"fmt"
    13  	"strconv"
    14  )
    15  
    16  const(
    17  	MPriKey = "bc4bcb06a0793961aec4ee377796e050561b6a84852deccea5ad4583bb31eebe"
    18  	MAddress= "4230a12f5b0693dd88bb35c79d7e56a68614b199"
    19  
    20  	testPriKey = "60ef69c3e7d5a8a8d6c25406ab321f5e51c475dd44ddef3a9a47e91d764edae1"
    21  	testAddress= "3c97f146e8de9807ef723538521fcecd5f64c79a"
    22  	//MPriKey = "bab0c1204b2e7f344f9d1fbe8ad978d5355e32b8fa45b10b600d64ca970e0dc9"
    23  	//MAddress= "411b6f8f24F28CaAFE514c16E11800167f8EBd89"
    24  	//testPriKey = "703339e58975be8f91981b9fc6f001ad8cedf936067284b80e6e9c57b32a2ddd"
    25  	//testAddress= "4708A97Bf6F53c2Ca664BB003eF80fa6B997D656"
    26  )
    27  
    28  // check Init function
    29  func checkInit(t *testing.T, stub *shim.MockStub, args [][]byte) {
    30  	res := stub.MockInit("1", args)
    31  	if res.Status != shim.OK {
    32  		fmt.Println("Init failed", string(res.Message))
    33  		t.FailNow()
    34  	}
    35  }
    36  
    37  // check Invoke function
    38  func checkInvoke(t *testing.T, stub *shim.MockStub, args [][]byte) {
    39  	res := stub.MockInvoke("1", args)
    40  	if res.Status != shim.OK {
    41  		fmt.Println("Invoke", args, "failed", string(res.Message))
    42  		t.FailNow()
    43  	}
    44  }
    45  
    46  // check GetBalance
    47  func checkGetBalance(t *testing.T, stub *shim.MockStub, args [][]byte, cmp int) {
    48  	res1 := stub.MockInvoke("1", args)
    49  	if res1.Status != shim.OK {
    50  		fmt.Println("GetBalance failed", string(res1.Message))
    51  		t.FailNow()
    52  	}
    53  	amount,_ := strconv.Atoi(string(res1.Payload))
    54  	if amount != cmp {
    55  		fmt.Printf("Query result error! %v", amount )
    56  		t.FailNow()
    57  	}
    58  }
    59  
    60  // check queryInfo
    61  func checkQueryInfo(t *testing.T, stub *shim.MockStub, args [][]byte) {
    62  	res1 := stub.MockInvoke("1", args)
    63  	if res1.Status != shim.OK {
    64  		fmt.Println("GetBalance failed", string(res1.Message))
    65  		t.FailNow()
    66  	}
    67  	fmt.Printf("QueryInfo Result: %s \n", string(res1.Payload))
    68  }
    69  
    70  // Test 0: Init ascc
    71  func TestAssetSysCC_Init(t *testing.T) {
    72  	ascc := new(AssetSysCC)
    73  	stub := shim.NewMockStub("ascc", ascc)
    74  	checkInit(t, stub, [][]byte{[]byte("")})
    75  }
    76  
    77  // Test 1: Test Register Token
    78  func TestAssetSysCC_RegisterToken(t *testing.T) {
    79  
    80  	fmt.Println("-----------------------------------")
    81  	fmt.Println("Test1: registerToken")
    82  
    83  	ascc := new(AssetSysCC)
    84  	stub := shim.NewMockStub("ascc", ascc)
    85  	checkInit(t, stub, [][]byte{[]byte("")})
    86  
    87  	res_test3 := stub.MockInvoke("1", [][]byte{[]byte("registerToken"), []byte("SSToken"), []byte("250"), []byte("18"), []byte(MAddress[:])})
    88  
    89  	if res_test3.Status != shim.OK {
    90  		fmt.Println("Register token failed", string(res_test3.Message))
    91  		t.FailNow()
    92  	}
    93  
    94  	fmt.Println("Test registerToken Success!")
    95  
    96  }
    97  
    98  // Test 2: Test Issue Token
    99  func TestAssetSysCC_IssueToken(t *testing.T) {
   100  
   101  	fmt.Println("-----------------------------------")
   102  	fmt.Println("Test2: issueToken")
   103  
   104  	ascc := new(AssetSysCC)
   105  	stub := shim.NewMockStub("ascc", ascc)
   106  	checkInit(t, stub, [][]byte{[]byte("")})
   107  
   108  
   109  	res_test2 := stub.MockInvoke("1", [][]byte{[]byte("registerToken"), []byte("SSToken"), []byte("250"), []byte("18"), []byte(MAddress[:])})
   110  
   111  	if res_test2.Status != shim.OK {
   112  		fmt.Println("Register token failed", string(res_test2.Message))
   113  		t.FailNow()
   114  	}
   115  
   116  	res_test3 := stub.MockInvoke("1", [][]byte{[]byte("issueToken"), []byte("SSToken"), []byte("250"), []byte("18"), []byte(MAddress[:])})
   117  
   118  	if res_test3.Status != shim.OK {
   119  		fmt.Println("Register token failed", string(res_test3.Message))
   120  		t.FailNow()
   121  	}
   122  	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   123  
   124  	////query token quantity
   125  	//	res1 := stub.MockInvoke("2", [][]byte{[]byte("getBalance"), []byte(MAddress[:]), []byte("SSToken")});
   126  	//	if res1.Status != shim.OK {
   127  	//		fmt.Println("Query failed", string(res1.Message))
   128  	//		t.FailNow()
   129  	//	}
   130  	//	amount,_ := strconv.Atoi(string(res1.Payload))
   131  	//	if amount != 250 {
   132  	//		fmt.Printf("Query result error! %v", amount )
   133  	//		t.FailNow()
   134  	//	}
   135  
   136  	fmt.Println("Test issueToken for a registered one Success!")
   137  
   138  	res_test4 := stub.MockInvoke("2", [][]byte{[]byte("issueToken"), []byte("MToken"), []byte("888"), []byte("20"), []byte(testAddress[:])})
   139  	if res_test4.Status != shim.OK {
   140  		fmt.Println("Register token failed", string(res_test3.Message))
   141  		t.FailNow()
   142  	}
   143  	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("MToken")})
   144  
   145  	////query token quantity
   146  	//res2 := stub.MockInvoke("2", [][]byte{[]byte("getBalance"), []byte(testAddress[:]), []byte("CMBToken")});
   147  	//if res1.Status != shim.OK {
   148  	//	fmt.Println("Query failed", string(res2.Message))
   149  	//	t.FailNow()
   150  	//}
   151  	//amount2,_ := strconv.Atoi(string(res2.Payload))
   152  	//if amount2 != 888 {
   153  	//	fmt.Printf("Query result error! %v", amount2 )
   154  	//	t.FailNow()
   155  	//}
   156  
   157  	fmt.Println("Test issueToken for an un registered one Success!")
   158  }
   159  
   160  // Test 3: Test Invalidate Token
   161  func TestAssetSysCC_InvalidateToken(t *testing.T) {
   162  
   163  	fmt.Println("-----------------------------------")
   164  	fmt.Println("Test3: invalidateToken")
   165  
   166  	//fmt.Println("******test string to big.newInt")
   167  	//str := "12321"
   168  	//strInt := big.NewInt(0)
   169  	//strInt.SetString(str,10)
   170  	//fmt.Println(strInt.String())
   171  	//fmt.Println("*******************************")
   172  
   173  	ascc := new(AssetSysCC)
   174  	stub := shim.NewMockStub("ascc", ascc)
   175  	checkInit(t, stub, [][]byte{[]byte("")})
   176  
   177  	res_test3 := stub.MockInvoke("1", [][]byte{[]byte("issueToken"), []byte("SSToken"), []byte("250"), []byte("18"), []byte(MAddress[:])})
   178  
   179  	if res_test3.Status != shim.OK {
   180  		fmt.Println("Register token failed", string(res_test3.Message))
   181  		t.FailNow()
   182  	}
   183  
   184  	////query token quantity
   185  	//res1 := stub.MockInvoke("2", [][]byte{[]byte("getBalance"), []byte(MAddress[:]), []byte("SSToken")});
   186  	//if res1.Status != shim.OK {
   187  	//	fmt.Println("Query failed", string(res1.Message))
   188  	//	t.FailNow()
   189  	//}
   190  	//amount,_ := strconv.Atoi(string(res1.Payload))
   191  	//if amount != 250 {
   192  	//	fmt.Printf("Query result error! %v", amount )
   193  	//	t.FailNow()
   194  	//}
   195  
   196  	//beging to invalidate this token
   197  	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   198  
   199  	testInvalidate := stub.MockInvoke("4", [][]byte{[]byte("invalidateToken"), []byte("SSToken")});
   200  	if testInvalidate.Status != shim.OK {
   201  		fmt.Println("Query failed", string(testInvalidate.Message))
   202  		t.FailNow()
   203  	}
   204  
   205  	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   206  }
   207  
   208  //// Test 4: Transfer Token & queryTokenInfo
   209  //func TestAssetSysCC_TransferToken(t *testing.T) {
   210  //
   211  //	fmt.Println("-----------------------------------")
   212  //	fmt.Println("Test4: transferToken")
   213  //
   214  //	ascc := new(AssetSysCC)
   215  //	stub := shim.NewMockStub("ascc", ascc)
   216  //	checkInit(t, stub, [][]byte{[]byte("")})
   217  //
   218  //	//register token
   219  //	res_test2 := stub.MockInvoke("1", [][]byte{[]byte("registerToken"), []byte("SSToken"), []byte("1000000000"), []byte(MAddress[:])})
   220  //
   221  //	if res_test2.Status != shim.OK {
   222  //		fmt.Println("Register token failed", string(res_test2.Message))
   223  //		t.FailNow()
   224  //	}
   225  //	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   226  //
   227  //	//issue token
   228  //	res_test3 := stub.MockInvoke("2", [][]byte{[]byte("issueToken"), []byte("SSToken"), []byte("1000000000"), []byte(MAddress[:])})
   229  //
   230  //	if res_test3.Status != shim.OK {
   231  //		fmt.Println("Issue token failed", string(res_test3.Message))
   232  //		t.FailNow()
   233  //	}
   234  //	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   235  //
   236  //	//query token quantity
   237  //	checkGetBalance(t, stub, [][]byte{[]byte("getBalance"), []byte(MAddress[:]), []byte("SSToken")}, 1000000000)
   238  //
   239  //	//make transfer
   240  //	res_test4 := stub.MockInvoke("3", [][]byte{[]byte("transfer"), []byte(MAddress[:]), []byte(testAddress[:]), []byte("SSToken"), []byte("100000000"), })
   241  //
   242  //	if res_test4.Status != shim.OK {
   243  //		fmt.Println("Transfer token failed", string(res_test3.Message))
   244  //		t.FailNow()
   245  //	}
   246  //
   247  //	//Check the transfer result
   248  //	checkGetBalance(t, stub, [][]byte{[]byte("getBalance"), []byte(MAddress[:]), []byte("SSToken")}, 900000000)
   249  //	checkGetBalance(t, stub, [][]byte{[]byte("getBalance"), []byte(testAddress[:]), []byte("SSToken")}, 100000000)
   250  //
   251  //	//output info of SSToken
   252  //	checkQueryInfo(t, stub, [][]byte{[]byte("getTokenInfo"), []byte("SSToken")})
   253  //}
   254