/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.communication.management.internal; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.HashSet; import java.util.Set; import org.junit.Test; import de.rcenvironment.core.communication.api.LiveNetworkIdResolutionService; import de.rcenvironment.core.communication.common.IdentifierException; import de.rcenvironment.core.communication.common.InstanceNodeSessionId; import de.rcenvironment.core.communication.common.LogicalNodeSessionId; import de.rcenvironment.core.communication.common.NodeIdentifierTestUtils; import de.rcenvironment.core.communication.common.ResolvableNodeId; import de.rcenvironment.core.communication.internal.LiveNetworkIdResolutionServiceImpl; import de.rcenvironment.core.communication.management.BenchmarkSetup; import de.rcenvironment.core.communication.management.BenchmarkSubtask; import de.rcenvironment.core.communication.testutils.CommunicationServiceDefaultStub; import de.rcenvironment.core.communication.testutils.PlatformServiceDefaultStub; /** * Tests for {@link BenchmarkServiceImplTest}. * * @author Robert Mischke */ public class BenchmarkServiceImplTest { /** * Various tests for {@link BenchmarkServiceImpl#parseBenchmarkDescription(String)}. */ @Test public void testDescriptionParsing() { // define network test environment final InstanceNodeSessionId localNode = createRandomInstanceNodeSessionId(); final InstanceNodeSessionId serverNode1 = createRandomInstanceNodeSessionId(); final InstanceNodeSessionId serverNode2 = createRandomInstanceNodeSessionId(); final Set<InstanceNodeSessionId> availableNodes = new HashSet<InstanceNodeSessionId>(); // set up service and inject stubs/mocks BenchmarkServiceImpl service = new BenchmarkServiceImpl(); service.bindPlatformService(new PlatformServiceDefaultStub() { @Override public InstanceNodeSessionId getLocalInstanceNodeSessionId() { return localNode; } @Override public boolean matchesLocalInstance(ResolvableNodeId nodeId) { return nodeId.equals(localNode); } }); service.bindCommunicationService(new CommunicationServiceDefaultStub() { @Override public Set<InstanceNodeSessionId> getReachableInstanceNodes() { return availableNodes; } }); service.bindLiveNetworkIdResolutionService(new LiveNetworkIdResolutionService() { @Override public LogicalNodeSessionId resolveToLogicalNodeSessionId(ResolvableNodeId id) throws IdentifierException { return null; } @Override public InstanceNodeSessionId resolveInstanceNodeIdStringToInstanceNodeSessionId(String input) throws IdentifierException { final LiveNetworkIdResolutionServiceImpl idResolver = new LiveNetworkIdResolutionServiceImpl(); assertFalse(availableNodes.isEmpty()); for (InstanceNodeSessionId id : availableNodes) { idResolver.registerInstanceNodeSessionId(id); } return idResolver.resolveInstanceNodeIdStringToInstanceNodeSessionId(input); } }); // test invalid parameters try { service.parseBenchmarkDescription(null); } catch (RuntimeException e) { assertTrue(e instanceof NullPointerException); } try { service.parseBenchmarkDescription(""); } catch (RuntimeException e) { assertTrue(e instanceof IllegalArgumentException); } BenchmarkSetup setup; BenchmarkSubtask subtask; // prepare next test: populate virtual network with local node only availableNodes.clear(); availableNodes.add(localNode); // test with minimal description: "**"=contact all nodes, "(,,,,)" = use default values setup = service.parseBenchmarkDescription("**(,,,,)"); assertEquals(1, setup.getSubtasks().size()); subtask = setup.getSubtasks().get(0); // check default values assertEquals(1, subtask.getNumMessages()); assertEquals(1, subtask.getRequestSize()); assertEquals(1, subtask.getResponseSize()); assertEquals(0, subtask.getResponseDelay()); // prepare next test: populate virtual network with three nodes availableNodes.clear(); availableNodes.add(localNode); availableNodes.add(serverNode1); availableNodes.add(serverNode2); // verify that "**" uses the whole network setup = service.parseBenchmarkDescription("**(,,,,)"); assertEquals(1, setup.getSubtasks().size()); subtask = setup.getSubtasks().get(0); assertEquals(3, subtask.getTargetNodes().size()); assertTrue(subtask.getTargetNodes().contains(localNode)); // verify that "*" excludes the local node setup = service.parseBenchmarkDescription("*(,,,,)"); assertEquals(1, setup.getSubtasks().size()); subtask = setup.getSubtasks().get(0); assertEquals(2, subtask.getTargetNodes().size()); assertFalse(subtask.getTargetNodes().contains(localNode)); // verify explicit target declaration // TODO needs mechanism to find "default" instance session id for given instance id (and ideally, support both) setup = service.parseBenchmarkDescription(serverNode1.getInstanceNodeIdString() + "(,,,,)"); assertEquals(1, setup.getSubtasks().size()); subtask = setup.getSubtasks().get(0); assertEquals(1, subtask.getTargetNodes().size()); assertTrue(subtask.getTargetNodes().contains(serverNode1)); // verify multi-subtask string parsing // TODO improve test setup = service.parseBenchmarkDescription("*(,,,,);*(,,,,)"); assertEquals(2, setup.getSubtasks().size()); } private InstanceNodeSessionId createRandomInstanceNodeSessionId() { return NodeIdentifierTestUtils.createTestInstanceNodeSessionId(); } }