Search in sources :

Example 26 with Pair

use of org.apache.heron.common.basics.Pair in project heron by twitter.

the class KubernetesContextTest method createVolumeHostPathError.

/**
 * Create test cases for <code>Host Path</code> errors.
 * @param testCases Test case container.
 *                  Input: [0] Config, [1] Boolean to indicate Manager/Executor.
 *                  Output: Error message
 * @param isExecutor Boolean to indicate Manager/Executor test case generation.
 */
private void createVolumeHostPathError(List<TestTuple<Pair<Config, Boolean>, String>> testCases, boolean isExecutor) {
    final String volumeNameValid = "volume-name-valid";
    final String passingValue = "should-pass";
    final String failureValue = "Should-Fail";
    final String processName = isExecutor ? KubernetesConstants.EXECUTOR_NAME : KubernetesConstants.MANAGER_NAME;
    final String keyPattern = String.format(KubernetesContext.KUBERNETES_VOLUME_HOSTPATH_PREFIX + "%%s.%%s", processName);
    // Type is invalid.
    final Config configInvalidMedium = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "type"), failureValue).put(String.format(keyPattern, volumeNameValid, "pathOnHost"), passingValue).put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "subPath"), passingValue).build();
    testCases.add(new TestTuple<>(processName + ": Invalid 'type' should trigger exception", new Pair<>(configInvalidMedium, isExecutor), "Host Path 'type' of"));
    // Path on Host is missing.
    final Config configNoHostOnPath = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "type"), "BlockDevice").put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "subPath"), passingValue).build();
    testCases.add(new TestTuple<>(processName + ": No 'hostOnPath' should trigger exception", new Pair<>(configNoHostOnPath, isExecutor), "requires a path on the host"));
    // Path on Host is empty.
    final Config configEmptyHostOnPath = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "type"), "BlockDevice").put(String.format(keyPattern, volumeNameValid, "pathOnHost"), "").put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "subPath"), passingValue).build();
    testCases.add(new TestTuple<>(processName + ": Empty 'hostOnPath' should trigger exception", new Pair<>(configEmptyHostOnPath, isExecutor), "requires a path on the host"));
    // Invalid option.
    final Config configInvalidOption = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "type"), "BlockDevice").put(String.format(keyPattern, volumeNameValid, "pathOnHost"), passingValue).put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "subPath"), passingValue).put(String.format(keyPattern, volumeNameValid, "accessModes"), passingValue).build();
    testCases.add(new TestTuple<>(processName + ": Invalid option should trigger exception", new Pair<>(configInvalidOption, isExecutor), "Invalid Host Path option for"));
}
Also used : Config(org.apache.heron.spi.common.Config) Pair(org.apache.heron.common.basics.Pair)

Example 27 with Pair

use of org.apache.heron.common.basics.Pair in project heron by twitter.

the class KubernetesContextTest method createVolumeEmptyDirError.

/**
 * Create test cases for <code>Empty Directory</code> errors.
 * @param testCases Test case container.
 *                  Input: [0] Config, [1] Boolean to indicate Manager/Executor.
 *                  Output: Error message
 * @param isExecutor Boolean to indicate Manager/Executor test case generation.
 */
private void createVolumeEmptyDirError(List<TestTuple<Pair<Config, Boolean>, String>> testCases, boolean isExecutor) {
    final String volumeNameValid = "volume-name-valid";
    final String passingValue = "should-pass";
    final String failureValue = "Should-Fail";
    final String processName = isExecutor ? KubernetesConstants.EXECUTOR_NAME : KubernetesConstants.MANAGER_NAME;
    final String keyPattern = String.format(KubernetesContext.KUBERNETES_VOLUME_EMPTYDIR_PREFIX + "%%s.%%s", processName);
    // Medium is invalid.
    final Config configInvalidMedium = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "sizeLimit"), passingValue).put(String.format(keyPattern, volumeNameValid, "medium"), failureValue).build();
    testCases.add(new TestTuple<>(processName + ": Invalid 'medium' should trigger exception", new Pair<>(configInvalidMedium, isExecutor), "must be 'Memory' or empty."));
    // Invalid option.
    final Config configInvalidOption = Config.newBuilder().put(String.format(keyPattern, volumeNameValid, "path"), passingValue).put(String.format(keyPattern, volumeNameValid, "subPath"), passingValue).put(String.format(keyPattern, volumeNameValid, "sizeLimit"), passingValue).put(String.format(keyPattern, volumeNameValid, "medium"), "Memory").put(String.format(keyPattern, volumeNameValid, "accessModes"), passingValue).build();
    testCases.add(new TestTuple<>(processName + ": Invalid option should trigger exception", new Pair<>(configInvalidOption, isExecutor), "Directory type option"));
}
Also used : Config(org.apache.heron.spi.common.Config) Pair(org.apache.heron.common.basics.Pair)

