Package org.hive2hive.core.network

Source Code of org.hive2hive.core.network.H2HStorageMemoryTest

package org.hive2hive.core.network;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;

import java.io.IOException;
import java.security.KeyPair;
import java.util.List;
import java.util.Random;

import net.tomp2p.futures.FuturePut;
import net.tomp2p.peers.Number160;
import net.tomp2p.peers.Number640;
import net.tomp2p.peers.PeerAddress;

import org.hive2hive.core.H2HJUnitTest;
import org.hive2hive.core.H2HTestData;
import org.hive2hive.core.exceptions.NoPeerConnectionException;
import org.hive2hive.core.network.H2HStorageMemory.PutStatusH2H;
import org.hive2hive.core.network.data.parameters.Parameters;
import org.hive2hive.core.security.EncryptionUtil;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

/**
* @author Seppi
*/
public class H2HStorageMemoryTest extends H2HJUnitTest {

  private static List<NetworkManager> network;
  private static final int networkSize = 10;
  private static Random random = new Random();

  @BeforeClass
  public static void initTest() throws Exception {
    testClass = H2HStorageMemoryTest.class;
    beforeClass();
    network = NetworkTestUtil.createNetwork(networkSize);
  }

  @Test
  public void putIntialVersionKeyZeroTest() throws NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));

    H2HTestData data = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters = new Parameters().setLocationKey(node.getNodeId())
        .setContentKey(NetworkTestUtil.randomString()).setData(data);

    FuturePut futurePut = node.getDataManager().putUnblocked(parameters);
    futurePut.awaitUninterruptibly();

    assertFalse(futurePut.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut.getRawResult().keySet()) {
      for (Number640 key : futurePut.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.OK, PutStatusH2H.values()[futurePut.getRawResult().get(peerAddress)
            .get(key)]);
      }
    }
  }

  @Test
  public void putVersionKeyZeroPreviousVersionKeyZeroTest() throws NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setData(data1);
    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setData(data2);
    FuturePut futurePut2 = node.getDataManager().putUnblocked(parameters2);
    futurePut2.awaitUninterruptibly();

    assertFalse(futurePut2.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut2.getRawResult().keySet()) {
      for (Number640 key : futurePut2.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.OK, PutStatusH2H.values()[futurePut2.getRawResult()
            .get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putVersionKeyZeroPreviousVersionKeyNotZeroTest() throws IOException,
      NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    data1.generateVersionKey();
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data1);
    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setData(data2);
    FuturePut futurePut2 = node.getDataManager().putUnblocked(parameters2);
    futurePut2.awaitUninterruptibly();

    assertFalse(futurePut2.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut2.getRawResult().keySet()) {
      for (Number640 key : futurePut2.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.VERSION_CONFLICT_NO_VERSION_KEY, PutStatusH2H.values()[futurePut2
            .getRawResult().get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putInitialTest() throws IOException, NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data = new H2HTestData(NetworkTestUtil.randomString());
    data.generateVersionKey();
    assertNotEquals(Number160.ZERO, data.getVersionKey());
    Parameters parameters = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data.getVersionKey()).setData(data);

    FuturePut futurePut = node.getDataManager().putUnblocked(parameters);
    futurePut.awaitUninterruptibly();
    futurePut.getFutureRequests().awaitUninterruptibly();

    assertFalse(futurePut.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut.getRawResult().keySet()) {
      for (Number640 key : futurePut.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.OK, PutStatusH2H.values()[futurePut.getRawResult().get(peerAddress)
            .get(key)]);
      }
    }
  }

  @Test
  public void putNoBasedOnTest() throws IOException, NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    data1.generateVersionKey();
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data1);
    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    data2.generateVersionKey();
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data2);
    FuturePut futurePut2 = node.getDataManager().putUnblocked(parameters2);
    futurePut2.awaitUninterruptibly();

    assertFalse(futurePut2.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut2.getRawResult().keySet()) {
      for (Number640 key : futurePut2.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.VERSION_CONFLICT_NO_BASED_ON, PutStatusH2H.values()[futurePut2
            .getRawResult().get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putVersionConflictTest() throws IOException, NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    data1.generateVersionKey();
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data1);
    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    data2.generateVersionKey();

    H2HTestData data3 = new H2HTestData(NetworkTestUtil.randomString());
    data3.generateVersionKey();
    data3.setBasedOnKey(data2.getVersionKey());
    Parameters parameters3 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data3.getVersionKey()).setData(data3);
    FuturePut futurePut3 = node.getDataManager().putUnblocked(parameters3);
    futurePut3.awaitUninterruptibly();

    assertFalse(futurePut3.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut3.getRawResult().keySet()) {
      for (Number640 key : futurePut3.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.VERSION_CONFLICT, PutStatusH2H.values()[futurePut3.getRawResult()
            .get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putNewVersionTest() throws IOException, NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    data1.generateVersionKey();
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data1);
    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    data2.generateVersionKey();
    data2.setBasedOnKey(data1.getVersionKey());
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data2.getVersionKey()).setData(data2);
    FuturePut futurePut2 = node.getDataManager().putUnblocked(parameters2);
    futurePut2.awaitUninterruptibly();

    assertFalse(futurePut2.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut2.getRawResult().keySet()) {
      for (Number640 key : futurePut2.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.OK, PutStatusH2H.values()[futurePut2.getRawResult()
            .get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putNewVersionWithOldTimestampTest() throws InterruptedException, IOException,
      NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();

    // fake older time stamp, create data2 before data1
    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    data2.generateVersionKey();

    synchronized (this) {
      Thread.sleep(100);
    }

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    data1.generateVersionKey();
    data2.setBasedOnKey(data1.getVersionKey());

    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data1.getVersionKey()).setData(data1);
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setVersionKey(data2.getVersionKey()).setData(data2);

    FuturePut futurePut1 = node.getDataManager().putUnblocked(parameters1);
    futurePut1.awaitUninterruptibly();

    FuturePut futurePut2 = node.getDataManager().putUnblocked(parameters2);
    futurePut2.awaitUninterruptibly();

    assertFalse(futurePut2.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut2.getRawResult().keySet()) {
      for (Number640 key : futurePut2.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.VERSION_CONFLICT_OLD_TIMESTAMP, PutStatusH2H.values()[futurePut2
            .getRawResult().get(peerAddress).get(key)]);
      }
    }
  }

  @Test
  public void putFailedSecurityTest() throws InterruptedException, NoPeerConnectionException {
    NetworkManager node = network.get(random.nextInt(networkSize));
    String locationKey = node.getNodeId();
    String contentKey = NetworkTestUtil.randomString();
    KeyPair protectionKeys = EncryptionUtil.generateRSAKeyPair();

    H2HTestData data1 = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters1 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setData(data1).setProtectionKeys(protectionKeys);
    FuturePut futurePut = node.getDataManager().putUnblocked(parameters1);
    futurePut.awaitUninterruptibly();

    H2HTestData data2 = new H2HTestData(NetworkTestUtil.randomString());
    Parameters parameters2 = new Parameters().setLocationKey(locationKey).setContentKey(contentKey)
        .setData(data2);
    futurePut = node.getDataManager().putUnblocked(parameters2);
    futurePut.awaitUninterruptibly();

    assertFalse(futurePut.getRawResult().isEmpty());
    for (PeerAddress peerAddress : futurePut.getRawResult().keySet()) {
      for (Number640 key : futurePut.getRawResult().get(peerAddress).keySet()) {
        assertEquals(PutStatusH2H.FAILED_SECURITY, PutStatusH2H.values()[futurePut.getRawResult()
            .get(peerAddress).get(key)]);
      }
    }
  }

  @AfterClass
  public static void cleanAfterClass() {
    NetworkTestUtil.shutdownNetwork(network);
    afterClass();
  }

}
TOP

Related Classes of org.hive2hive.core.network.H2HStorageMemoryTest

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.