Package org.hive2hive.core.tomp2p

Source Code of org.hive2hive.core.tomp2p.TTLTest

package org.hive2hive.core.tomp2p;

import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.SignatureException;

import net.tomp2p.futures.FutureDigest;
import net.tomp2p.futures.FutureGet;
import net.tomp2p.futures.FuturePut;
import net.tomp2p.p2p.Peer;
import net.tomp2p.p2p.PeerMaker;
import net.tomp2p.peers.Number160;
import net.tomp2p.storage.Data;

import org.hive2hive.core.H2HJUnitTest;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

/**
* A test which test the content protection mechanisms of <code>TomP2P</code>. Tests should be completely
* independent of <code>Hive2Hive</code>.
*
* @author Seppi
*/
public class TTLTest extends H2HJUnitTest {

  @BeforeClass
  public static void initTest() throws Exception {
    testClass = TTLTest.class;
    beforeClass();
  }

  @Test
  public void testTTLDecrement() throws IOException, ClassNotFoundException, NoSuchAlgorithmException,
      InvalidKeyException, SignatureException, InterruptedException {
    KeyPairGenerator gen = KeyPairGenerator.getInstance("DSA");

    KeyPair keyPairPeer1 = gen.generateKeyPair();
    Peer p1 = new PeerMaker(Number160.createHash(1)).ports(4834).keyPair(keyPairPeer1)
        .setEnableIndirectReplication(true).storageIntervalMillis(1).makeAndListen();
    KeyPair keyPairPeer2 = gen.generateKeyPair();
    Peer p2 = new PeerMaker(Number160.createHash(2)).masterPeer(p1).keyPair(keyPairPeer2)
        .setEnableIndirectReplication(true).storageIntervalMillis(1).makeAndListen();

    p2.bootstrap().setPeerAddress(p1.getPeerAddress()).start().awaitUninterruptibly();
    p1.bootstrap().setPeerAddress(p2.getPeerAddress()).start().awaitUninterruptibly();

    KeyPair keyPair1 = gen.generateKeyPair();

    Number160 lKey = Number160.createHash("location");
    Number160 dKey = Number160.createHash("domain");
    Number160 cKey = Number160.createHash("content");
    Number160 vKey = Number160.createHash("version");
    Number160 bKey = Number160.ZERO;

    int ttl = 4;

    String testData = "data";
    Data data = new Data(testData).setProtectedEntry();
    data.ttlSeconds(ttl).basedOn(bKey);

    // initial put
    FuturePut futurePut = p1.put(lKey).setDomainKey(dKey).setData(cKey, data).setVersionKey(vKey)
        .keyPair(keyPair1).start();
    futurePut.awaitUninterruptibly();
    Assert.assertTrue(futurePut.isSuccess());

    // wait a moment, so that the ttl decrements
    Thread.sleep(2000);

    // check decrement of ttl through a normal get
    FutureGet futureGet = p1.get(lKey).setDomainKey(dKey).setContentKey(cKey).setVersionKey(vKey).start();
    futureGet.awaitUninterruptibly();
    Assert.assertTrue(futureGet.isSuccess());
    Assert.assertTrue(ttl > futureGet.getData().ttlSeconds());

    // check decrement of ttl through a get meta
    FutureDigest futureDigest = p1.digest(lKey).setDomainKey(dKey).setContentKey(cKey)
        .setVersionKey(vKey).returnMetaValues().start();
    futureDigest.awaitUninterruptibly();
    Assert.assertTrue(futureDigest.isSuccess());
    Data dataMeta = futureDigest.getDigest().dataMap().values().iterator().next();
    Assert.assertTrue(ttl > dataMeta.ttlSeconds());

    // wait again a moment, till data gets expired
    Thread.sleep(2000);

    // check if data has been removed
    Data retData = p2.get(lKey).setDomainKey(dKey).setContentKey(cKey).setVersionKey(vKey).start()
        .awaitUninterruptibly().getData();
    Assert.assertNull(retData);

    p1.shutdown().awaitUninterruptibly();
    p2.shutdown().awaitUninterruptibly();
  }

  @AfterClass
  public static void cleanAfterClass() {
    afterClass();
  }

}
TOP

Related Classes of org.hive2hive.core.tomp2p.TTLTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.