Skip to content

Commit

Permalink
Implements DefaultServiceInstance.getScheme().
Browse files Browse the repository at this point in the history
This fixes the problem, that a https URI could not be overriden in Unit tests with http (avoiding certificate problems on the build server)
  • Loading branch information
dagerber authored and spencergibb committed Mar 16, 2021
1 parent 9551cfb commit 4269bb3
Show file tree
Hide file tree
Showing 3 changed files with 115 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2021 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -110,7 +110,7 @@ public DefaultServiceInstance() {
* @return URI of the form (secure)?https:http + "host:port".
*/
public static URI getUri(ServiceInstance instance) {
String scheme = (instance.isSecure()) ? "https" : "http";
String scheme = instance.getScheme();
String uri = String.format("%s://%s:%s", scheme, instance.getHost(),
instance.getPort());
return URI.create(uri);
Expand Down Expand Up @@ -206,4 +206,9 @@ public int hashCode() {
return Objects.hash(instanceId, serviceId, host, port, secure, metadata);
}

@Override
public String getScheme() {
return isSecure() ? "https" : "http";
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,14 @@ public void testDiscoveryClientShouldResolveSimpleValues() {
then(s1.getPort()).isEqualTo(8080);
then(s1.getUri()).isEqualTo(URI.create("http://s11:8080"));
then(s1.isSecure()).isEqualTo(false);
then(s1.getScheme()).isEqualTo("http");

ServiceInstance s2 = this.discoveryClient.getInstances("service1").get(1);
then(s2.getHost()).isEqualTo("s12");
then(s2.getPort()).isEqualTo(8443);
then(s2.getUri()).isEqualTo(URI.create("https://s12:8443"));
then(s2.isSecure()).isEqualTo(true);
then(s2.getScheme()).isEqualTo("https");
}

@Test
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
/*
* Copyright 2012-2021 the original author or authors.
*
* 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
*
* https://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 org.springframework.cloud.client.discovery.simple.reactive;

import java.net.URI;

import org.junit.Test;
import org.junit.runner.RunWith;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.context.junit4.SpringRunner;

import static org.assertj.core.api.BDDAssertions.then;

/**
* Tests for mapping properties to instances in {@link SimpleReactiveDiscoveryClient}
*
* @author Daniel Gerber
*/
@RunWith(SpringRunner.class)
@SpringBootTest(properties = { "spring.application.name=service0",
"spring.cloud.discovery.client.simple.instances.service1[0].uri=http://s11:8080",
"spring.cloud.discovery.client.simple.instances.service1[1].uri=https://s12:8443",
"spring.cloud.discovery.client.simple.instances.service2[0].uri=https://s21:8080",
"spring.cloud.discovery.client.simple.instances.service2[1].uri=https://s22:443" })
public class SimpleReactiveDiscoveryClientPropertiesMappingTests {

@Autowired
private SimpleReactiveDiscoveryProperties props;

@Autowired
private SimpleReactiveDiscoveryClient discoveryClient;

@Test
public void propsShouldGetCleanlyMapped() {
then(props.getInstances().size()).isEqualTo(2);
then(props.getInstances().get("service1").size()).isEqualTo(2);
then(props.getInstances().get("service1").get(0).getHost()).isEqualTo("s11");
then(props.getInstances().get("service1").get(0).getPort()).isEqualTo(8080);
then(props.getInstances().get("service1").get(0).getUri()).isEqualTo(URI.create("http://s11:8080"));
then(props.getInstances().get("service1").get(0).isSecure()).isEqualTo(false);

then(props.getInstances().get("service2").size()).isEqualTo(2);
then(props.getInstances().get("service2").get(0).getHost()).isEqualTo("s21");
then(props.getInstances().get("service2").get(0).getPort()).isEqualTo(8080);
then(props.getInstances().get("service2").get(0).getUri()).isEqualTo(URI.create("https://s21:8080"));
then(props.getInstances().get("service2").get(0).isSecure()).isEqualTo(true);
}

@Test
public void testDiscoveryClientShouldResolveSimpleValues() {
then(discoveryClient.description()).isEqualTo("Simple Reactive Discovery Client");

Flux<ServiceInstance> services = discoveryClient.getInstances("service1");
StepVerifier.create(services)
.expectNextMatches(inst -> inst.getHost().equals("s11") && inst.getPort() == 8080
&& inst.getUri().toString().equals("http://s11:8080") && !inst.isSecure()
&& inst.getScheme().equals("http"))
.expectNextMatches(inst -> inst.getHost().equals("s12") && inst.getPort() == 8443
&& inst.getUri().toString().equals("https://s12:8443") && inst.isSecure()
&& inst.getScheme().equals("https"))
.expectComplete().verify();
}

@Test
public void testGetANonExistentServiceShouldReturnAnEmptyList() {
then(discoveryClient.description()).isEqualTo("Simple Reactive Discovery Client");

Flux<ServiceInstance> services = discoveryClient.getInstances("nonexistent");

StepVerifier.create(services).expectNextCount(0).expectComplete().verify();
}

@Configuration(proxyBeanMethods = false)
@EnableAutoConfiguration
public static class SampleConfig {

}

}

0 comments on commit 4269bb3

Please sign in to comment.