bitField0_ = (bitField0_ & ~0x00000001); } else { ensureResultsIsMutable(); results_.addAll(other.results_); onChanged(); resultsBuilder_ = com.google.protobuf.GeneratedMessageV3.alwaysUseFieldBuilders ? getResultsFieldBuilder() : null; } else { resultsBuilder_.addAllMessages(other.results_); setHasMore(other.getHasMore()); onChanged(); onChanged(); return this;
private com.google.protobuf.RepeatedFieldBuilderV3< org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes.Builder, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytesOrBuilder> getResultsFieldBuilder() { if (resultsBuilder_ == null) { resultsBuilder_ = new com.google.protobuf.RepeatedFieldBuilderV3< org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes.Builder, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytesOrBuilder>( results_, ((bitField0_ & 0x00000001) == 0x00000001), getParentForChildren(), isClean()); results_ = null; } return resultsBuilder_; }
}; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[1].toByteString())) .build(); when(handler.getStateByRange("myc", "txId", "testcoll", startKey, endKey)).thenReturn(value); assertThat(stub.getPrivateDataByRange("testcoll", startKey, endKey), contains(Arrays.stream(keyValues).map(KeyValueImpl::new).toArray()));
}; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[1].toByteString())) .build(); when(handler.getQueryResult("myc", "txId", "testcoll", "QUERY")).thenReturn(value); assertThat(stub.getPrivateDataQueryResult("testcoll", "QUERY"), contains(Arrays.stream(keyValues).map(KeyValueImpl::new).toArray()));
/** * Generate response message that list of (key => value) pairs * @return */ @Override public List<ChaincodeShim.ChaincodeMessage> next() { List<KvQueryResult.KV> keyValues = Arrays.asList(values).stream(). map(x -> KvQueryResult.KV.newBuilder() .setKey(x) .setValue(ByteString.copyFromUtf8(x + " Value")) .build() ).collect(toList()); ChaincodeShim.QueryResponse.Builder builder = ChaincodeShim.QueryResponse.newBuilder(); builder.setHasMore(hasNext); keyValues.stream().forEach(kv -> builder.addResults(ChaincodeShim.QueryResultBytes.newBuilder().setResultBytes(kv.toByteString()))); ByteString rangePayload = builder.build().toByteString(); List<ChaincodeShim.ChaincodeMessage> list = new ArrayList<>(); list.add(ChaincodeShim.ChaincodeMessage.newBuilder() .setType(ChaincodeShim.ChaincodeMessage.Type.RESPONSE) .setChannelId(orgMsg.getChannelId()) .setTxid(orgMsg.getTxid()) .setPayload(rangePayload) .build()); return list; } }
@Test public void testGetHistoryForKey() { final ChaincodeStubImpl stub = new ChaincodeStubImpl("myc", "txId", handler, Collections.emptyList(), null); final KvQueryResult.KeyModification[] keyModifications = new KvQueryResult.KeyModification[]{ KvQueryResult.KeyModification.newBuilder() .setTxId("tx0") .setTimestamp(Timestamp.getDefaultInstance()) .setValue(ByteString.copyFromUtf8("Value A")) .build(), KvQueryResult.KeyModification.newBuilder() .setTxId("tx1") .setTimestamp(Timestamp.getDefaultInstance()) .setValue(ByteString.copyFromUtf8("Value B")) .build() }; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyModifications[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyModifications[1].toByteString())) .build(); when(handler.getHistoryForKey("myc", "txId", "KEY")).thenReturn(value); assertThat(stub.getHistoryForKey("KEY"), contains(Arrays.stream(keyModifications).map(KeyModificationImpl::new).toArray())); }
@Override public List<ChaincodeShim.ChaincodeMessage> next() { List<KvQueryResult.KeyModification> keyModifications = Arrays.asList(values).stream(). map(x -> KvQueryResult.KeyModification.newBuilder() .setTxId(x) .setValue(ByteString.copyFromUtf8(x + " Value")) .build() ).collect(toList()); ChaincodeShim.QueryResponse.Builder builder = ChaincodeShim.QueryResponse.newBuilder(); builder.setHasMore(hasNext); keyModifications.stream().forEach(kv -> builder.addResults(ChaincodeShim.QueryResultBytes.newBuilder().setResultBytes(kv.toByteString()))); ByteString historyPayload = builder.build().toByteString(); List<ChaincodeShim.ChaincodeMessage> list = new ArrayList<>(); list.add(ChaincodeShim.ChaincodeMessage.newBuilder() .setType(ChaincodeShim.ChaincodeMessage.Type.RESPONSE) .setChannelId(orgMsg.getChannelId()) .setTxid(orgMsg.getTxid()) .setPayload(historyPayload) .build()); return list; } }
@Test public void testGetStateByRange() { final ChaincodeStubImpl stub = new ChaincodeStubImpl("myc", "txId", handler, Collections.emptyList(), null); final String startKey = "START"; final String endKey = "END"; final KV[] keyValues = new KV[]{ KV.newBuilder() .setKey("A") .setValue(ByteString.copyFromUtf8("Value of A")) .build(), KV.newBuilder() .setKey("B") .setValue(ByteString.copyFromUtf8("Value of B")) .build() }; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[1].toByteString())) .build(); when(handler.getStateByRange("myc", "txId", "", startKey, endKey)).thenReturn(value); assertThat(stub.getStateByRange(startKey, endKey), contains(Arrays.stream(keyValues).map(KeyValueImpl::new).toArray())); }
@Test public void testGetQueryResult() { final ChaincodeStubImpl stub = new ChaincodeStubImpl("myc", "txId", handler, Collections.emptyList(), null); final KV[] keyValues = new KV[]{ KV.newBuilder() .setKey("A") .setValue(ByteString.copyFromUtf8("Value of A")) .build(), KV.newBuilder() .setKey("B") .setValue(ByteString.copyFromUtf8("Value of B")) .build() }; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[1].toByteString())) .build(); when(handler.getQueryResult("myc", "txId", "", "QUERY")).thenReturn(value); assertThat(stub.getQueryResult("QUERY"), contains(Arrays.stream(keyValues).map(KeyValueImpl::new).toArray())); }
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder addResults( int index, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes value) { if (resultsBuilder_ == null) { if (value == null) { throw new NullPointerException(); } ensureResultsIsMutable(); results_.add(index, value); onChanged(); } else { resultsBuilder_.addMessage(index, value); } return this; } /**
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder setResults( int index, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes value) { if (resultsBuilder_ == null) { if (value == null) { throw new NullPointerException(); } ensureResultsIsMutable(); results_.set(index, value); onChanged(); } else { resultsBuilder_.setMessage(index, value); } return this; } /**
private ChaincodeStubImpl prepareStubAndMockHandler() { final ChaincodeStubImpl stub = new ChaincodeStubImpl("myc", "txId", handler, Collections.emptyList(), null); final KV[] keyValues = new KV[]{ KV.newBuilder() .setKey("A") .setValue(ByteString.copyFromUtf8("Value of A")) .build(), KV.newBuilder() .setKey("B") .setValue(ByteString.copyFromUtf8("Value of B")) .build() }; final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[0].toByteString())) .addResults(QueryResultBytes.newBuilder().setResultBytes(keyValues[1].toByteString())) .build(); when(handler.getStateByRange(anyString(), anyString(), anyString(), anyString(), anyString())).thenReturn(value); return stub; }
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder addResults(org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes value) { if (resultsBuilder_ == null) { if (value == null) { throw new NullPointerException(); } ensureResultsIsMutable(); results_.add(value); onChanged(); } else { resultsBuilder_.addMessage(value); } return this; } /**
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder addAllResults( java.lang.Iterable<? extends org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes> values) { if (resultsBuilder_ == null) { ensureResultsIsMutable(); com.google.protobuf.AbstractMessageLite.Builder.addAll( values, results_); onChanged(); } else { resultsBuilder_.addAllMessages(values); } return this; } /**
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder setResults( int index, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes.Builder builderForValue) { if (resultsBuilder_ == null) { ensureResultsIsMutable(); results_.set(index, builderForValue.build()); onChanged(); } else { resultsBuilder_.setMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder addResults( int index, org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes.Builder builderForValue) { if (resultsBuilder_ == null) { ensureResultsIsMutable(); results_.add(index, builderForValue.build()); onChanged(); } else { resultsBuilder_.addMessage(index, builderForValue.build()); } return this; } /**
/** * <code>repeated .protos.QueryResultBytes results = 1;</code> */ public Builder addResults( org.hyperledger.fabric.protos.peer.ChaincodeShim.QueryResultBytes.Builder builderForValue) { if (resultsBuilder_ == null) { ensureResultsIsMutable(); results_.add(builderForValue.build()); onChanged(); } else { resultsBuilder_.addMessage(builderForValue.build()); } return this; } /**
@Test(expected = InvalidProtocolBufferException.class) public void testGetHistoryForKeyWithException() throws Throwable { final String txId = "txId", key = "KEY", channelId = "myc"; final ChaincodeStubImpl stub = new ChaincodeStubImpl(channelId, txId, handler, Collections.emptyList(), null); final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(ByteString.copyFromUtf8("exception"))) .build(); when(handler.getHistoryForKey(channelId, txId, key)).thenReturn(value); try { stub.getHistoryForKey(key).iterator().next(); } catch (RuntimeException e) { throw e.getCause(); } }
@Test(expected = InvalidProtocolBufferException.class) public void testGetPrivateDataQueryResultWithException() throws Throwable { final String txId = "txId", query = "QUERY", channelId = "myc"; final ChaincodeStubImpl stub = new ChaincodeStubImpl(channelId, txId, handler, Collections.emptyList(), null); final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(ByteString.copyFromUtf8("exception"))) .build(); when(handler.getQueryResult(channelId, txId, "testcoll", query)).thenReturn(value); try { stub.getPrivateDataQueryResult("testcoll", query).iterator().next(); } catch (RuntimeException e) { throw e.getCause(); } }
@Test(expected = InvalidProtocolBufferException.class) public void testGetQueryResultWithException() throws Throwable { final String txId = "txId", query = "QUERY", channelId = "myc"; final ChaincodeStubImpl stub = new ChaincodeStubImpl(channelId, txId, handler, Collections.emptyList(), null); final QueryResponse value = QueryResponse.newBuilder() .setHasMore(false) .addResults(QueryResultBytes.newBuilder().setResultBytes(ByteString.copyFromUtf8("exception"))) .build(); when(handler.getQueryResult(channelId, txId, "", query)).thenReturn(value); try { stub.getQueryResult(query).iterator().next(); } catch (RuntimeException e) { throw e.getCause(); } }