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