@@ -252,12 +252,19 @@ func TestGetMSPID(t *testing.T) {
252252}
253253
254254func TestChaincodeStubHandlers (t * testing.T ) {
255+ gmkResult := & peer.GetStateMultipleResult {
256+ Values : [][]byte {[]byte ("myvalue" ), []byte ("myvalue" )},
257+ }
258+ getMultipleKeysBytes , err := proto .Marshal (gmkResult )
259+ assert .NoError (t , err )
260+
255261 var tests = []struct {
256- name string
257- resType peer.ChaincodeMessage_Type
258- payload []byte
259- usePeerWriteBatch bool
260- testFunc func (* ChaincodeStub , * Handler , * testing.T , []byte )
262+ name string
263+ resType peer.ChaincodeMessage_Type
264+ payload []byte
265+ usePeerWriteBatch bool
266+ usePeerGetMultipleKeys bool
267+ testFunc func (* ChaincodeStub , * Handler , * testing.T , []byte )
261268 }{
262269 {
263270 name : "Simple Response" ,
@@ -730,6 +737,86 @@ func TestChaincodeStubHandlers(t *testing.T) {
730737 checkWriteBatch (t , s .handler .chatStream , 1 , 2 )
731738 },
732739 },
740+ {
741+ name : "Get Multiple Keys - peer new" ,
742+ resType : peer .ChaincodeMessage_RESPONSE ,
743+ payload : getMultipleKeysBytes ,
744+ usePeerGetMultipleKeys : true ,
745+ testFunc : func (s * ChaincodeStub , h * Handler , t * testing.T , payload []byte ) {
746+ resp , err := s .GetMultipleStates ("key" , "key2" , "key3" , "key4" )
747+ assert .NoError (t , err )
748+ assert .Len (t , resp , 4 )
749+ for _ , r := range resp {
750+ assert .Equal (t , []byte ("myvalue" ), r )
751+ }
752+
753+ resp , err = s .GetMultiplePrivateData ("col" , "key" , "key2" , "key3" , "key4" )
754+ assert .NoError (t , err )
755+ assert .Len (t , resp , 4 )
756+ for _ , r := range resp {
757+ assert .Equal (t , []byte ("myvalue" ), r )
758+ }
759+ },
760+ },
761+ {
762+ name : "Get Multiple Keys - peer old" ,
763+ resType : peer .ChaincodeMessage_RESPONSE ,
764+ payload : []byte ("myvalue" ),
765+ testFunc : func (s * ChaincodeStub , h * Handler , t * testing.T , payload []byte ) {
766+ resp , err := s .GetMultipleStates ("key" , "key2" , "key3" , "key4" )
767+ assert .NoError (t , err )
768+ assert .Len (t , resp , 4 )
769+ for _ , r := range resp {
770+ assert .Equal (t , payload , r )
771+ }
772+
773+ resp , err = s .GetMultiplePrivateData ("col" , "key" , "key2" , "key3" , "key4" )
774+ assert .NoError (t , err )
775+ assert .Len (t , resp , 4 )
776+ for _ , r := range resp {
777+ assert .Equal (t , payload , r )
778+ }
779+ },
780+ },
781+ {
782+ name : "Get Multiple Keys error - peer new" ,
783+ resType : peer .ChaincodeMessage_ERROR ,
784+ payload : []byte ("error" ),
785+ usePeerGetMultipleKeys : true ,
786+ testFunc : func (s * ChaincodeStub , h * Handler , t * testing.T , payload []byte ) {
787+ _ , err := s .GetMultipleStates ("key" , "key2" )
788+ assert .EqualError (t , err , string (payload ))
789+
790+ _ , err = s .GetMultiplePrivateData ("col" , "key" , "key2" )
791+ assert .EqualError (t , err , string (payload ))
792+ },
793+ },
794+ {
795+ name : "Get Multiple Keys error - peer old" ,
796+ resType : peer .ChaincodeMessage_ERROR ,
797+ payload : []byte ("error" ),
798+ testFunc : func (s * ChaincodeStub , h * Handler , t * testing.T , payload []byte ) {
799+ _ , err := s .GetMultipleStates ("key" , "key2" )
800+ assert .EqualError (t , err , string (payload ))
801+
802+ _ , err = s .GetMultiplePrivateData ("col" , "key" , "key2" )
803+ assert .EqualError (t , err , string (payload ))
804+ },
805+ },
806+ {
807+ name : "Get Multiple Keys - without keys" ,
808+ resType : peer .ChaincodeMessage_RESPONSE ,
809+ payload : []byte ("myvalue" ),
810+ testFunc : func (s * ChaincodeStub , h * Handler , t * testing.T , payload []byte ) {
811+ resp , err := s .GetMultipleStates ()
812+ assert .NoError (t , err )
813+ assert .Len (t , resp , 0 )
814+
815+ resp , err = s .GetMultiplePrivateData ("col" )
816+ assert .NoError (t , err )
817+ assert .Len (t , resp , 0 )
818+ },
819+ },
733820 }
734821
735822 for _ , test := range tests {
@@ -738,11 +825,13 @@ func TestChaincodeStubHandlers(t *testing.T) {
738825 t .Parallel ()
739826
740827 handler := & Handler {
741- cc : & mockChaincode {},
742- responseChannels : map [string ]chan * peer.ChaincodeMessage {},
743- state : ready ,
744- usePeerWriteBatch : test .usePeerWriteBatch ,
745- maxSizeWriteBatch : 100 ,
828+ cc : & mockChaincode {},
829+ responseChannels : map [string ]chan * peer.ChaincodeMessage {},
830+ state : ready ,
831+ usePeerWriteBatch : test .usePeerWriteBatch ,
832+ maxSizeWriteBatch : 100 ,
833+ usePeerGetMultipleKeys : test .usePeerGetMultipleKeys ,
834+ maxSizeGetMultipleKeys : 2 ,
746835 }
747836 stub := & ChaincodeStub {
748837 ChannelID : "channel" ,
0 commit comments