From 8ac589da0cfaeafa5cbfa83bbc33262acc2f7261 Mon Sep 17 00:00:00 2001 From: kirangodishala Date: Tue, 4 Mar 2025 01:13:55 +0530 Subject: [PATCH 1/2] test(web): add a test to demonstrate the mismatch in return types of EchoService.postEvent api stub and the actual api from echo. --- .../gate/service/PipelineServiceTest.java | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java b/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java index a3f99987a0..569d5f02b5 100644 --- a/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java +++ b/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java @@ -24,6 +24,7 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.Mockito.when; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.delete; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; import static org.springframework.test.web.servlet.setup.MockMvcBuilders.webAppContextSetup; @@ -58,6 +59,7 @@ @TestPropertySource( properties = { "spring.config.location=classpath:gate-test.yml", + "services.echo.enabled=true", "services.front50.applicationRefreshInitialDelayMs=3600000" }) public class PipelineServiceTest { @@ -67,6 +69,10 @@ public class PipelineServiceTest { static WireMockExtension wmOrca = WireMockExtension.newInstance().options(wireMockConfig().dynamicPort()).build(); + @RegisterExtension + static WireMockExtension wmEcho = + WireMockExtension.newInstance().options(wireMockConfig().dynamicPort()).build(); + @Autowired private WebApplicationContext webApplicationContext; ObjectMapper objectMapper = new ObjectMapper(); @@ -90,6 +96,8 @@ public class PipelineServiceTest { /** To prevent periodic calls to load accounts from clouddriver */ @MockBean DefaultProviderLookupService defaultProviderLookupService; + private static final String APPLICATION_NAME = "my-application"; + private static final String PIPELINE_NAME = "my-pipeline-name"; private static final String USERNAME = "some user"; private static final String ACCOUNT = "my-account"; private static final String PIPELINE_EXECUTION_ID = "my-pipeline-execution-id"; @@ -99,6 +107,8 @@ static void registerUrls(DynamicPropertyRegistry registry) { // Configure wiremock's random ports into gate System.out.println("wiremock orca url: " + wmOrca.baseUrl()); registry.add("services.orca.base-url", wmOrca::baseUrl); + System.out.println("wiremock echo url: " + wmEcho.baseUrl()); + registry.add("services.echo.base-url", wmEcho::baseUrl); } @BeforeEach @@ -143,4 +153,26 @@ void invokeDeletePipelineExecution() throws Exception { .andDo(print()) .andExpect(status().is2xxSuccessful()); } + + @Test + void invokePipelineConfigViaEcho() throws Exception { + wmEcho.stubFor(WireMock.post(urlEqualTo("/")).willReturn(aResponse().withStatus(200))); + + webAppMockMvc + .perform( + post("/pipelines/v2/" + APPLICATION_NAME + "/" + PIPELINE_NAME) + .header( + USER.getHeader(), + USERNAME) // to silence warning when X-SPINNAKER-USER is missing + .header( + ACCOUNTS.getHeader(), + ACCOUNT)) // to silence warning when X-SPINNAKER-ACCOUNTS is missing + .andDo(print()) + .andExpect(status().is5xxServerError()) + .andExpect( + status() + .reason( + "Failed to process response body: No content to map due to end-of-input\n" + + " at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 0]")); + } } From 55b1f50a8208858f18c4dcc0398cb3437a1d57d8 Mon Sep 17 00:00:00 2001 From: kirangodishala Date: Tue, 4 Mar 2025 01:20:18 +0530 Subject: [PATCH 2/2] fix(web): fix the mismatch in return types of EchoService.postEvent api stub and the actual api from echo. --- .../spinnaker/gate/services/internal/EchoService.java | 2 +- .../spinnaker/gate/service/PipelineServiceTest.java | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/gate-core/src/main/java/com/netflix/spinnaker/gate/services/internal/EchoService.java b/gate-core/src/main/java/com/netflix/spinnaker/gate/services/internal/EchoService.java index e015dfffef..c3f3d0ceb4 100644 --- a/gate-core/src/main/java/com/netflix/spinnaker/gate/services/internal/EchoService.java +++ b/gate-core/src/main/java/com/netflix/spinnaker/gate/services/internal/EchoService.java @@ -47,7 +47,7 @@ Call webhooks( Call>> getPubsubSubscriptions(); @POST("/") - Call postEvent(@Body Map event); + Call postEvent(@Body Map event); @GET("/quietPeriod") Call getQuietPeriodState(); diff --git a/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java b/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java index 569d5f02b5..6cc20260c7 100644 --- a/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java +++ b/gate-web/src/test/java/com/netflix/spinnaker/gate/service/PipelineServiceTest.java @@ -168,11 +168,6 @@ void invokePipelineConfigViaEcho() throws Exception { ACCOUNTS.getHeader(), ACCOUNT)) // to silence warning when X-SPINNAKER-ACCOUNTS is missing .andDo(print()) - .andExpect(status().is5xxServerError()) - .andExpect( - status() - .reason( - "Failed to process response body: No content to map due to end-of-input\n" - + " at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 0]")); + .andExpect(status().is2xxSuccessful()); } }