Skip to content
This repository was archived by the owner on Dec 20, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper
import com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule
import com.jakewharton.retrofit.Ok3Client
import com.netflix.spectator.api.Registry
import com.netflix.spinnaker.config.OkHttp3ClientConfiguration
import com.netflix.spinnaker.fiat.model.resources.Permissions
import com.netflix.spinnaker.igor.IgorConfigurationProperties
import com.netflix.spinnaker.igor.config.client.DefaultJenkinsOkHttpClientProvider
Expand Down Expand Up @@ -69,6 +70,11 @@ import java.util.concurrent.TimeUnit
@EnableConfigurationProperties(JenkinsProperties)
class JenkinsConfig {

@Bean
OkHttpClient okHttpClient(OkHttp3ClientConfiguration okHttpClientConfig) {
return okHttpClientConfig.create().build();
}

@Bean
@ConditionalOnMissingBean
JenkinsOkHttpClientProvider jenkinsOkHttpClientProvider(OkHttpClient okHttpClient) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
/*
* Copyright 2025 OpsMx, 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.igor.config;

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

import com.netflix.spectator.api.NoopRegistry;
import com.netflix.spectator.api.Registry;
import com.netflix.spinnaker.config.OkHttp3ClientConfiguration;
import com.netflix.spinnaker.config.OkHttpClientComponents;
import com.netflix.spinnaker.igor.IgorConfigurationProperties;
import com.netflix.spinnaker.igor.config.client.JenkinsOkHttpClientProvider;
import com.netflix.spinnaker.igor.service.BuildServices;
import com.netflix.spinnaker.okhttp.OkHttpClientConfigurationProperties;
import com.netflix.spinnaker.okhttp.Retrofit2EncodeCorrectionInterceptor;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
import io.github.resilience4j.circuitbreaker.internal.InMemoryCircuitBreakerRegistry;
import java.util.List;
import okhttp3.OkHttpClient;
import okhttp3.logging.HttpLoggingInterceptor;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.task.TaskExecutorBuilder;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
import retrofit.RestAdapter;

@SpringBootTest(
classes = {
JenkinsConfig.class,
OkHttp3ClientConfiguration.class,
OkHttpClientComponents.class,
JenkinsClientTest.TestConfiguration.class,
TaskExecutorBuilder.class
},
properties = {"jenkins.enabled=true"})
public class JenkinsClientTest {

@Autowired private JenkinsOkHttpClientProvider jenkinsOkHttpClientProvider;

@Autowired private JenkinsProperties.JenkinsHost jenkinsHost;

@Test
public void test_if_Jenkins_Retrofit1_client_Has_Retrofit2Interceptor() {
OkHttpClient client = jenkinsOkHttpClientProvider.provide(jenkinsHost);
assertThat(client.interceptors())
.noneMatch(interceptor -> interceptor instanceof Retrofit2EncodeCorrectionInterceptor);
}

static class TestConfiguration {
@Bean
public JenkinsProperties.JenkinsHost jenkinsHost() {
JenkinsProperties.JenkinsHost jenkinsHost = new JenkinsProperties.JenkinsHost();
jenkinsHost.setAddress("http://localhost:8080");
jenkinsHost.setName("jenkins-dev");
return jenkinsHost;
}

@Bean
public JenkinsProperties jenkinsProperties(JenkinsProperties.JenkinsHost jenkinsHost) {
JenkinsProperties jenkinsProperties = new JenkinsProperties();
jenkinsProperties.setMasters(List.of(jenkinsHost));
return jenkinsProperties;
}

@Bean
public BuildServices buildServices() {
return Mockito.mock(BuildServices.class);
}

@Bean
public HttpLoggingInterceptor.Level retrofitInterceptorLogLevel() {
return HttpLoggingInterceptor.Level.BODY;
}

@Primary
@Bean
public OkHttpClientConfigurationProperties okHttpClientConfigurationProperties() {
return new OkHttpClientConfigurationProperties();
}

@Bean
public IgorConfigurationProperties igorConfigurationProperties() {
return new IgorConfigurationProperties();
}

@Bean
Registry registry() {
return new NoopRegistry();
}

@Bean
CircuitBreakerRegistry circuitBreakerRegistry() {
return new InMemoryCircuitBreakerRegistry();
}

@Bean
RestAdapter.LogLevel retrofitLogLevel() {
return RestAdapter.LogLevel.BASIC;
}
}
}