/** * Gets the zone of a task. * * @param taskInfo The {@link TaskInfo} to get zone information from. * @return A string indicating the zone the task is in. */ public static String getTaskZone(Protos.TaskInfo taskInfo) { return taskInfo.getCommand().getEnvironment().getVariablesList().stream() .filter(variable -> variable.getName().equals(EnvConstants.ZONE_TASKENV)).findFirst().get().getValue(); }
@Override public void expect(ClusterState state, SchedulerDriver mockDriver) throws AssertionError { StateStore stateStore = new StateStore(persisterWithTasks); Optional<Protos.TaskInfo> task = stateStore.fetchTask(taskName); Assert.assertTrue( String.format("Missing task: %s, known tasks are: %s", taskName, stateStore.fetchTaskNames()), task.isPresent()); Collection<Protos.Environment.Variable> env = task.get().getCommand().getEnvironment().getVariablesList(); Optional<String> actualValue = env.stream() .filter(e -> e.getName().equals(key)) .map(e -> e.getValue()) .findFirst(); Assert.assertTrue(String.format("Missing env entry %s, known entries are: %s", key, env.stream().map(e -> TextFormat.shortDebugString(e)).collect(Collectors.toList())), actualValue.isPresent()); Assert.assertEquals(value, actualValue.get()); } };
/** * Determines if a task is launched in any zones. * * @param taskInfo The {@link TaskInfo} to get zone information from. * @return A boolean indicating whether the task is in a zone. */ public static boolean taskHasZone(Protos.TaskInfo taskInfo) { return taskInfo.getCommand().getEnvironment().getVariablesList().stream() .anyMatch(variable -> variable.getName().equals(EnvConstants.ZONE_TASKENV)); }
request.setTaskDefinition(taskInfo.getCommand().getValue()); for (final List<String> containerInstances : containerInstancePartitions) { request.setContainerInstances(containerInstances);
Assert.assertEquals(getResourceId(taskInfo.getResources(1)), getResourceId(fulfilledPortResource2)); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(10000), envvars.get(portenv0).getValue()); Assert.assertEquals(String.valueOf(10001), envvars.get(portenv1).getValue());
@Test public void testUpdateStaticToStaticPort() throws Exception { // Launch for the first time: get port 555 Resource reserveResource = recordLaunchWithCompleteOfferedResources( PodInstanceRequirementTestUtils.getPortRequirement(555), ResourceTestUtils.getUnreservedPorts(555, 555)).get(3); String resourceId = getResourceId(reserveResource); Collection<Resource> expectedResources = getExpectedExecutorResources( stateStore.fetchTasks().iterator().next().getExecutor()); expectedResources.addAll(Arrays.asList( ResourceTestUtils.getReservedPorts(555, 555, resourceId), ResourceTestUtils.getUnreservedPorts(666, 666))); // Now lets move to port 666: List<OfferRecommendation> recommendations = evaluator.evaluate( PodInstanceRequirementTestUtils.getPortRequirement(666), Arrays.asList(OfferTestUtils.getOffer(expectedResources))); // UNRESERVE, RESERVE, LAUNCH Assert.assertEquals(Arrays.asList( Protos.Offer.Operation.Type.UNRESERVE, Protos.Offer.Operation.Type.RESERVE, Offer.Operation.Type.LAUNCH_GROUP, null), recommendations.stream() .map(rec -> rec.getOperation().isPresent() ? rec.getOperation().get().getType() : null) .collect(Collectors.toList())); Operation launchOperation = recommendations.get(2).getOperation().get(); TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(666), envvars.get(TestConstants.PORT_ENV_NAME + "_666").getValue()); }
@SuppressWarnings("PMD.AvoidUsingHardCodedIP") @Test public void testReserveTaskNamedVIPPort() throws Exception { List<OfferRecommendation> recommendations = evaluator.evaluate( PodInstanceRequirementTestUtils.getVIPRequirement(80, 10000), OfferTestUtils.getCompleteOffers(ResourceTestUtils.getUnreservedPorts(10000, 10000))); Assert.assertEquals(6, recommendations.size()); Operation launchOperation = recommendations.get(4).getOperation().get(); Assert.assertFalse(recommendations.get(5).getOperation().isPresent()); TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Resource fulfilledPortResource = taskInfo.getResources(0); Assert.assertEquals(10000, fulfilledPortResource.getRanges().getRange(0).getBegin()); Assert.assertFalse(getResourceId(fulfilledPortResource).isEmpty()); DiscoveryInfo discoveryInfo = taskInfo.getDiscovery(); Assert.assertEquals(discoveryInfo.getName(), taskInfo.getName()); Assert.assertEquals(discoveryInfo.getVisibility(), DiscoveryInfo.Visibility.CLUSTER); Port discoveryPort = discoveryInfo.getPorts().getPorts(0); Assert.assertEquals(discoveryPort.getProtocol(), "tcp"); Assert.assertEquals(discoveryPort.getVisibility(), DiscoveryInfo.Visibility.EXTERNAL); Assert.assertEquals(discoveryPort.getNumber(), 10000); Label vipLabel = discoveryPort.getLabels().getLabels(0); Assert.assertTrue(vipLabel.getKey().startsWith("VIP_")); Assert.assertEquals(vipLabel.getValue(), TestConstants.VIP_NAME + "-10000:80"); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(10000), envvars.get(TestConstants.PORT_ENV_NAME + "_VIP_10000").getValue()); }
@Test public void testUpdateDynamicToStaticPort() throws Exception { // Launch for the first time: get port 555 from dynamic port Resource reserveResource = recordLaunchWithCompleteOfferedResources( PodInstanceRequirementTestUtils.getPortRequirement(0), ResourceTestUtils.getUnreservedPorts(555, 555)).get(3); String resourceId = getResourceId(reserveResource); Collection<Resource> expectedResources = getExpectedExecutorResources( stateStore.fetchTasks().iterator().next().getExecutor()); expectedResources.addAll(Arrays.asList( ResourceTestUtils.getReservedPorts(555, 555, resourceId), ResourceTestUtils.getUnreservedPorts(666, 666))); // Now lets move to port 666: List<OfferRecommendation> recommendations = evaluator.evaluate( PodInstanceRequirementTestUtils.getPortRequirement(666), Arrays.asList(OfferTestUtils.getOffer(expectedResources))); // UNRESERVE, RESERVE, LAUNCH Assert.assertEquals(Arrays.asList( Protos.Offer.Operation.Type.UNRESERVE, Protos.Offer.Operation.Type.RESERVE, Offer.Operation.Type.LAUNCH_GROUP, null), recommendations.stream() .map(rec -> rec.getOperation().isPresent() ? rec.getOperation().get().getType() : null) .collect(Collectors.toList())); Operation launchOperation = recommendations.get(2).getOperation().get(); TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(666), envvars.get(TestConstants.PORT_ENV_NAME + "_666").getValue()); }
@SuppressWarnings("PMD.AvoidUsingHardCodedIP") @Test public void testReserveTaskDynamicVIPPort() throws Exception { List<OfferRecommendation> recommendations = evaluator.evaluate( PodInstanceRequirementTestUtils.getVIPRequirement(80, 0), OfferTestUtils.getCompleteOffers(ResourceTestUtils.getUnreservedPorts(10000, 10000))); Assert.assertEquals(6, recommendations.size()); Operation launchOperation = recommendations.get(4).getOperation().get(); Assert.assertFalse(recommendations.get(5).getOperation().isPresent()); TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Resource fulfilledPortResource = taskInfo.getResources(0); Assert.assertEquals(10000, fulfilledPortResource.getRanges().getRange(0).getBegin()); Assert.assertFalse(getResourceId(fulfilledPortResource).isEmpty()); DiscoveryInfo discoveryInfo = taskInfo.getDiscovery(); Assert.assertEquals(discoveryInfo.getName(), taskInfo.getName()); Assert.assertEquals(discoveryInfo.getVisibility(), DiscoveryInfo.Visibility.CLUSTER); Port discoveryPort = discoveryInfo.getPorts().getPorts(0); Assert.assertEquals(discoveryPort.getProtocol(), "tcp"); Assert.assertEquals(discoveryPort.getVisibility(), DiscoveryInfo.Visibility.EXTERNAL); Assert.assertEquals(discoveryPort.getNumber(), 10000); Label vipLabel = discoveryPort.getLabels().getLabels(0); Assert.assertTrue(vipLabel.getKey().startsWith("VIP_")); Assert.assertEquals(vipLabel.getValue(), TestConstants.VIP_NAME + "-0:80"); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(10000), envvars.get(TestConstants.PORT_ENV_NAME + "_VIP_0").getValue()); }
@Test public void testReserveStaticPort() throws Exception { PodInstanceRequirement podInstanceRequirement = PodInstanceRequirementTestUtils.getPortRequirement(555); Protos.Resource offeredPorts = ResourceTestUtils.getUnreservedPorts(555, 555); List<OfferRecommendation> recommendations = evaluator.evaluate(podInstanceRequirement, OfferTestUtils.getCompleteOffers(offeredPorts)); Assert.assertEquals(Arrays.asList( Protos.Offer.Operation.Type.RESERVE, Protos.Offer.Operation.Type.RESERVE, Protos.Offer.Operation.Type.RESERVE, Protos.Offer.Operation.Type.RESERVE, Offer.Operation.Type.LAUNCH_GROUP, null), recommendations.stream() .map(rec -> rec.getOperation().isPresent() ? rec.getOperation().get().getType() : null) .collect(Collectors.toList())); Protos.Offer.Operation launchOperation = recommendations.get(4).getOperation().get(); Protos.TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Protos.Resource fulfilledPortResource = taskInfo.getResources(0); Assert.assertFalse(getResourceId(fulfilledPortResource).isEmpty()); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(String.valueOf(555), envvars.get(TestConstants.PORT_ENV_NAME + "_555").getValue()); }
@Test public void shouldAddJarInfoAndRemoveContainerInfo() { when(configuration.isFrameworkUseDocker()).thenReturn(false); String address = "http://localhost:1234"; when(configuration.getFrameworkFileServerAddress()).thenReturn(address); when(configuration.nativeCommand(any())).thenReturn("ls"); TaskInfoFactory factory = new TaskInfoFactory(clusterState); Date now = new DateTime().withDayOfMonth(1).withDayOfYear(1).withYear(1970).withHourOfDay(1).withMinuteOfHour(2).withSecondOfMinute(3).withMillisOfSecond(400).toDate(); when(clock.now()).thenReturn(now); when(clock.nowUTC()).thenReturn(ZonedDateTime.now(ZoneOffset.UTC)); Protos.TaskInfo taskInfo = factory.createTask(configuration, frameworkState, getOffer(frameworkState.getFrameworkID()), clock); assertFalse(taskInfo.getContainer().isInitialized()); assertTrue(taskInfo.getExecutor().getCommand().isInitialized()); assertEquals(2, taskInfo.getCommand().getUrisCount()); assertTrue(taskInfo.getCommand().getUris(0).getValue().contains(address)); }
@Test public void testReserveTaskDynamicPort() throws Exception { Protos.Resource offeredPorts = ResourceTestUtils.getUnreservedPorts(10000, 10000); PodInstanceRequirement podInstanceRequirement = PodInstanceRequirementTestUtils.getPortRequirement(0); List<OfferRecommendation> recommendations = evaluator.evaluate(podInstanceRequirement, OfferTestUtils.getCompleteOffers(offeredPorts)); Assert.assertEquals(6, recommendations.size()); Protos.Offer.Operation launchOperation = recommendations.get(4).getOperation().get(); Assert.assertFalse(recommendations.get(5).getOperation().isPresent()); Protos.TaskInfo taskInfo = launchOperation.getLaunchGroup().getTaskGroup().getTasks(0); Protos.Resource fulfilledPortResource = taskInfo.getResources(0); Assert.assertFalse(getResourceId(fulfilledPortResource).isEmpty()); Map<String, Protos.Environment.Variable> envvars = EnvUtils.toMap(taskInfo.getCommand().getEnvironment()); Assert.assertEquals(envvars.toString(), String.valueOf(10000), envvars.get(TestConstants.PORT_ENV_NAME + "_0").getValue()); }