/* * Licensed to Elasticsearch under one or more contributor * license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright * ownership. Elasticsearch 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 org.elasticsearch.http.netty; import org.elasticsearch.cache.recycler.MockPageCacheRecycler; import org.elasticsearch.common.Strings; import org.elasticsearch.common.network.NetworkService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.util.MockBigArrays; import org.elasticsearch.http.netty.cors.CorsConfig; import org.elasticsearch.indices.breaker.NoneCircuitBreakerService; import org.elasticsearch.test.ESTestCase; import org.elasticsearch.threadpool.ThreadPool; import org.jboss.netty.handler.codec.http.HttpMethod; import org.junit.After; import org.junit.Before; import org.junit.Test; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import static org.elasticsearch.http.netty.NettyHttpServerTransport.SETTING_CORS_ALLOW_CREDENTIALS; import static org.elasticsearch.http.netty.NettyHttpServerTransport.SETTING_CORS_ALLOW_HEADERS; import static org.elasticsearch.http.netty.NettyHttpServerTransport.SETTING_CORS_ALLOW_METHODS; import static org.elasticsearch.http.netty.NettyHttpServerTransport.SETTING_CORS_ALLOW_ORIGIN; import static org.elasticsearch.http.netty.NettyHttpServerTransport.SETTING_CORS_ENABLED; import static org.hamcrest.Matchers.equalTo; /** * Tests for the {@link NettyHttpServerTransport} class. */ public class NettyHttpServerTransportTests extends ESTestCase { private NetworkService networkService; private ThreadPool threadPool; private MockPageCacheRecycler mockPageCacheRecycler; private MockBigArrays bigArrays; @Before public void setup() throws Exception { networkService = new NetworkService(Settings.EMPTY); threadPool = new ThreadPool("test"); mockPageCacheRecycler = new MockPageCacheRecycler(Settings.EMPTY, threadPool); bigArrays = new MockBigArrays(mockPageCacheRecycler, new NoneCircuitBreakerService()); } @After public void shutdown() throws Exception { if (threadPool != null) { threadPool.shutdownNow(); } threadPool = null; networkService = null; mockPageCacheRecycler = null; bigArrays = null; } @Test public void testCorsConfig() throws Exception { final Set<String> methods = new HashSet<>(Arrays.asList("get", "options", "post")); final Set<String> headers = new HashSet<>(Arrays.asList("Content-Type", "Content-Length")); final Settings settings = Settings.builder() .put(SETTING_CORS_ENABLED, true) .put(SETTING_CORS_ALLOW_ORIGIN, "*") .put(SETTING_CORS_ALLOW_METHODS, Strings.collectionToCommaDelimitedString(methods)) .put(SETTING_CORS_ALLOW_HEADERS, Strings.collectionToCommaDelimitedString(headers)) .put(SETTING_CORS_ALLOW_CREDENTIALS, true) .build(); final NettyHttpServerTransport transport = new NettyHttpServerTransport(settings, networkService, bigArrays); final CorsConfig corsConfig = transport.getCorsConfig(); assertThat(corsConfig.isAnyOriginSupported(), equalTo(true)); assertThat(corsConfig.allowedRequestHeaders(), equalTo(headers)); final Set<String> allowedRequestMethods = new HashSet<>(); for (HttpMethod method : corsConfig.allowedRequestMethods()) { allowedRequestMethods.add(method.getName()); } assertThat(allowedRequestMethods, equalTo(methods)); transport.close(); } @Test public void testCorsConfigDefaults() { final Set<String> headers = new HashSet<>(Arrays.asList("X-Requested-With", "Content-Type", "Content-Length")); final Set<String> methods = new HashSet<>(Arrays.asList("OPTIONS", "HEAD", "GET", "POST", "PUT", "DELETE")); final Settings settings = Settings.builder() .put(SETTING_CORS_ENABLED, true) .put(SETTING_CORS_ALLOW_ORIGIN, "*") .put(SETTING_CORS_ALLOW_CREDENTIALS, true) .build(); final NettyHttpServerTransport transport = new NettyHttpServerTransport(settings, networkService, bigArrays); final CorsConfig corsConfig = transport.getCorsConfig(); assertThat(corsConfig.isAnyOriginSupported(), equalTo(true)); assertThat(corsConfig.allowedRequestHeaders(), equalTo(headers)); final Set<String> allowedRequestMethods = new HashSet<>(); for (HttpMethod method : corsConfig.allowedRequestMethods()) { allowedRequestMethods.add(method.getName()); } assertThat(allowedRequestMethods, equalTo(methods)); transport.close(); } }