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  }