После еще одного исследования я нашел пример в репозитории Hyperledger Fabri c Samples, в тестовых файлах ABA C: https://github.com/hyperledger/fabric-samples/blob/master/chaincode/abac/go/abac_test.go.
В итоге, нет необходимости издеваться над вызовами на cid
, это можно сделать, установив создателя на фиктивную заглушку, *shimtest.MockStub
с помощью stub.Creator
. Это означает, что вызовы фактически опрашивают личность «Создателя», и методы, такие как GetID()
и AssertAttributeValue()
, работают как положено.
Конечно, вам также необходимо сгенерировать некоторые тестовые сертификаты, сначала вам нужно (или подобное) ). Я сгенерировал различные пользовательские сертификаты, используя свой фактический код API / chain, а затем скопировал их из контейнера API в папку фикстур, но, возможно, есть более простой способ (например, с помощью клиентского клиента fabri c ca).
Из приведенной выше ссылки на образцы fabri c у них есть эта вспомогательная функция, которую я использовал:
func setCreator(t *testing.T, stub *shimtest.MockStub, mspID string, idbytes []byte) {
sid := &msp.SerializedIdentity{Mspid: mspID, IdBytes: idbytes}
b, err := proto.Marshal(sid)
if err != nil {
t.FailNow()
}
stub.Creator = b
}
, а затем ее можно использовать так:
func TestInit(t *testing.T) (stub *shimtest.MockStub) {
cc := new(Chaincode)
stub = shimtest.NewMockStub("__TEST__", cc)
setCreator(t, stub, "org1MSP", []byte(fixtures.Cert))
return stub
}
где fixtures.Cert
это ваш сертификат в виде строки. После того, как это будет сделано, вы также можете вызвать функцию GetCreator
, чтобы проверить, установлена ли личность, используя что-то вроде
cert, _ := stub.GetCreator()
fmt.Println(string(cert))
Надеюсь, что кому-то поможет!