/* * 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.discovery.ec2; import org.elasticsearch.common.network.NetworkService; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.test.ESTestCase; import java.io.IOException; import java.net.InetAddress; import java.util.Collections; import static org.hamcrest.Matchers.arrayContaining; import static org.hamcrest.Matchers.containsString; /** * Test for EC2 network.host settings. */ public class Ec2NetworkTests extends ESTestCase { /** * Test for network.host: _ec2_ */ public void testNetworkHostEc2() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("local-ipv4")); } } /** * Test for network.host: _ec2:publicIp_ */ public void testNetworkHostEc2PublicIp() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:publicIp_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("public-ipv4")); } } /** * Test for network.host: _ec2:privateIp_ */ public void testNetworkHostEc2PrivateIp() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:privateIp_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("local-ipv4")); } } /** * Test for network.host: _ec2:privateIpv4_ */ public void testNetworkHostEc2PrivateIpv4() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:privateIpv4_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("local-ipv4")); } } /** * Test for network.host: _ec2:privateDns_ */ public void testNetworkHostEc2PrivateDns() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:privateDns_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("local-hostname")); } } /** * Test for network.host: _ec2:publicIpv4_ */ public void testNetworkHostEc2PublicIpv4() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:publicIpv4_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("public-ipv4")); } } /** * Test for network.host: _ec2:publicDns_ */ public void testNetworkHostEc2PublicDns() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_ec2:publicDns_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); // TODO we need to replace that with a mock. For now we check the URL we are supposed to reach. try { networkService.resolveBindHostAddresses(null); } catch (IOException e) { assertThat(e.getMessage(), containsString("public-hostname")); } } /** * Test that we don't have any regression with network host core settings such as * network.host: _local_ */ public void testNetworkHostCoreLocal() throws IOException { Settings nodeSettings = Settings.builder() .put("network.host", "_local_") .build(); NetworkService networkService = new NetworkService(nodeSettings, Collections.singletonList(new Ec2NameResolver(nodeSettings))); InetAddress[] addresses = networkService.resolveBindHostAddresses(null); assertThat(addresses, arrayContaining(networkService.resolveBindHostAddresses(new String[] { "_local_" }))); } }