Search in sources :

Example 6 with FollowerContract

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));
}
Also used : ListRole(com.icodici.universa.contract.roles.ListRole) SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) Binder(net.sergeych.tools.Binder) PrivateKey(com.icodici.crypto.PrivateKey) SimpleRole(com.icodici.universa.contract.roles.SimpleRole) FollowerContract(com.icodici.universa.contract.services.FollowerContract) ListRole(com.icodici.universa.contract.roles.ListRole) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Example 7 with FollowerContract

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));
}
Also used : ListRole(com.icodici.universa.contract.roles.ListRole) SimpleRole(com.icodici.universa.contract.roles.SimpleRole) Role(com.icodici.universa.contract.roles.Role) Binder(net.sergeych.tools.Binder) PrivateKey(com.icodici.crypto.PrivateKey) FollowerContract(com.icodici.universa.contract.services.FollowerContract) ListRole(com.icodici.universa.contract.roles.ListRole) FollowerContract(com.icodici.universa.contract.services.FollowerContract) NSmartContract(com.icodici.universa.contract.services.NSmartContract) Test(org.junit.Test)

Aggregations

FollowerContract (com.icodici.universa.contract.services.FollowerContract)7 NSmartContract (com.icodici.universa.contract.services.NSmartContract)7 PrivateKey (com.icodici.crypto.PrivateKey)6 Test (org.junit.Test)6 PublicKey (com.icodici.crypto.PublicKey)4 ModifyDataPermission (com.icodici.universa.contract.permissions.ModifyDataPermission)4 Permission (com.icodici.universa.contract.permissions.Permission)4 Binder (net.sergeych.tools.Binder)4 ListRole (com.icodici.universa.contract.roles.ListRole)2 Role (com.icodici.universa.contract.roles.Role)2 SimpleRole (com.icodici.universa.contract.roles.SimpleRole)2 SlotContract (com.icodici.universa.contract.services.SlotContract)1 UnsContract (com.icodici.universa.contract.services.UnsContract)1