Skip to content

Commit

Permalink
fix: Fix git trigger issue caused by a misconfig of the object mapper…
Browse files Browse the repository at this point in the history
… when creating the echo retrofit service (#1756) (#1758)

* fix: Fix git trigger issue caused by a misconfig of the object mapper when creating the echo retrofit service

Because of the misconfiguration echo was failing with GitEventHandler  : Github Digest mismatch! Pipeline NOT triggered

Closes spinnaker/spinnaker#6886

* fix: Fix git trigger issue caused by a misconfig of the object mapper when creating the echo retrofit service

Because of the misconfiguration echo was failing with GitEventHandler  : Github Digest mismatch! Pipeline NOT triggered

Closes spinnaker/spinnaker#6886

* test: Add test verifying that the payload being sent to Echo is not ordered alphabetically

Closes spinnaker/spinnaker#6886

* fix: Apply spotless checks to the test

* fix: Fix failing test

(cherry picked from commit 4aae98d)

Co-authored-by: ovidiupopa07 <[email protected]>
  • Loading branch information
mergify[bot] and ovidiupopa07 committed Feb 1, 2024
1 parent e01e687 commit 7e11a38
Show file tree
Hide file tree
Showing 3 changed files with 153 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@ import com.netflix.spectator.api.Registry
import com.netflix.spinnaker.config.DefaultServiceEndpoint
import com.netflix.spinnaker.config.OkHttp3ClientConfiguration
import com.netflix.spinnaker.config.PluginsAutoConfiguration
import com.netflix.spinnaker.config.ServiceEndpoint
import com.netflix.spinnaker.fiat.shared.FiatClientConfigurationProperties
import com.netflix.spinnaker.fiat.shared.FiatPermissionEvaluator
import com.netflix.spinnaker.fiat.shared.FiatService
Expand Down Expand Up @@ -320,7 +319,8 @@ class GateConfig extends RedisHttpSessionConfiguration {
private <T> T buildService(String serviceName, Class<T> type, Endpoint endpoint) {
ObjectMapper objectMapper = objectMapperBuilder.build() as ObjectMapper
if(serviceName.equals("echo")) {
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
objectMapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, false)
}
serviceClientProvider.getService(type, new DefaultServiceEndpoint(serviceName, endpoint.url), objectMapper)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/*
* Copyright 2024 Harness, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.netflix.spinnaker.gate.service;

import static org.assertj.core.api.Assertions.assertThat;

import com.netflix.spinnaker.gate.Main;
import com.netflix.spinnaker.gate.services.internal.EchoService;
import com.squareup.okhttp.mockwebserver.Dispatcher;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
import com.squareup.okhttp.mockwebserver.RecordedRequest;
import groovy.util.logging.Slf4j;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.TestPropertySource;

@ActiveProfiles("echo")
@Slf4j
@DirtiesContext
@SpringBootTest(classes = {Main.class})
@TestPropertySource("/application-echo.properties")
class EchoServiceTest {

@Autowired EchoService echoService;

private static MockWebServer echoServer;
private static MockWebServer clouddriverServer;
private static MockWebServer front50Server;

@BeforeAll
static void setUp() throws IOException {
clouddriverServer = new MockWebServer();
clouddriverServer.start(7002);

Dispatcher clouddriverDispatcher =
new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
return new MockResponse().setResponseCode(200);
}
};
clouddriverServer.setDispatcher(clouddriverDispatcher);

front50Server = new MockWebServer();
front50Server.start(8081);
Dispatcher front50Dispatcher =
new Dispatcher() {
@Override
public MockResponse dispatch(RecordedRequest request) {
return new MockResponse().setResponseCode(200);
}
};
front50Server.setDispatcher(front50Dispatcher);

echoServer = new MockWebServer();
echoServer.start(8089);
}

@AfterAll
static void tearDown() throws IOException {
echoServer.shutdown();
clouddriverServer.shutdown();
front50Server.shutdown();
}

@Test
void shouldNotOrderTheKeysWhenCallingEcho() throws InterruptedException {

echoServer.enqueue(new MockResponse().setResponseCode(200));
Map<String, Object> body = new HashMap<>();
body.put("ref", "refs/heads/main");
body.put("before", "ca7376e4b730f1f2878760abaeaed6c039fc5414");
body.put("after", "c2420ce6e341ef0042f2e12591bdbe9eec29a032");
body.put("id", 105648914);

echoService.webhooks("git", "github", body);
RecordedRequest recordedRequest = echoServer.takeRequest(2, TimeUnit.SECONDS);
String requestBody = recordedRequest.getBody().readUtf8();
assertThat(requestBody)
.isEqualTo(
"{\"ref\":\"refs/heads/main\",\"before\":\"ca7376e4b730f1f2878760abaeaed6c039fc5414\",\"after\":\"c2420ce6e341ef0042f2e12591bdbe9eec29a032\",\"id\":105648914}");
}
}
44 changes: 44 additions & 0 deletions gate-web/src/test/resources/application-echo.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
#
# Copyright 2024 Harness, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http=//www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

spring.application.name=gate
services.clouddriver.baseUrl=http://localhost:7002
services.deck.baseUrl=http://localhost:9000

services.echo.enabled=true
services.echo.baseUrl=http://localhost:8089

services.fiat.enabled=false

services.fiat.baseUrl=http://localhost:8082

services.front50.baseUrl=http://localhost:8081

services.igor.enabled=false

services.kayenta.enabled=false


services.orca.baseUrl=http://localhost:8083

services.mine.enabled=false

services.swabbie.enabled=false
services.keel.enabled=false
services.keel.baseUrl=http://localhost:8087

retrofit.enabled=true
healthCheckableServices=igor

0 comments on commit 7e11a38

Please sign in to comment.