private Binder startApproval(final Binder params, Session session) throws IOException, Quantiser.QuantiserException { if (config == null || config.limitFreeRegistrations()) if(config == null || ( !config.getKeysWhiteList().contains(session.getPublicKey()) && !config.getAddressesWhiteList().stream().anyMatch(addr -> addr.isMatchingKey(session.getPublicKey())))) { System.out.println("startApproval ERROR: session key shoild be in the white list"); return Binder.of( "itemResult", itemResultOfError(Errors.BAD_CLIENT_KEY,"startApproval", "command needs client key from whitelist")); } int n = asyncStarts.incrementAndGet(); AtomicInteger k = new AtomicInteger(); params.getListOrThrow("packedItems").forEach((item) -> es.execute(() -> { try { checkNode(session); System.out.println("Request to start registration #"+n+":"+k.incrementAndGet()); node.registerItem(Contract.fromPackedTransaction(((Bytes)item).toArray())); } catch (Exception e) { e.printStackTrace(); } }) ); //TODO: return ItemResult return new Binder(); }
private void registerAndCheckApproved(Contract c) throws TimeoutException, InterruptedException { node.registerItem(c); ItemResult itemResult = node.waitItem(c.getId(), 8000); assertEquals(ItemState.APPROVED, itemResult.state); }
private void registerAndCheckApproved(Contract c) throws TimeoutException, InterruptedException { node.registerItem(c); ItemResult itemResult = node.waitItem(c.getId(), 8000); assertEquals(ItemState.APPROVED, itemResult.state); }
public synchronized Parcel createParcelWithFreshU(Contract c, Set<PrivateKey> keys) throws Exception { Set<PublicKey> ownerKeys = new HashSet(); keys.stream().forEach(key -> ownerKeys.add(key.getPublicKey())); Contract stepaU = InnerContractsService.createFreshU(100000000, ownerKeys); stepaU.check(); //stepaU.setIsU(true); stepaU.traceErrors(); node.registerItem(stepaU); ItemResult itemResult = node.waitItem(stepaU.getId(), 18000); assertEquals(ItemState.APPROVED, itemResult.state); return ContractsService.createParcel(c, stepaU, 150, keys); }
@Test(timeout = 90000) public void registerBadItem() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem bad = new TestItem(false); node.registerItem(bad); ItemResult r = node.waitItem(bad.getId(), 5000); assertEquals(ItemState.DECLINED, r.state); }
@Ignore("removed functionality") @Test(timeout = 90000) public void declineItemFromoutWhiteList() throws Exception { Set<PrivateKey> stepaPrivateKeys = new HashSet<>(); stepaPrivateKeys.add(new PrivateKey(Do.read(ROOT_PATH + "keys/stepan_mamontov.private.unikey"))); Contract stepaCoins = Contract.fromDslFile(ROOT_PATH + "stepaCoins.yml"); stepaCoins.setExpiresAt(ZonedDateTime.now().plusMonths(1)); stepaCoins.addSignerKey(stepaPrivateKeys.iterator().next()); stepaCoins.seal(); stepaCoins.check(); stepaCoins.traceErrors(); node.registerItem(stepaCoins); ItemResult itemResult = node.waitItem(stepaCoins.getId(), 18000); assertEquals(ItemState.UNDEFINED, itemResult.state); }
@Test(timeout = 90000) public void shouldBreakByQuantizer() throws Exception { if(node == null) { System.out.println("network not inited"); return; } // 100 Contract.setTestQuantaLimit(10); Contract c = Contract.fromDslFile(ROOT_PATH + "coin100.yml"); c.addSignerKeyFromFile(ROOT_PATH +"_xer0yfe2nn1xthc.private.unikey"); c.seal(); node.registerItem(c); ItemResult itemResult = node.waitItem(c.getId(), 1500); System.out.println(itemResult); Contract.setTestQuantaLimit(-1); assertEquals(ItemState.UNDEFINED, itemResult.state); }
@Test(timeout = 90000) public void checkItem() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem ok = new TestItem(true); TestItem bad = new TestItem(false); node.registerItem(ok); node.registerItem(bad); node.waitItem(ok.getId(), 6000); node.waitItem(bad.getId(), 6000); assertEquals(ItemState.APPROVED, node.checkItem(ok.getId()).state); assertEquals(ItemState.DECLINED, node.checkItem(bad.getId()).state); }
@Test(timeout = 90000) public void shouldBreakByQuantizerSplit() throws Exception { if(node == null) { System.out.println("network not inited"); return; } PrivateKey key = new PrivateKey(Do.read(ROOT_PATH + "_xer0yfe2nn1xthc.private.unikey")); // 100 Contract c = Contract.fromDslFile(ROOT_PATH + "coin100.yml"); c.addSignerKeyFromFile(ROOT_PATH +"_xer0yfe2nn1xthc.private.unikey"); c.seal(); registerAndCheckApproved(c); Contract.setTestQuantaLimit(60); // 30 Contract c1 = ContractsService.createSplit(c, new BigDecimal("30"), "amount", new HashSet<PrivateKey>(Arrays.asList(key))); Contract c2 = c1.getNew().get(0); assertEquals("70", c1.getStateData().get("amount").toString()); assertEquals("30", c2.getStateData().get("amount").toString()); node.registerItem(c1); ItemResult itemResult = node.waitItem(c1.getId(), 1500); System.out.println(itemResult); Contract.setTestQuantaLimit(-1); assertEquals(ItemState.UNDEFINED, itemResult.state); }
@Test public void itemResultWithErrors() throws Exception { Contract contract = new Contract(TestKeys.privateKey(0)); ModifyDataPermission modifyDataPermission = new ModifyDataPermission(contract.getRole("owner"), new Binder()); modifyDataPermission.addField("value", Do.listOf("0", "1")); contract.addPermission(modifyDataPermission); contract.getStateData().set("value", "1"); contract.seal(); node.registerItem(contract); node.waitItem(contract.getId(), 5000); Contract contract2 = contract.createRevision(); contract2.addSignerKey(TestKeys.privateKey(0)); contract2.getStateData().set("value", "2"); contract2.seal(); node.registerItem(contract2); ItemResult itemResult = node.waitItem(contract2.getId(), 5000); System.out.println("itemResult: " + itemResult.state); System.out.println("errors: " + itemResult.errors); if (itemResult.errors != null) { for (ErrorRecord er : itemResult.errors) System.out.println(" error: " + er); } assertNotNull(itemResult.errors); assertEquals(true, itemResult.errors.size() > 0); }
@Test(timeout = 90000) public void rejectBadNewItem() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(true); TestItem new1 = new TestItem(true); TestItem new2 = new TestItem(false); main.addNewItems(new1, new2); assertEquals(2, main.getNewItems().size()); System.out.println("-------------- register item " + main.getId() + " --------"); node.registerItem(main); System.out.println("-------------- wait item " + main.getId() + " --------"); ItemResult itemResult = node.waitItem(main.getId(), 15000); assertEquals(ItemState.DECLINED, itemResult.state); @NonNull ItemResult itemNew1 = node.checkItem(new1.getId()); assertEquals(ItemState.UNDEFINED, itemNew1.state); @NonNull ItemResult itemNew2 = node.checkItem(new2.getId()); assertEquals(ItemState.UNDEFINED, itemNew2.state); }
@Test(timeout = 90000) public void shouldDeclineItems() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem item = new TestItem(false); node.registerItem(item); ItemResult result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.DECLINED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.DECLINED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.DECLINED, result.state); result = node.checkItem(item.getId()); assertEquals(ItemState.DECLINED, result.state); }
@Test(timeout = 90000) public void shouldCreateItems() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem item = new TestItem(true); node.registerItem(item); ItemResult result = node.waitItem(item.getId(), 16000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.checkItem(item.getId()); assertEquals(ItemState.APPROVED, result.state); }
@Test(timeout = 90000) public void testNotCreatingOnReject() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(false); TestItem new1 = new TestItem(true); TestItem new2 = new TestItem(true); main.addNewItems(new1, new2); assertEquals(2, main.getNewItems().size()); node.registerItem(main); ItemResult itemResult = node.waitItem(main.getId(), 12500); assertEquals(ItemState.DECLINED, itemResult.state); @NonNull ItemResult itemNew1 = node.checkItem(new1.getId()); assertEquals(ItemState.UNDEFINED, itemNew1.state); @NonNull ItemResult itemNew2 = node.checkItem(new2.getId()); assertEquals(ItemState.UNDEFINED, itemNew2.state); }
@Test(timeout = 90000) public void badNewDocumentsPreventAccepting() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(true); TestItem new1 = new TestItem(true); TestItem new2 = new TestItem(true); // and now we run the day for teh output document: node.registerItem(new2); node.waitItem(new2.getId(), 3000); main.addNewItems(new1, new2); assertEquals(2, main.getNewItems().size()); @NonNull ItemResult item = node.checkItem(main.getId()); assertEquals(ItemState.UNDEFINED, item.state); node.registerItem(main); ItemResult itemResult = node.waitItem(main.getId(), 12000); assertEquals(ItemState.DECLINED, itemResult.state); @NonNull ItemResult itemNew1 = node.waitItem(new1.getId(), 2000); assertEquals(ItemState.UNDEFINED, itemNew1.state); // and this one was created before @NonNull ItemResult itemNew2 = node.waitItem(new2.getId(), 2000); assertEquals(ItemState.APPROVED, itemNew2.state); LogPrinter.showDebug(false); }
node.registerItem(item); try { System.out.println("noQuorumError wait " + item.getId()); node.registerItem(item2); try { node.waitItem(item2.getId(), 5000);
@Test(timeout = 90000) public void singleNodeMixApprovedAndDeclined() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem item = new TestItem(true); node.registerItem(item); ItemResult result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(item.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.checkItem(item.getId()); assertEquals(ItemState.APPROVED, result.state); // Negative consensus TestItem item2 = new TestItem(false); node.registerItem(item2); ItemResult result2 = node.waitItem(item2.getId(), 12000); assertEquals(ItemState.DECLINED, result2.state); result2 = node.waitItem(item2.getId(), 12000); assertEquals(ItemState.DECLINED, result2.state); result2 = node.waitItem(item2.getId(), 12000); assertEquals(ItemState.DECLINED, result2.state); result2 = node.checkItem(item2.getId()); assertEquals(ItemState.DECLINED, result2.state); }
@Test(timeout = 90000) public void declineDeepTreeBadNew() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(true); TestItem new1 = new TestItem(true); TestItem new2 = new TestItem(true); TestItem new1_1 = new TestItem(true); TestItem new2_1 = new TestItem(false); new1.addNewItems(new1_1); new2.addNewItems(new2_1); main.addNewItems(new1, new2); node.registerItem(main); ItemResult result = node.waitItem(main.getId(), 6000); assertEquals(ItemState.DECLINED, result.state); result = node.waitItem(new1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(new2.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(new1_1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(new2_1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); }
@Test(timeout = 90000) public void registerDeepTree() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(true); TestItem new1 = new TestItem(true); TestItem new2 = new TestItem(true); TestItem new1_1 = new TestItem(true); TestItem new2_1 = new TestItem(true); new1.addNewItems(new1_1); new2.addNewItems(new2_1); main.addNewItems(new1, new2); node.registerItem(main); ItemResult result = node.waitItem(main.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(new1.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(new2.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(new1_1.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); result = node.waitItem(new2_1.getId(), 6000); assertEquals(ItemState.APPROVED, result.state); }
@Test(timeout = 90000) public void declineDeepTreeBadRevoke() throws Exception { if(node == null) { System.out.println("network not inited"); return; } TestItem main = new TestItem(true); TestItem new1 = new TestItem(true); TestItem revoke1 = new TestItem(true); TestItem new1_1 = new TestItem(true); TestItem revoke1_1 = new TestItem(true); new1_1.addRevokingItems(revoke1_1); new1.addNewItems(new1_1); new1.addRevokingItems(revoke1); main.addNewItems(new1); node.registerItem(main); ItemResult result = node.waitItem(main.getId(), 6000); assertEquals(ItemState.DECLINED, result.state); result = node.waitItem(new1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(revoke1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(new1_1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); result = node.waitItem(revoke1_1.getId(), 6000); assertEquals(ItemState.UNDEFINED, result.state); }