Skip to content

Commit

Permalink
[FAB-15625] Add UT for Simple Asset Chaincode
Browse files Browse the repository at this point in the history
This patch adds unit test for chaincode/sacc.

The positive test cases are aligned with the manual testing procedures
described in `fabric/docs/source/chaincode4ade.rst`.

FAB-15625 #done

Patch-set #4: adjust to new shim Mockup location

Change-Id: Ic3625e885f6e49507859af7d5f0bfa136eb7a757
Signed-off-by: Tatsuya Sato <Tatsuya.Sato@hal.hitachi.com>
Signed-off-by: Arnaud J Le Hors <lehors@us.ibm.com>
  • Loading branch information
satota2 authored and Simon Stone committed Jul 30, 2019
1 parent 583ff8f commit 868f9d0
Showing 1 changed file with 175 additions and 0 deletions.
175 changes: 175 additions & 0 deletions chaincode/sacc/sacc_test.go
Original file line number Diff line number Diff line change
@@ -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()
}
}

0 comments on commit 868f9d0

Please sign in to comment.