diff --git a/src/control-plane-services/cloud-tasks/nvct-core/src/main/java/com/nvidia/nvct/service/icms/IcmsStubService.java b/src/control-plane-services/cloud-tasks/nvct-core/src/main/java/com/nvidia/nvct/service/icms/IcmsStubService.java index 70376b516..de4c63d00 100644 --- a/src/control-plane-services/cloud-tasks/nvct-core/src/main/java/com/nvidia/nvct/service/icms/IcmsStubService.java +++ b/src/control-plane-services/cloud-tasks/nvct-core/src/main/java/com/nvidia/nvct/service/icms/IcmsStubService.java @@ -50,7 +50,7 @@ class CreateInstancesResponse { UUID requestId; } - @PostExchange(value = "/v1/si?Action=RequestInstances", + @PostExchange(value = "/v1/si?Action=RequestInstancesForTask", accept = "application/json", contentType = "application/x-www-form-urlencoded") CreateInstancesResponse createInstance( diff --git a/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/service/icms/IcmsServiceTest.java b/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/service/icms/IcmsServiceTest.java index 2590601d9..8c918fed4 100644 --- a/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/service/icms/IcmsServiceTest.java +++ b/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/service/icms/IcmsServiceTest.java @@ -164,8 +164,7 @@ void shouldScheduleInstanceForContainerBasedTask() { // Assert assertThat(requestId).isNotNull(); List allServeEvents = MockIcmsServer.getMockIcmsServer().getAllServeEvents(); - String formUrlEncodedBody = allServeEvents.getFirst().getRequest().getBodyAsString(); - validateTaskInstancePayload(formUrlEncodedBody, task1); + validateTaskInstanceRequest(allServeEvents.getFirst(), task1); taskService.deleteTask(task1); } @@ -183,8 +182,7 @@ void shouldScheduleInstanceForHelmBasedTask() { // Assert assertThat(requestId).isNotNull(); List allServeEvents = MockIcmsServer.getMockIcmsServer().getAllServeEvents(); - String formUrlEncodedBody = allServeEvents.getFirst().getRequest().getBodyAsString(); - validateTaskInstancePayload(formUrlEncodedBody, task1); + validateTaskInstanceRequest(allServeEvents.getFirst(), task1); taskService.deleteTask(task1); } @@ -209,7 +207,11 @@ void shouldTolerateTerminateWhenIcmsWorkloadNotFound() { } @SneakyThrows - private void validateTaskInstancePayload(String formUrlEncodedBody, TaskEntity task) { + private void validateTaskInstanceRequest(ServeEvent serveEvent, TaskEntity task) { + assertThat(serveEvent.getRequest().queryParameter("Action").firstValue()) + .isEqualTo("RequestInstancesForTask"); + + String formUrlEncodedBody = serveEvent.getRequest().getBodyAsString(); Map paramMap = Arrays.stream(formUrlEncodedBody.split("&")) .map(s -> s.split("=", 2)) .collect(Collectors.toMap( diff --git a/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/util/MockIcmsServer.java b/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/util/MockIcmsServer.java index f55eb961f..6f6b46ed7 100644 --- a/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/util/MockIcmsServer.java +++ b/src/control-plane-services/cloud-tasks/nvct-core/src/test/java/com/nvidia/nvct/util/MockIcmsServer.java @@ -137,7 +137,7 @@ public static void start( mockIcmsServer = new WireMockServer(config); mockIcmsServer.stubFor(post(urlPathEqualTo("/v1/si")) .withQueryParam("Action", - new EqualToPattern("RequestInstances")) + new EqualToPattern("RequestInstancesForTask")) .willReturn(aResponse().withStatus(200) .withTransformers(instanceRequestExtension.getName()) .withHeader(CONTENT_TYPE, APPLICATION_JSON_VALUE) diff --git a/src/libraries/go/lib/pkg/icms-translate/translate/common/types_test.go b/src/libraries/go/lib/pkg/icms-translate/translate/common/types_test.go index 758a99d21..60bc30a79 100644 --- a/src/libraries/go/lib/pkg/icms-translate/translate/common/types_test.go +++ b/src/libraries/go/lib/pkg/icms-translate/translate/common/types_test.go @@ -148,6 +148,16 @@ func TestMessageAction_Normalize(t *testing.T) { input: MessageAction("RequestSparInstancesForTask"), expected: TaskCreationAction, }, + { + name: "legacy SPOT function action normalizes", + input: MessageAction("RequestSpotInstances"), + expected: FunctionCreationAction, + }, + { + name: "legacy SPOT task action normalizes", + input: MessageAction("RequestSpotInstancesForTask"), + expected: TaskCreationAction, + }, { name: "legacy RequestInstances action normalizes", input: MessageAction("RequestInstances"), @@ -236,6 +246,16 @@ func TestMessageAction_UnmarshalJSON(t *testing.T) { json: `"RequestSparInstancesForTask"`, expected: RequestICMSInstancesForTask, }, + { + name: "legacy RequestSpotInstances normalizes to RequestICMSInstances", + json: `"RequestSpotInstances"`, + expected: RequestICMSInstances, + }, + { + name: "legacy RequestSpotInstancesForTask normalizes to RequestICMSInstancesForTask", + json: `"RequestSpotInstancesForTask"`, + expected: RequestICMSInstancesForTask, + }, { name: "legacy RequestInstances normalizes to RequestICMSInstances", json: `"RequestInstances"`,