Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何对使用ACL控件的Hyperledger Fabric Go chaincode执行单元测试?_Unit Testing_Hyperledger Fabric_Hyperledger Chaincode - Fatal编程技术网

Unit testing 如何对使用ACL控件的Hyperledger Fabric Go chaincode执行单元测试?

Unit testing 如何对使用ACL控件的Hyperledger Fabric Go chaincode执行单元测试?,unit-testing,hyperledger-fabric,hyperledger-chaincode,Unit Testing,Hyperledger Fabric,Hyperledger Chaincode,我目前正在为一些Hyperledger结构链码函数编写一些单元测试,这些函数是用Go编写的 有些函数需要具有某些属性的用户,或者实际上只需要知道用户的ID 例如,某些函数使用github.com/hyperledger/fabric-chaincode-go/pkg/cid包中的以下方法: cid.GetID cid.AssertAttributeValue 我不知道如何在使用模拟垫片包github.com/hyperledger/fabric-chaincode-go/shimtest时创建和

我目前正在为一些Hyperledger结构链码函数编写一些单元测试,这些函数是用Go编写的

有些函数需要具有某些属性的用户,或者实际上只需要知道用户的ID

例如,某些函数使用github.com/hyperledger/fabric-chaincode-go/pkg/cid包中的以下方法:

cid.GetID cid.AssertAttributeValue 我不知道如何在使用模拟垫片包github.com/hyperledger/fabric-chaincode-go/shimtest时创建和/或传递标识/证书,调用失败:未能从链码存根获取事务调用方的标识

是否可能创建和使用伪造但可接受的证书? 还是有更好的方法来模拟这些ACL部分


考虑到Hyperledger账单本身是被许可的,并且有严格的ACL机会,这似乎令人惊讶,因为它不能被测试,因此,我认为我遗漏了一些东西

经过进一步调查,我在Hyperledger Fabric Samples repo中的ABAC测试文件中找到了一个示例:

总之,不需要模拟对cid的调用,可以通过在模拟存根上设置创建者来实现,即使用stub.creator设置*shimtest.MockStub。这意味着这些调用实际上会询问“创建者”身份,而GetID和AssertAttributeValue等方法会按预期工作

当然,您还需要生成一些测试证书,首先需要生成一个或类似的证书。我使用实际的api/链码生成了各种用户证书,然后将它们从api容器复制到fixtures文件夹中,但可能有一种更简单的方法,例如使用fabric ca client cli

从上面的fabric samples链接中,它们具有我使用过的帮助器功能:

func setCreatort*testing.T,存根*shimtest.MockStub,mspID字符串,idbytes[]字节{ sid:=&msp.SerializedIdentity{Mspid:Mspid,IdBytes:IdBytes} b、 错误:=proto.Marshalsid 如果错误!=零{ t、 失败现在 } stub.Creator=b } 然后可以这样使用:

func testinit*testing.T存根*shimtest.MockStub{ cc:=newChaincode 存根=shimtest.NewMockStub\uuuu测试,cc setCreatort,存根,org1MSP,[]bytefixtures.Cert 返回存根 } 其中fixtures.Cert是字符串形式的证书。完成此操作后,还可以调用GetCreator函数来验证标识是否已设置,方法如下

证书,u:=stub.GetCreator 格式打印字符串证书
希望能帮到别人

经过进一步调查,我在Hyperledger Fabric Samples repo中的ABAC测试文件中找到了一个示例:

总之,不需要模拟对cid的调用,可以通过在模拟存根上设置创建者来实现,即使用stub.creator设置*shimtest.MockStub。这意味着这些调用实际上会询问“创建者”身份,而GetID和AssertAttributeValue等方法会按预期工作

当然,您还需要生成一些测试证书,首先需要生成一个或类似的证书。我使用实际的api/链码生成了各种用户证书,然后将它们从api容器复制到fixtures文件夹中,但可能有一种更简单的方法,例如使用fabric ca client cli

从上面的fabric samples链接中,它们具有我使用过的帮助器功能:

func setCreatort*testing.T,存根*shimtest.MockStub,mspID字符串,idbytes[]字节{ sid:=&msp.SerializedIdentity{Mspid:Mspid,IdBytes:IdBytes} b、 错误:=proto.Marshalsid 如果错误!=零{ t、 失败现在 } stub.Creator=b } 然后可以这样使用:

func testinit*testing.T存根*shimtest.MockStub{ cc:=newChaincode 存根=shimtest.NewMockStub\uuuu测试,cc setCreatort,存根,org1MSP,[]bytefixtures.Cert 返回存根 } 其中fixtures.Cert是字符串形式的证书。完成此操作后,还可以调用GetCreator函数来验证标识是否已设置,方法如下

证书,u:=stub.GetCreator 格式打印字符串证书 希望能帮到别人