mirror of
https://github.com/hyperledger/fabric-samples.git
synced 2026-06-17 15:35:09 +00:00
Merge "[FAB-15625] Add UT for Simple Asset Chaincode"
This commit is contained in:
commit
81be9da421
1 changed files with 175 additions and 0 deletions
175
chaincode/sacc/sacc_test.go
Normal file
175
chaincode/sacc/sacc_test.go
Normal file
|
|
@ -0,0 +1,175 @@
|
|||
/*
|
||||
Copyright Hitachi America Ltd. All Rights Reserved.
|
||||
|
||||
SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/hyperledger/fabric/core/chaincode/shim"
|
||||
"github.com/hyperledger/fabric/core/chaincode/shim/shimtest"
|
||||
)
|
||||
|
||||
|
||||
func checkInit(t *testing.T, stub *shimtest.MockStub, args [][]byte) {
|
||||
res := stub.MockInit("1", args)
|
||||
if res.Status != shim.OK {
|
||||
fmt.Println("Init failed", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func checkState(t *testing.T, stub *shimtest.MockStub, name string, value string) {
|
||||
bytes := stub.State[name]
|
||||
if bytes == nil {
|
||||
fmt.Println("State", name, "failed to get value")
|
||||
t.FailNow()
|
||||
}
|
||||
if string(bytes) != value {
|
||||
fmt.Println("State value", name, "was not", value, "as expected")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func checkQuery(t *testing.T, stub *shimtest.MockStub, name string, value string) {
|
||||
res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte(name)})
|
||||
if res.Status != shim.OK {
|
||||
fmt.Println("Query", name, "failed", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
if res.Payload == nil {
|
||||
fmt.Println("Query", name, "failed to get value")
|
||||
t.FailNow()
|
||||
}
|
||||
if string(res.Payload) != value {
|
||||
fmt.Println("Query value", name, "was not", value, "as expected")
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func checkInvoke(t *testing.T, stub *shimtest.MockStub, args [][]byte) {
|
||||
res := stub.MockInvoke("1", args)
|
||||
if res.Status != shim.OK {
|
||||
fmt.Println("Invoke", args, "failed", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestSacc_Init(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
checkState(t, stub, "a", "10")
|
||||
}
|
||||
|
||||
func TestSacc_Query(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
// Query a
|
||||
checkQuery(t, stub, "a", "10")
|
||||
}
|
||||
|
||||
func TestSacc_Invoke(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
// Invoke: Set a=20
|
||||
checkInvoke(t, stub, [][]byte{[]byte("set"), []byte("a"), []byte("20")})
|
||||
|
||||
// Query a
|
||||
checkQuery(t, stub, "a", "20")
|
||||
}
|
||||
|
||||
func TestSacc_InitWithIncorrectArguments(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init with incorrect arguments
|
||||
res := stub.MockInit("1", [][]byte{[]byte("a"), []byte("10"), []byte("10")})
|
||||
|
||||
if res.Status != shim.ERROR {
|
||||
fmt.Println("Invalid Init accepted")
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if res.Message != "Incorrect arguments. Expecting a key and a value" {
|
||||
fmt.Println("Unexpected Error message:", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestSacc_QueryWithIncorrectArguments(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
// Query with incorrect arguments
|
||||
res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte("a"), []byte("b")})
|
||||
|
||||
if res.Status != shim.ERROR {
|
||||
fmt.Println("Invalid query accepted")
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if res.Message != "Incorrect arguments. Expecting a key" {
|
||||
fmt.Println("Unexpected Error message:", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestSacc_QueryForAssetNotFound(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
// Query for b (as a asset not found)
|
||||
res := stub.MockInvoke("1", [][]byte{[]byte("query"), []byte("b")})
|
||||
|
||||
if res.Status != shim.ERROR {
|
||||
fmt.Println("Invalid query accepted")
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if res.Message != "Asset not found: b" {
|
||||
fmt.Println("Unexpected Error message:", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestSacc_InvokeWithIncorrectArguments(t *testing.T) {
|
||||
cc := new(SimpleAsset)
|
||||
stub := shimtest.NewMockStub("sacc", cc)
|
||||
|
||||
// Init a=10
|
||||
checkInit(t, stub, [][]byte{[]byte("a"), []byte("10")})
|
||||
|
||||
// Invoke with incorrect arguments
|
||||
res := stub.MockInvoke("1", [][]byte{[]byte("set"), []byte("a")})
|
||||
if res.Status != shim.ERROR {
|
||||
fmt.Println("Invalid Invoke accepted")
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if res.Message != "Incorrect arguments. Expecting a key and a value" {
|
||||
fmt.Println("Unexpected Error message:", string(res.Message))
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue