Package eu.stratosphere.nephele.instance.cluster

Source Code of eu.stratosphere.nephele.instance.cluster.HostInClusterTest

/***********************************************************************************************************************
* Copyright (C) 2010-2013 by the Stratosphere project (http://stratosphere.eu)
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
**********************************************************************************************************************/

package eu.stratosphere.nephele.instance.cluster;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.junit.Test;

import eu.stratosphere.configuration.ConfigConstants;
import eu.stratosphere.nephele.instance.HardwareDescription;
import eu.stratosphere.nephele.instance.HardwareDescriptionFactory;
import eu.stratosphere.nephele.instance.InstanceConnectionInfo;
import eu.stratosphere.nephele.instance.InstanceType;
import eu.stratosphere.nephele.instance.InstanceTypeFactory;
import eu.stratosphere.nephele.jobgraph.JobID;
import eu.stratosphere.nephele.topology.NetworkTopology;

/**
* Tests for {@link ClusterInstance}.
*
*/
public class HostInClusterTest {

  /**
   * Creates a cluster instance of a special test type.
   *
   * @return a cluster instance of a special test type
   */
  private ClusterInstance createTestClusterInstance() {

    final int ipcPort = ConfigConstants.DEFAULT_TASK_MANAGER_IPC_PORT;
    final int dataPort = ConfigConstants.DEFAULT_TASK_MANAGER_DATA_PORT;
    InetAddress inetAddress = null;
    try {
      inetAddress = InetAddress.getByName("127.0.0.1");
    } catch (UnknownHostException e) {
      fail(e.getMessage());
    }

    final String identifier = "testtype";
    final int numComputeUnits = 8;
    final int numCores = 8;
    final int memorySize = 32 * 1024;
    final int diskCapacity = 200;
    final int pricePerHour = 10;

    final InstanceType capacity = InstanceTypeFactory.construct(identifier, numComputeUnits, numCores, memorySize,
      diskCapacity,
      pricePerHour);

    final InstanceConnectionInfo instanceConnectionInfo = new InstanceConnectionInfo(inetAddress, ipcPort, dataPort);

    final HardwareDescription hardwareDescription = HardwareDescriptionFactory.construct(numCores,
      memorySize * 1024L * 1024L, memorySize * 1024L * 1024L);

    final NetworkTopology topology = NetworkTopology.createEmptyTopology();
    ClusterInstance host = new ClusterInstance(instanceConnectionInfo, capacity, topology.getRootNode(), topology,
      hardwareDescription);

    return host;
  }

  /**
   * Checks whether the tracking of heart beats is correct.
   */
  @Test
  public void testHeartBeat() {
    // check that heart beat is triggered correctly.

    ClusterInstance host = createTestClusterInstance();

    host.reportHeartBeat();

    assertTrue("we have not waited 1 second since last heart beat", host.isStillAlive(1000));

    try {
      Thread.sleep(100);
    } catch (InterruptedException e) {
      fail(e.getMessage());
    }

    assertFalse("we have waited for more than 10 milliseconds", host.isStillAlive(10));
  }

  /**
   * This test covers the internal accounting used by the cluster manager.
   */
  @Test
  public void testAccounting() {
    // check whether the accounting of capacity works correctly
    final ClusterInstance host = createTestClusterInstance();
    final JobID jobID = new JobID();
    final int numComputeUnits = 8 / 8;
    final int numCores = 8 / 8;
    final int memorySize = 32 * 1024 / 8;
    final int diskCapacity = 200 / 8;
    final InstanceType type = InstanceTypeFactory.construct("dummy", numComputeUnits, numCores, memorySize,
      diskCapacity, -1);
    for (int run = 0; run < 2; ++run) {
      // do this twice to check that everything is correctly freed
      AllocatedSlice[] slices = new AllocatedSlice[8];
      for (int i = 0; i < 8; ++i) {
        slices[i] = host.createSlice(type, jobID);
        assertNotNull(slices[i]);
        assertEquals(numComputeUnits, slices[i].getType().getNumberOfComputeUnits());
        assertEquals(numCores, slices[i].getType().getNumberOfCores());
        assertEquals(memorySize, slices[i].getType().getMemorySize());
        assertEquals(diskCapacity, slices[i].getType().getDiskCapacity());
      }
      // now no resources should be left
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 1, 0, 0, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 1, 0, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 0, 1, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 0, 0, 1, 0), jobID));

      for (int i = 0; i < 8; ++i) {
        host.removeAllocatedSlice(slices[i].getAllocationID());
      }
    }
  }

  /**
   * This test checks if allocated slices inside a cluster instance are removed correctly.
   */
  @Test
  public void testTermination() {
   
    // check whether the accounting of capacity works correctly if terminateAllInstances is called
    final ClusterInstance host = createTestClusterInstance();
    final JobID jobID = new JobID();
    final int numComputeUnits = 8 / 8;
    final int numCores = 8 / 8;
    final int memorySize = 32 * 1024 / 8;
    final int diskCapacity = 200 / 8;
    final InstanceType type = InstanceTypeFactory.construct("dummy", numComputeUnits, numCores, memorySize,
      diskCapacity, -1);
    for (int run = 0; run < 2; ++run) {
      // do this twice to check that everything is correctly freed
      AllocatedSlice[] slices = new AllocatedSlice[8];
      for (int i = 0; i < 8; ++i) {
        slices[i] = host.createSlice(type, jobID);
        assertNotNull(slices[i]);
        assertEquals(numComputeUnits, slices[i].getType().getNumberOfComputeUnits());
        assertEquals(numCores, slices[i].getType().getNumberOfCores());
        assertEquals(memorySize, slices[i].getType().getMemorySize());
        assertEquals(diskCapacity, slices[i].getType().getDiskCapacity());
      }
      // now no resources should be left
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 1, 0, 0, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 1, 0, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 0, 1, 0, 0), jobID));
      assertNull(host.createSlice(InstanceTypeFactory.construct("dummy", 0, 0, 0, 1, 0), jobID));
      List<AllocatedSlice> removedSlices = host.removeAllAllocatedSlices();

      final Set<AllocatedSlice> slicesSet = new HashSet<AllocatedSlice>();
      for(int i = 0; i < slices.length; ++i) {
        slicesSet.add(slices[i]);
      }
     
      final Set<AllocatedSlice> removedSlicesSet = new HashSet<AllocatedSlice>(removedSlices);
     
      //Check if both sets are equal
      assertEquals(slicesSet.size(), removedSlices.size());
      final Iterator<AllocatedSlice> it = slicesSet.iterator();
      while(it.hasNext()) {
        assertTrue(removedSlicesSet.remove(it.next()));
      }
     
      assertEquals(0, removedSlicesSet.size());
    }
  }
}
TOP

Related Classes of eu.stratosphere.nephele.instance.cluster.HostInClusterTest

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.