@Override public void execute(Commander commander) { if (versions.size() != 1 && versions.size() != 2) { throw new ParseException("You must specify a binary version or a config version for upgrade."); } String binaryVersion = null; String configVersion = null; if (versions.get(0).startsWith("@")) { configVersion = versions.get(0); if (versions.size() > 1) { binaryVersion = versions.get(1); } } else { binaryVersion = versions.get(0); if (versions.size() > 1) { configVersion = versions.get(1); } } final UpgradeVersions upgradeVersions = new UpgradeVersions(binaryVersion, configVersion); verifySlotExecution(commander, slotFilter, "Are you sure you would like to UPGRADE these servers?", false, new SlotExecution() { public void execute(Commander commander, SlotFilter slotFilter, String expectedVersion) { List<SlotStatusRepresentation> slots = commander.upgrade(slotFilter, upgradeVersions, expectedVersion, force); displaySlots(slots); } }); }
private void assertUpgradeVersionsEquals(UpgradeVersions actual, UpgradeVersions expected) { assertEquals(actual.getBinaryVersion(), expected.getBinaryVersion()); assertEquals(actual.getConfigVersion(), this.expected.getConfigVersion()); } }
@Test public void testUpgradeDifferentBinaryVersion() { // upgrade apple slot 1 to binary version 2.0, but leave everything else unchanged resource.upgrade(new UpgradeVersions("2.0", null), MockUriInfo.from("http://localhost/v1/slot/assignment?uuid=" + apple1SlotId), null, false); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SlotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertEquals(apple1Status.getAssignment().getBinary(), APPLE_ASSIGNMENT_2.getBinary()); assertEquals(apple2Status.getAssignment().getBinary(), APPLE_ASSIGNMENT.getBinary()); assertEquals(bananaStatus.getAssignment().getBinary(), BANANA_ASSIGNMENT.getBinary()); // upgrade all apple slots to binary and config version2.0 UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?host=apple*"); Response response = resource.upgrade(upgradeVersions, uriInfo, null, false); coordinator.getAgentByAgentId(agentId); agentStatus = coordinator.getAgentByAgentId(agentId); apple1Status = agentStatus.getSlotStatus(apple1SlotId); apple2Status = agentStatus.getSlotStatus(apple2SlotId); bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertOkResponse(response, SlotLifecycleState.STOPPED, apple1Status, apple2Status); assertNull(response.getMetadata().get("Content-Type")); // content type is set by jersey based on @Produces assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
if (force && (status.getAssignment() == null)) { assignment = upgradeVersions.forceAssignment(repository); assignment = upgradeVersions.upgradeAssignment(repository, status.getAssignment());
private void testUpgrade(UpgradeVersions upgradeVersions) { UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?host=apple*"); Response response = resource.upgrade(upgradeVersions, uriInfo, null, false); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SlotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertOkResponse(response, SlotLifecycleState.STOPPED, apple1Status, apple2Status); assertNull(response.getMetadata().get("Content-Type")); // content type is set by jersey based on @Produces assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
@Test public void testUpgradeDifferentBinaryVersion() { // upgrade apple slot 1 to binary version 2.0, but leave everything else unchanged resource.upgrade(new UpgradeVersions("2.0", null), MockUriInfo.from("http://localhost/v1/slot/assignment?uuid=" + apple1SlotId), null, false); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SlotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertEquals(apple1Status.getAssignment().getBinary(), APPLE_ASSIGNMENT_2.getBinary()); assertEquals(apple2Status.getAssignment().getBinary(), APPLE_ASSIGNMENT.getBinary()); assertEquals(bananaStatus.getAssignment().getBinary(), BANANA_ASSIGNMENT.getBinary()); // upgrade all apple slots to binary and config version2.0 UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?host=apple*"); Response response = resource.upgrade(upgradeVersions, uriInfo, null, false); coordinator.getAgentByAgentId(agentId); agentStatus = coordinator.getAgentByAgentId(agentId); apple1Status = agentStatus.getSlotStatus(apple1SlotId); apple2Status = agentStatus.getSlotStatus(apple2SlotId); bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertOkResponse(response, SlotLifecycleState.STOPPED, apple1Status, apple2Status); assertNull(response.getMetadata().get("Content-Type")); // content type is set by jersey based on @Produces assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
private void testUpgrade(UpgradeVersions upgradeVersions) { UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?host=apple*"); Response response = resource.upgrade(upgradeVersions, uriInfo, null, false); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SlotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); assertOkResponse(response, SlotLifecycleState.STOPPED, apple1Status, apple2Status); assertNull(response.getMetadata().get("Content-Type")); // content type is set by jersey based on @Produces assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
@Test public void testUpgrade() throws Exception { initializeOneAgent(); UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); Request request = Request.Builder.preparePost() .setUri(coordinatorUriBuilder().appendPath("/v1/slot/assignment").addParameter("host", "apple*").build()) .setHeader(CONTENT_TYPE, APPLICATION_JSON) .setBodyGenerator(jsonBodyGenerator(upgradeVersionsCodec, upgradeVersions)) .build(); List<SlotStatusRepresentation> actual = httpClient.execute(request, createJsonResponseHandler(slotStatusesCodec, Status.OK.getStatusCode())); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); List<SlotStatusRepresentation> expected = ImmutableList.of( slotStatusRepresentationFactory.create(apple1Status), slotStatusRepresentationFactory.create(apple2Status)); assertEqualsNoOrder(actual, expected); assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
@Override public void execute(Commander commander) { if (versions.size() != 1 && versions.size() != 2) { throw new ParseException("You must specify a binary version or a config version for upgrade."); } String binaryVersion = null; String configVersion = null; if (versions.get(0).startsWith("@")) { configVersion = versions.get(0); if (versions.size() > 1) { binaryVersion = versions.get(1); } } else { binaryVersion = versions.get(0); if (versions.size() > 1) { configVersion = versions.get(1); } } final UpgradeVersions upgradeVersions = new UpgradeVersions(binaryVersion, configVersion); verifySlotExecution(commander, slotFilter, "Are you sure you would like to UPGRADE these servers?", false, new SlotExecution() { public void execute(Commander commander, SlotFilter slotFilter, String expectedVersion) { List<SlotStatusRepresentation> slots = commander.upgrade(slotFilter, upgradeVersions, expectedVersion, force); displaySlots(slots); } }); }
@Test public void testUpgrade() throws Exception { initializeOneAgent(); UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); Request request = Request.Builder.preparePost() .setUri(coordinatorUriBuilder().appendPath("/v1/slot/assignment").addParameter("host", "apple*").build()) .setHeader(CONTENT_TYPE, APPLICATION_JSON) .setBodyGenerator(jsonBodyGenerator(upgradeVersionsCodec, upgradeVersions)) .build(); List<SlotStatusRepresentation> actual = httpClient.execute(request, createJsonResponseHandler(slotStatusesCodec, Status.OK.getStatusCode())); AgentStatus agentStatus = coordinator.getAgentByAgentId(agentId); SlotStatus apple1Status = agentStatus.getSlotStatus(apple1SotId); SlotStatus apple2Status = agentStatus.getSlotStatus(apple2SlotId); SlotStatus bananaStatus = agentStatus.getSlotStatus(bananaSlotId); List<SlotStatusRepresentation> expected = ImmutableList.of( slotStatusRepresentationFactory.create(apple1Status), slotStatusRepresentationFactory.create(apple2Status)); assertEqualsNoOrder(actual, expected); assertEquals(apple1Status.getState(), STOPPED); assertEquals(apple2Status.getState(), STOPPED); assertEquals(bananaStatus.getState(), STOPPED); assertEquals(apple1Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(apple2Status.getAssignment(), upgradeVersions.upgradeAssignment(MOCK_REPO, APPLE_ASSIGNMENT)); assertEquals(bananaStatus.getAssignment(), BANANA_ASSIGNMENT); }
@Test public void testUpgradeBinary() { testUpgrade(new UpgradeVersions("2.0", null)); }
@Test public void testUpgrade() throws Exception { initializeOneAgent(); UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "@2.0"); Request request = Request.Builder.preparePost() .setUri(coordinatorUriBuilder().appendPath("/v1/slot/assignment").addParameter("binary", "*:apple:*").build()) .setHeader(CONTENT_TYPE, APPLICATION_JSON) .setBodyGenerator(jsonBodyGenerator(upgradeVersionsCodec, upgradeVersions)) .build(); List<SlotStatusRepresentation> actual = httpClient.execute(request, createJsonResponseHandler(slotStatusesCodec, Status.OK.getStatusCode())); List<SlotStatusRepresentation> expected = ImmutableList.of( slotStatusRepresentationFactory.create(appleSlot1.status().changeInstanceId(agentInstanceId)), slotStatusRepresentationFactory.create(appleSlot2.status().changeInstanceId(agentInstanceId))); assertEqualsNoOrder(actual, expected); assertEquals(appleSlot1.status().getState(), STOPPED); assertEquals(appleSlot2.status().getState(), STOPPED); assertEquals(bananaSlot.status().getState(), STOPPED); assertEquals(appleSlot1.status().getAssignment(), upgradeVersions.upgradeAssignment(repository, APPLE_ASSIGNMENT)); assertEquals(appleSlot2.status().getAssignment(), upgradeVersions.upgradeAssignment(repository, APPLE_ASSIGNMENT)); }
@Test public void testUpgradeConfig() { testUpgrade(new UpgradeVersions(null, "2.0")); }
@Test public void testUpgradeBoth() { testUpgrade(new UpgradeVersions("2.0", "2,0")); }
@Test public void testUpgradeBoth() { testUpgrade(new UpgradeVersions("2.0", "2,0")); }
@Test public void testUpgradeBinary() { testUpgrade(new UpgradeVersions("2.0", null)); }
@Test public void testUpgradeConfig() { testUpgrade(new UpgradeVersions(null, "2.0")); }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".* single binary.*food.fruit:apple:1.0, food.fruit:banana:2.0-SNAPSHOT") public void testUpgradeDifferentBinaries() { UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?state=stopped"); resource.upgrade(upgradeVersions, uriInfo, null, false); }
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = ".* single binary.*food.fruit:apple:1.0, food.fruit:banana:2.0-SNAPSHOT") public void testUpgradeDifferentBinaries() { UpgradeVersions upgradeVersions = new UpgradeVersions("2.0", "2.0"); UriInfo uriInfo = MockUriInfo.from("http://localhost/v1/slot/assignment?state=stopped"); resource.upgrade(upgradeVersions, uriInfo, null, false); }