@@ -480,6 +480,107 @@ var _ = Describe("Handler", func() {
480
480
})
481
481
})
482
482
483
+ Describe ("HandlePutStateMetadata" , func () {
484
+ var incomingMessage * pb.ChaincodeMessage
485
+ var request * pb.PutStateMetadata
486
+
487
+ BeforeEach (func () {
488
+ request = & pb.PutStateMetadata {
489
+ Key : "put-state-key" ,
490
+ Metadata : & pb.StateMetadata {
491
+ Metakey : "put-state-metakey" ,
492
+ Value : []byte ("put-state-metadata-value" ),
493
+ },
494
+ }
495
+ payload , err := proto .Marshal (request )
496
+ Expect (err ).NotTo (HaveOccurred ())
497
+
498
+ incomingMessage = & pb.ChaincodeMessage {
499
+ Type : pb .ChaincodeMessage_PUT_STATE_METADATA ,
500
+ Payload : payload ,
501
+ Txid : "tx-id" ,
502
+ ChannelId : "channel-id" ,
503
+ }
504
+ })
505
+
506
+ It ("returns a response message" , func () {
507
+ resp , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
508
+ Expect (err ).NotTo (HaveOccurred ())
509
+ Expect (resp ).To (Equal (& pb.ChaincodeMessage {
510
+ Type : pb .ChaincodeMessage_RESPONSE ,
511
+ Txid : "tx-id" ,
512
+ ChannelId : "channel-id" ,
513
+ }))
514
+ })
515
+
516
+ Context ("when unmarshaling the request fails" , func () {
517
+ BeforeEach (func () {
518
+ incomingMessage .Payload = []byte ("this-is-a-bogus-payload" )
519
+ })
520
+
521
+ It ("returns an error" , func () {
522
+ _ , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
523
+ Expect (err ).To (MatchError ("unmarshal failed: proto: can't skip unknown wire type 4" ))
524
+ })
525
+ })
526
+
527
+ Context ("when the collection is not provided" , func () {
528
+ It ("calls SetStateMetadata on the transaction simulator" , func () {
529
+ _ , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
530
+ Expect (err ).NotTo (HaveOccurred ())
531
+
532
+ Expect (fakeTxSimulator .SetStateMetadataCallCount ()).To (Equal (1 ))
533
+ ccname , key , value := fakeTxSimulator .SetStateMetadataArgsForCall (0 )
534
+ Expect (ccname ).To (Equal ("cc-instance-name" ))
535
+ Expect (key ).To (Equal ("put-state-key" ))
536
+ Expect (value ).To (Equal (map [string ][]byte {"put-state-metakey" : []byte ("put-state-metadata-value" )}))
537
+ })
538
+
539
+ Context ("when SetStateMetadata fails" , func () {
540
+ BeforeEach (func () {
541
+ fakeTxSimulator .SetStateMetadataReturns (errors .New ("king-kong" ))
542
+ })
543
+
544
+ It ("returns an error" , func () {
545
+ _ , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
546
+ Expect (err ).To (MatchError ("king-kong" ))
547
+ })
548
+ })
549
+ })
550
+
551
+ Context ("when the collection is provided" , func () {
552
+ BeforeEach (func () {
553
+ request .Collection = "collection-name"
554
+ payload , err := proto .Marshal (request )
555
+ Expect (err ).NotTo (HaveOccurred ())
556
+ incomingMessage .Payload = payload
557
+ })
558
+
559
+ It ("calls SetPrivateDataMetadata on the transaction simulator" , func () {
560
+ _ , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
561
+ Expect (err ).NotTo (HaveOccurred ())
562
+
563
+ Expect (fakeTxSimulator .SetPrivateDataMetadataCallCount ()).To (Equal (1 ))
564
+ ccname , collection , key , value := fakeTxSimulator .SetPrivateDataMetadataArgsForCall (0 )
565
+ Expect (ccname ).To (Equal ("cc-instance-name" ))
566
+ Expect (collection ).To (Equal ("collection-name" ))
567
+ Expect (key ).To (Equal ("put-state-key" ))
568
+ Expect (value ).To (Equal (map [string ][]byte {"put-state-metakey" : []byte ("put-state-metadata-value" )}))
569
+ })
570
+
571
+ Context ("when SetPrivateDataMetadata fails" , func () {
572
+ BeforeEach (func () {
573
+ fakeTxSimulator .SetPrivateDataMetadataReturns (errors .New ("godzilla" ))
574
+ })
575
+
576
+ It ("returns an error" , func () {
577
+ _ , err := handler .HandlePutStateMetadata (incomingMessage , txContext )
578
+ Expect (err ).To (MatchError ("godzilla" ))
579
+ })
580
+ })
581
+ })
582
+ })
583
+
483
584
Describe ("HandleDelState" , func () {
484
585
var incomingMessage * pb.ChaincodeMessage
485
586
var request * pb.DelState
@@ -699,6 +800,134 @@ var _ = Describe("Handler", func() {
699
800
})
700
801
})
701
802
803
+ Describe ("HandleGetStateMetadata" , func () {
804
+ var (
805
+ incomingMessage * pb.ChaincodeMessage
806
+ request * pb.GetStateMetadata
807
+ expectedResponse * pb.ChaincodeMessage
808
+ )
809
+
810
+ BeforeEach (func () {
811
+ request = & pb.GetStateMetadata {
812
+ Key : "get-state-key" ,
813
+ }
814
+ payload , err := proto .Marshal (request )
815
+ Expect (err ).NotTo (HaveOccurred ())
816
+
817
+ incomingMessage = & pb.ChaincodeMessage {
818
+ Type : pb .ChaincodeMessage_GET_STATE_METADATA ,
819
+ Payload : payload ,
820
+ Txid : "tx-id" ,
821
+ ChannelId : "channel-id" ,
822
+ }
823
+
824
+ expectedResponse = & pb.ChaincodeMessage {
825
+ Type : pb .ChaincodeMessage_RESPONSE ,
826
+ Txid : "tx-id" ,
827
+ ChannelId : "channel-id" ,
828
+ }
829
+ })
830
+
831
+ Context ("when unmarshalling the request fails" , func () {
832
+ BeforeEach (func () {
833
+ incomingMessage .Payload = []byte ("this-is-a-bogus-payload" )
834
+ })
835
+
836
+ It ("returns an error" , func () {
837
+ _ , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
838
+ Expect (err ).To (MatchError ("unmarshal failed: proto: can't skip unknown wire type 4" ))
839
+ })
840
+ })
841
+
842
+ Context ("when collection is set" , func () {
843
+ BeforeEach (func () {
844
+ request .Collection = "collection-name"
845
+ payload , err := proto .Marshal (request )
846
+ Expect (err ).NotTo (HaveOccurred ())
847
+ incomingMessage .Payload = payload
848
+
849
+ fakeTxSimulator .GetPrivateDataMetadataReturns (map [string ][]byte {"get-state-metakey" : []byte ("get-private-metadata-response" )}, nil )
850
+ responsePayload , err := proto .Marshal (& pb.StateMetadataResult {
851
+ Entries : []* pb.StateMetadata {{
852
+ Metakey : "get-state-metakey" ,
853
+ Value : []byte ("get-private-metadata-response" ),
854
+ }},
855
+ })
856
+ Expect (err ).NotTo (HaveOccurred ())
857
+ expectedResponse .Payload = responsePayload
858
+ })
859
+
860
+ It ("calls GetPrivateDataMetadata on the transaction simulator" , func () {
861
+ _ , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
862
+ Expect (err ).NotTo (HaveOccurred ())
863
+
864
+ Expect (fakeTxSimulator .GetPrivateDataMetadataCallCount ()).To (Equal (1 ))
865
+ ccname , collection , key := fakeTxSimulator .GetPrivateDataMetadataArgsForCall (0 )
866
+ Expect (ccname ).To (Equal ("cc-instance-name" ))
867
+ Expect (collection ).To (Equal ("collection-name" ))
868
+ Expect (key ).To (Equal ("get-state-key" ))
869
+ })
870
+
871
+ Context ("and GetPrivateDataMetadata fails" , func () {
872
+ BeforeEach (func () {
873
+ fakeTxSimulator .GetPrivateDataMetadataReturns (nil , errors .New ("french fries" ))
874
+ })
875
+
876
+ It ("returns the error from GetPrivateDataMetadata" , func () {
877
+ _ , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
878
+ Expect (err ).To (MatchError ("french fries" ))
879
+ })
880
+ })
881
+
882
+ It ("returns the response message from GetPrivateDataMetadata" , func () {
883
+ resp , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
884
+ Expect (err ).NotTo (HaveOccurred ())
885
+ Expect (resp ).To (Equal (expectedResponse ))
886
+ })
887
+ })
888
+
889
+ Context ("when collection is not set" , func () {
890
+ BeforeEach (func () {
891
+ fakeTxSimulator .GetStateMetadataReturns (map [string ][]byte {"get-state-metakey" : []byte ("get-state-metadata-response" )}, nil )
892
+ responsePayload , err := proto .Marshal (& pb.StateMetadataResult {
893
+ Entries : []* pb.StateMetadata {{
894
+ Metakey : "get-state-metakey" ,
895
+ Value : []byte ("get-state-metadata-response" ),
896
+ }},
897
+ })
898
+ Expect (err ).NotTo (HaveOccurred ())
899
+ expectedResponse .Payload = responsePayload
900
+ })
901
+
902
+ It ("calls GetStateMetadata on the transaction simulator" , func () {
903
+ _ , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
904
+ Expect (err ).NotTo (HaveOccurred ())
905
+
906
+ Expect (fakeTxSimulator .GetStateMetadataCallCount ()).To (Equal (1 ))
907
+ ccname , key := fakeTxSimulator .GetStateMetadataArgsForCall (0 )
908
+ Expect (ccname ).To (Equal ("cc-instance-name" ))
909
+ Expect (key ).To (Equal ("get-state-key" ))
910
+ })
911
+
912
+ Context ("and GetStateMetadata fails" , func () {
913
+ BeforeEach (func () {
914
+ fakeTxSimulator .GetStateMetadataReturns (nil , errors .New ("tomato" ))
915
+ })
916
+
917
+ It ("returns the error from GetStateMetadata" , func () {
918
+ _ , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
919
+ Expect (err ).To (MatchError ("tomato" ))
920
+ })
921
+ })
922
+
923
+ It ("returns the response from GetStateMetadata" , func () {
924
+ resp , err := handler .HandleGetStateMetadata (incomingMessage , txContext )
925
+ Expect (err ).NotTo (HaveOccurred ())
926
+ Expect (resp ).To (Equal (expectedResponse ))
927
+ })
928
+ })
929
+ })
930
+
702
931
Describe ("HandleGetStateByRange" , func () {
703
932
var (
704
933
incomingMessage * pb.ChaincodeMessage
0 commit comments