/* * Copyright 2016 LINE Corporation * * LINE Corporation licenses this file to you 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.linecorp.armeria.server; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import org.junit.Test; import com.linecorp.armeria.common.http.HttpRequest; import com.linecorp.armeria.common.http.HttpResponse; import com.linecorp.armeria.server.http.HttpService; public class ChainedVirtualHostBuilderTest { @Test public void defaultVirtualHost() { final ServerBuilder sb = new ServerBuilder(); final ChainedVirtualHostBuilder chainedVirtualHostBuilder = sb.withDefaultVirtualHost(); assertThat(chainedVirtualHostBuilder).isNotNull(); assertThat(chainedVirtualHostBuilder).isEqualTo(sb.withDefaultVirtualHost()); final Server server = sb.withDefaultVirtualHost() .serviceAt("/test", new TempService()) .and().build(); assertThat(server).isNotNull(); final VirtualHost virtualHost = server.config().defaultVirtualHost(); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("*"); assertThat(virtualHost.defaultHostname()).isNotEqualTo("*"); } @Test public void defaultVirtualHostWithImplicitStyle() { final ServerBuilder sb = new ServerBuilder(); final Server server = sb.serviceAt("/test", new TempService()).build(); assertThat(server).isNotNull(); final VirtualHost virtualHost = server.config().defaultVirtualHost(); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("*"); } @Test public void virtualHostWithHostnamepattern() { final ServerBuilder sb = new ServerBuilder(); final ChainedVirtualHostBuilder chainedVirtualHostBuilder = sb.withVirtualHost("*.foo.com"); assertThat(chainedVirtualHostBuilder).isNotNull(); final Server server = sb.withDefaultVirtualHost() .serviceAt("/test", new TempService()) .and().build(); assertThat(server).isNotNull(); final List<VirtualHost> virtualHosts = server.config().virtualHosts(); assertThat(virtualHosts).isNotNull(); assertThat(virtualHosts.size()).isEqualTo(2); final VirtualHost virtualHost = virtualHosts.get(0); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("*.foo.com"); assertThat(virtualHost.defaultHostname()).isEqualTo("foo.com"); final VirtualHost defaultVirtualHost = virtualHosts.get(1); assertThat(defaultVirtualHost).isNotNull(); assertThat(defaultVirtualHost).isEqualTo(server.config().defaultVirtualHost()); } @Test public void virtualHostWithDefaultHostnameAndHostnamepattern() { final ServerBuilder sb = new ServerBuilder(); final ChainedVirtualHostBuilder chainedVirtualHostBuilder = sb.withVirtualHost("foo", "*"); assertThat(chainedVirtualHostBuilder).isNotNull(); chainedVirtualHostBuilder.serviceAt("/test", new TempService()); final Server server = sb.build(); assertThat(server).isNotNull(); final List<VirtualHost> virtualHosts = server.config().virtualHosts(); assertThat(virtualHosts).isNotNull(); assertThat(virtualHosts.size()).isEqualTo(2); final VirtualHost virtualHost = virtualHosts.get(0); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("*"); assertThat(virtualHost.defaultHostname()).isEqualTo("foo"); final VirtualHost defaultVirtualHost = virtualHosts.get(1); assertThat(defaultVirtualHost).isNotNull(); assertThat(defaultVirtualHost).isEqualTo(server.config().defaultVirtualHost()); } @Test public void virtualHostWithCreateStyle() { final VirtualHost h = new VirtualHostBuilder("foo", "*").build(); assertThat(h.hostnamePattern()).isEqualTo("*"); assertThat(h.defaultHostname()).isEqualTo("foo"); final ServerBuilder sb = new ServerBuilder(); sb.virtualHost(h); final Server server = sb.serviceAt("/test", new TempService()).build(); assertThat(server).isNotNull(); final List<VirtualHost> virtualHosts = server.config().virtualHosts(); assertThat(virtualHosts).isNotNull(); assertThat(virtualHosts.size()).isEqualTo(2); final VirtualHost virtualHost = virtualHosts.get(0); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("*"); assertThat(virtualHost.defaultHostname()).isEqualTo("foo"); final VirtualHost defaultVirtualHost = virtualHosts.get(1); assertThat(defaultVirtualHost).isNotNull(); assertThat(defaultVirtualHost).isEqualTo(server.config().defaultVirtualHost()); } @Test public void defaultVirtalHostMixedStyle() { final ServerBuilder sb = new ServerBuilder(); sb.serviceAt("/test", new TempService()) .withDefaultVirtualHost().serviceAt("/test2", new TempService()); final Server server = sb.build(); assertThat(server).isNotNull(); final List<ServiceConfig> serviceConfigs = server.config().defaultVirtualHost().serviceConfigs(); assertThat(serviceConfigs.size()).isEqualTo(2); } @Test public void virtualHostMixedStyle() { final VirtualHost h = new VirtualHostBuilder("bar.foo.com").serviceAt("/test", new TempService()).build(); final ServerBuilder sb = new ServerBuilder(); sb.withVirtualHost("*.some.com") .serviceAt("/test2", new TempService()) .and().virtualHost(h); final Server server = sb.build(); assertThat(server).isNotNull(); final List<VirtualHost> virtualHosts = server.config().virtualHosts(); assertThat(virtualHosts.size()).isEqualTo(3); final VirtualHost virtualHost = virtualHosts.get(0); assertThat(virtualHost).isNotNull(); assertThat(virtualHost.hostnamePattern()).isEqualTo("bar.foo.com"); assertThat(virtualHost.defaultHostname()).isEqualTo("bar.foo.com"); final VirtualHost virtualHost2 = virtualHosts.get(1); assertThat(virtualHost2).isNotNull(); assertThat(virtualHost2.hostnamePattern()).isEqualTo("*.some.com"); assertThat(virtualHost2.defaultHostname()).isEqualTo("some.com"); } @Test(expected = NullPointerException.class) public void virtualHostWithNull() { final ServerBuilder sb = new ServerBuilder(); sb.withVirtualHost(null); } @Test(expected = NullPointerException.class) public void virtualHostWithNull2() { final ServerBuilder sb = new ServerBuilder(); sb.withVirtualHost(null, "foo.com"); } @Test(expected = NullPointerException.class) public void virtualHostWithNull3() { final ServerBuilder sb = new ServerBuilder(); sb.withVirtualHost(null, null); } private static class TempService implements HttpService { @Override public HttpResponse serve(ServiceRequestContext ctx, HttpRequest req) throws Exception { return null; } } }