use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.
the class FollowerContractTest method testCanFollowContract.
@Test
public void testCanFollowContract() throws Exception {
final PrivateKey key = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
final PrivateKey key2 = new PrivateKey(Do.read(rootPath + "test_network_whitekey.private.unikey"));
Contract simpleContract = new Contract(key2);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
SimpleRole owner1 = new SimpleRole("owner", new KeyRecord(key.getPublicKey()));
SimpleRole owner2 = new SimpleRole("owner", new KeyRecord(key2.getPublicKey()));
ListRole ownerKeys = new ListRole("owner", ListRole.Mode.ANY, Do.listOf(owner1, owner2));
Contract simpleContract2 = new Contract(key2);
simpleContract2.registerRole(ownerKeys);
simpleContract2.seal();
simpleContract2.check();
simpleContract2.traceErrors();
assertTrue(simpleContract2.isOk());
PrivateKey callbackKey = new PrivateKey(2048);
FollowerContract smartContract = new FollowerContract(key);
assertTrue(smartContract instanceof FollowerContract);
smartContract.setNodeInfoProvider(nodeInfoProvider);
smartContract.putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey.getPublicKey());
smartContract.seal();
// check canFollowContract
assertTrue(smartContract.canFollowContract(simpleContract2));
// can not follow simpleContract (owner = key2) by smartContract (signed by key)
assertFalse(smartContract.canFollowContract(simpleContract));
Contract.Definition cd = simpleContract.getDefinition();
List<Role> newR = Do.listOf(smartContract.getRole("owner").resolve());
Binder data = new Binder();
data.set(FOLLOWER_ROLES_FIELD_NAME, newR);
cd.setData(data);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(smartContract.canFollowContract(simpleContract));
data.remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(smartContract.canFollowContract(simpleContract));
// state
simpleContract.getStateData().set(FOLLOWER_ROLES_FIELD_NAME, newR);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(smartContract.canFollowContract(simpleContract));
simpleContract.getStateData().remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(smartContract.canFollowContract(simpleContract));
// transactional
simpleContract.getTransactionalData().set(FOLLOWER_ROLES_FIELD_NAME, newR);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(smartContract.canFollowContract(simpleContract));
simpleContract.getTransactionalData().remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(smartContract.canFollowContract(simpleContract));
}
use of com.icodici.universa.contract.services.FollowerContract in project universa by UniversaBlockchain.
the class FollowerContractTest method testAllCanFollowContract.
@Test
public void testAllCanFollowContract() throws Exception {
final PrivateKey key = new PrivateKey(Do.read(rootPath + "_xer0yfe2nn1xthc.private.unikey"));
final PrivateKey followerKey = new PrivateKey(2048);
Contract simpleContract = new Contract(key);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
PrivateKey callbackKey = new PrivateKey(2048);
FollowerContract followerContract = new FollowerContract(followerKey);
followerContract.setNodeInfoProvider(nodeInfoProvider);
followerContract.putTrackingOrigin(simpleContract.getOrigin(), "http://localhost:7777/follow.callback", callbackKey.getPublicKey());
followerContract.seal();
// can not follow simpleContract (owner = key2) by smartContract (signed by key)
assertFalse(followerContract.canFollowContract(simpleContract));
Contract.Definition cd = simpleContract.getDefinition();
ListRole followerAllRole = new ListRole("all", 0, new ArrayList<>());
List<Role> followerAllRoles = Do.listOf(followerAllRole);
Binder data = new Binder();
data.set(FOLLOWER_ROLES_FIELD_NAME, followerAllRoles);
cd.setData(data);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(followerContract.canFollowContract(simpleContract));
data.remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(followerContract.canFollowContract(simpleContract));
// state
simpleContract.getStateData().set(FOLLOWER_ROLES_FIELD_NAME, followerAllRoles);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(followerContract.canFollowContract(simpleContract));
simpleContract.getStateData().remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(followerContract.canFollowContract(simpleContract));
// transactional
simpleContract.getTransactionalData().set(FOLLOWER_ROLES_FIELD_NAME, followerAllRoles);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertTrue(followerContract.canFollowContract(simpleContract));
simpleContract.getTransactionalData().remove(FOLLOWER_ROLES_FIELD_NAME);
simpleContract.seal();
simpleContract.check();
simpleContract.traceErrors();
assertTrue(simpleContract.isOk());
assertFalse(followerContract.canFollowContract(simpleContract));
}
Aggregations