github.com/sykesm/fabric@v1.1.0-preview.0.20200129034918-2aa12b1a0181/core/chaincode/testdata/src/chaincodes/example02/chaincode_test.go (about) 1 /* 2 Copyright IBM Corp. All Rights Reserved. 3 4 SPDX-License-Identifier: Apache-2.0 5 */ 6 7 package main 8 9 import ( 10 "fmt" 11 "testing" 12 13 "github.com/hyperledger/fabric-chaincode-go/shim" 14 "github.com/hyperledger/fabric-chaincode-go/shimtest" 15 ) 16 17 func checkInit(t *testing.T, stub *shimtest.MockStub, args [][]byte) { 18 res := stub.MockInit("1", args) 19 if res.Status != shim.OK { 20 fmt.Println("Init failed", string(res.Message)) 21 t.FailNow() 22 } 23 } 24 25 func checkState(t *testing.T, stub *shimtest.MockStub, name string, value string) { 26 bytes := stub.State[name] 27 if bytes == nil { 28 fmt.Println("State", name, "failed to get value") 29 t.FailNow() 30 } 31 if string(bytes) != value { 32 fmt.Println("State value", name, "was not", value, "as expected") 33 t.FailNow() 34 } 35 } 36 37 func checkQuery(t *testing.T, stub *shimtest.MockStub, name string, value string) { 38 res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)}) 39 if res.Status != shim.OK { 40 fmt.Println("Query", name, "failed", string(res.Message)) 41 t.FailNow() 42 } 43 if res.Payload == nil { 44 fmt.Println("Query", name, "failed to get value") 45 t.FailNow() 46 } 47 if string(res.Payload) != value { 48 fmt.Println("Query value", name, "was not", value, "as expected") 49 t.FailNow() 50 } 51 } 52 53 func checkInvoke(t *testing.T, stub *shimtest.MockStub, args [][]byte) { 54 res := stub.MockInvoke("1", args) 55 if res.Status != shim.OK { 56 fmt.Println("Invoke", args, "failed", string(res.Message)) 57 t.FailNow() 58 } 59 } 60 61 func TestExample02_Init(t *testing.T) { 62 scc := new(SimpleChaincode) 63 stub := shimtest.NewMockStub("ex02", scc) 64 65 // Init A=123 B=234 66 checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("123"), []byte("B"), []byte("234")}) 67 68 checkState(t, stub, "A", "123") 69 checkState(t, stub, "B", "234") 70 } 71 72 func TestExample02_Query(t *testing.T) { 73 scc := new(SimpleChaincode) 74 stub := shimtest.NewMockStub("ex02", scc) 75 76 // Init A=345 B=456 77 checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("345"), []byte("B"), []byte("456")}) 78 79 // Query A 80 checkQuery(t, stub, "A", "345") 81 82 // Query B 83 checkQuery(t, stub, "B", "456") 84 } 85 86 func TestExample02_Invoke(t *testing.T) { 87 scc := new(SimpleChaincode) 88 stub := shimtest.NewMockStub("ex02", scc) 89 90 // Init A=567 B=678 91 checkInit(t, stub, [][]byte{[]byte("init"), []byte("A"), []byte("567"), []byte("B"), []byte("678")}) 92 93 // Invoke A->B for 123 94 checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("A"), []byte("B"), []byte("123")}) 95 checkQuery(t, stub, "A", "444") 96 checkQuery(t, stub, "B", "801") 97 98 // Invoke B->A for 234 99 checkInvoke(t, stub, [][]byte{[]byte("invoke"), []byte("B"), []byte("A"), []byte("234")}) 100 checkQuery(t, stub, "A", "678") 101 checkQuery(t, stub, "B", "567") 102 checkQuery(t, stub, "A", "678") 103 checkQuery(t, stub, "B", "567") 104 }