|
27 | 27 |
|
28 | 28 | import java.security.NoSuchAlgorithmException;
|
29 | 29 | import java.util.Collections;
|
| 30 | +import java.util.HashMap; |
30 | 31 | import java.util.Iterator;
|
| 32 | +import java.util.Map; |
31 | 33 | import java.util.Optional;
|
32 | 34 | import java.util.concurrent.CompletableFuture;
|
33 | 35 | import java.util.concurrent.CompletionStage;
|
|
43 | 45 |
|
44 | 46 | import org.glassfish.jersey.internal.ServiceFinder;
|
45 | 47 | import org.glassfish.jersey.internal.ServiceFinder.ServiceIteratorProvider;
|
| 48 | +import org.glassfish.jersey.internal.guava.Iterators; |
46 | 49 | import org.glassfish.jersey.server.ApplicationHandler;
|
47 | 50 | import org.glassfish.jersey.server.ResourceConfig;
|
48 | 51 | import org.glassfish.jersey.server.ServerProperties;
|
| 52 | +import org.glassfish.jersey.server.spi.Configurator; |
49 | 53 | import org.glassfish.jersey.server.spi.Container;
|
50 | 54 | import org.glassfish.jersey.server.spi.Server;
|
51 | 55 | import org.glassfish.jersey.server.spi.ServerProvider;
|
@@ -228,6 +232,61 @@ public final void shouldBuildCustomConfigurationFromPropertiesProvider() {
|
228 | 232 | assertThat(configuration.property(ServerProperties.AUTO_START), is(FALSE));
|
229 | 233 | }
|
230 | 234 |
|
| 235 | + @Test |
| 236 | + public final void shouldBuildCustomConfigurationFromExternalConfiguration() { |
| 237 | + // given |
| 238 | + final JAXRS.Configuration.Builder configurationBuilder = new RuntimeDelegateImpl().createConfigurationBuilder(); |
| 239 | + final SSLContext mockSslContext = new SSLContext(null, null, null) { |
| 240 | + }; |
| 241 | + final Class<Server> mockServerClass = Server.class; |
| 242 | + final Map<String, Object> externalConfiguration = new HashMap<>(); |
| 243 | + externalConfiguration.put(JAXRS.Configuration.PROTOCOL, "HTTPS"); |
| 244 | + externalConfiguration.put(JAXRS.Configuration.HOST, "hostname"); |
| 245 | + externalConfiguration.put(JAXRS.Configuration.PORT, 8080); |
| 246 | + externalConfiguration.put(JAXRS.Configuration.ROOT_PATH, "path"); |
| 247 | + externalConfiguration.put(JAXRS.Configuration.SSL_CLIENT_AUTHENTICATION, JAXRS.Configuration.SSLClientAuthentication.OPTIONAL); |
| 248 | + externalConfiguration.put(JAXRS.Configuration.SSL_CONTEXT, mockSslContext); |
| 249 | + externalConfiguration.put(ServerProperties.HTTP_SERVER_CLASS, mockServerClass); |
| 250 | + externalConfiguration.put(ServerProperties.AUTO_START, FALSE); |
| 251 | + final Configurator mockConfigurator = new Configurator() { |
| 252 | + @SuppressWarnings("unchecked") |
| 253 | + @Override |
| 254 | + public final void configure(final JAXRS.Configuration.Builder configurationBuilder, final Object configuration) { |
| 255 | + if (configuration instanceof Map) { |
| 256 | + final Map<String, Object> valueNamePairs = (Map<String, Object>) configuration; |
| 257 | + valueNamePairs.forEach(configurationBuilder::property); |
| 258 | + } |
| 259 | + } |
| 260 | + }; |
| 261 | + ServiceFinder.setIteratorProvider(new ServiceIteratorProvider() { |
| 262 | + @Override |
| 263 | + public final <T> Iterator<T> createIterator(final Class<T> service, final String serviceName, final ClassLoader loader, |
| 264 | + final boolean ignoreOnClassNotFound) { |
| 265 | + return Iterators.singletonIterator(service.cast(mockConfigurator)); |
| 266 | + } |
| 267 | + |
| 268 | + @Override |
| 269 | + public final <T> Iterator<Class<T>> createClassIterator(final Class<T> service, final String serviceName, final ClassLoader loader, |
| 270 | + final boolean ignoreOnClassNotFound) { |
| 271 | + throw new UnsupportedOperationException(); |
| 272 | + } |
| 273 | + }); |
| 274 | + |
| 275 | + // when |
| 276 | + final JAXRS.Configuration configuration = configurationBuilder.from(externalConfiguration).build(); |
| 277 | + |
| 278 | + // then |
| 279 | + assertThat(configuration, is(notNullValue())); |
| 280 | + assertThat(configuration.protocol(), is("HTTPS")); |
| 281 | + assertThat(configuration.host(), is("hostname")); |
| 282 | + assertThat(configuration.port(), is(8080)); |
| 283 | + assertThat(configuration.rootPath(), is("path")); |
| 284 | + assertThat(configuration.sslClientAuthentication(), is(JAXRS.Configuration.SSLClientAuthentication.OPTIONAL)); |
| 285 | + assertThat(configuration.sslContext(), is(theInstance(mockSslContext))); |
| 286 | + assertThat(configuration.property(ServerProperties.HTTP_SERVER_CLASS), is(theInstance(mockServerClass))); |
| 287 | + assertThat(configuration.property(ServerProperties.AUTO_START), is(FALSE)); |
| 288 | + } |
| 289 | + |
231 | 290 | @Test
|
232 | 291 | public final void shouldBootstrapApplication() throws InterruptedException, ExecutionException, TimeoutException {
|
233 | 292 | // given
|
|
0 commit comments