Example 28 with Pair

use of org.apache.heron.common.basics.Pair in project heron by twitter.

the class PackingTestHelper method toContainerIdComponentNames.

public static Pair<Integer, String>[] toContainerIdComponentNames(Pair<Integer, InstanceId>[] containerIdInstanceIds) {
    @SuppressWarnings({ "unchecked", "rawtypes" }) Pair<Integer, String>[] containerIdComponentNames = new Pair[containerIdInstanceIds.length];
    int i = 0;
    for (Pair<Integer, InstanceId> containerIdInstanceId : containerIdInstanceIds) {
        containerIdComponentNames[i++] = new Pair<>(containerIdInstanceId.first, containerIdInstanceId.second.getComponentName());
    }
    return containerIdComponentNames;
}
Also used : InstanceId(org.apache.heron.spi.packing.InstanceId) MinRamConstraint(org.apache.heron.packing.constraints.MinRamConstraint) ResourceConstraint(org.apache.heron.packing.constraints.ResourceConstraint) Pair(org.apache.heron.common.basics.Pair)

Example 29 with Pair

use of org.apache.heron.common.basics.Pair in project heron by twitter.

the class PackingPlanBuilderTest method testInvalidComponentRemoveFromPackingPlan.

@Test(expected = PackingException.class)
public void testInvalidComponentRemoveFromPackingPlan() throws ConstraintViolationException {
    PackingPlan plan = doCreatePackingPlanTest(testContainerInstances);
    @SuppressWarnings({ "unchecked", "rawtypes" }) Pair<Integer, String>[] removed = new Pair[] { new Pair<>(1, "componentC") };
    PackingTestHelper.removeFromTestPackingPlan(TOPOLOGY_ID, plan, removed, 0);
}
Also used : PackingPlan(org.apache.heron.spi.packing.PackingPlan) Pair(org.apache.heron.common.basics.Pair) Test(org.junit.Test)

Example 30 with Pair

use of org.apache.heron.common.basics.Pair in project heron by twitter.

the class PackingPlanBuilderTest method testExceededCapacityAddingToPackingPlan.

@Test(expected = ResourceExceededException.class)
public void testExceededCapacityAddingToPackingPlan() throws ConstraintViolationException {
    PackingPlan plan = doCreatePackingPlanTest(testContainerInstances);
    @SuppressWarnings({ "unchecked", "rawtypes" }) Pair<Integer, InstanceId>[] added = new Pair[] { new Pair<>(3, new InstanceId("componentB", 4, 1)), new Pair<>(3, new InstanceId("componentB", 5, 2)) };
    PackingTestHelper.addToTestPackingPlan(TOPOLOGY_ID, plan, PackingTestHelper.toContainerIdComponentNames(added), 0);
}
Also used : InstanceId(org.apache.heron.spi.packing.InstanceId) PackingPlan(org.apache.heron.spi.packing.PackingPlan) Pair(org.apache.heron.common.basics.Pair) Test(org.junit.Test)

Aggregations

Pair (org.apache.heron.common.basics.Pair)37 Test (org.junit.Test)19 Config (org.apache.heron.spi.common.Config)15 HashMap (java.util.HashMap)13 InstanceId (org.apache.heron.spi.packing.InstanceId)10 LinkedList (java.util.LinkedList)8 Map (java.util.Map)7 VolumeConfigKeys (org.apache.heron.scheduler.kubernetes.KubernetesConstants.VolumeConfigKeys)7 Matchers.anyString (org.mockito.Matchers.anyString)7 ImmutableMap (com.google.common.collect.ImmutableMap)6 TestTuple (org.apache.heron.scheduler.kubernetes.KubernetesUtils.TestTuple)6 PackingPlan (org.apache.heron.spi.packing.PackingPlan)6 V1ConfigMap (io.kubernetes.client.openapi.models.V1ConfigMap)5 ArrayList (java.util.ArrayList)4 V1ConfigMapBuilder (io.kubernetes.client.openapi.models.V1ConfigMapBuilder)3 V1VolumeMount (io.kubernetes.client.openapi.models.V1VolumeMount)3 V1VolumeMountBuilder (io.kubernetes.client.openapi.models.V1VolumeMountBuilder)3 InetSocketAddress (java.net.InetSocketAddress)3 TopologySubmissionException (org.apache.heron.scheduler.TopologySubmissionException)3 V1Volume (io.kubernetes.client.openapi.models.V1Volume)2