@Override public void close() throws Exception { this.handler.queryStateClose(channelId, txId, currentQueryResponse.getId()); this.currentIterator = Collections.emptyIterator(); this.currentQueryResponse = QueryResponse.newBuilder().setHasMore(false).build(); }
@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(); } }
.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()));
.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 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 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 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())); }
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; }
@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(); } }