| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF 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 |
| * <p> |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * <p> |
| * 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.apache.drill.exec.client; |
| |
| import org.apache.drill.common.config.DrillConfig; |
| import org.apache.drill.exec.DrillSystemTestBase; |
| import org.apache.drill.exec.ExecConstants; |
| import org.apache.drill.exec.proto.CoordinationProtos; |
| import org.apache.drill.exec.rpc.InvalidConnectionInfoException; |
| import org.junit.Test; |
| import java.util.List; |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.fail; |
| |
| |
| /** |
| * The unit test case will read a physical plan in json format. The physical plan contains a "trace" operator, |
| * which will produce a dump file. The dump file will be input into DumpCat to test query mode and batch mode. |
| */ |
| |
| public class DrillClientTest extends DrillSystemTestBase { |
| |
| private final DrillConfig config = DrillConfig.create(); |
| |
| @Test |
| public void testParseAndVerifyEndpointsSingleDrillbitIp() throws Exception { |
| |
| // Test with single drillbit ip |
| final String drillBitConnection = "10.10.100.161"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| final CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpointsList.size(), 1); |
| assertEquals(endpoint.getAddress(), drillBitConnection); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsSingleDrillbitIpPort() throws Exception { |
| |
| // Test with single drillbit ip:port |
| final String drillBitConnection = "10.10.100.161:5000"; |
| final String[] ipAndPort = drillBitConnection.split(":"); |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| assertEquals(endpointsList.size(), 1); |
| |
| final CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpoint.getAddress(), ipAndPort[0]); |
| assertEquals(endpoint.getUserPort(), Integer.parseInt(ipAndPort[1])); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsMultipleDrillbitIp() throws Exception { |
| |
| // Test with multiple drillbit ip |
| final String drillBitConnection = "10.10.100.161,10.10.100.162"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| assertEquals(endpointsList.size(), 2); |
| |
| CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| |
| endpoint = endpointsList.get(1); |
| assertEquals(endpoint.getAddress(), "10.10.100.162"); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsMultipleDrillbitIpPort() throws Exception { |
| |
| // Test with multiple drillbit ip:port |
| final String drillBitConnection = "10.10.100.161:5000,10.10.100.162:5000"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| assertEquals(endpointsList.size(), 2); |
| |
| CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), 5000); |
| |
| endpoint = endpointsList.get(1); |
| assertEquals(endpoint.getAddress(), "10.10.100.162"); |
| assertEquals(endpoint.getUserPort(), 5000); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsMultipleDrillbitIpPortIp() throws Exception { |
| |
| // Test with multiple drillbit with mix of ip:port and ip |
| final String drillBitConnection = "10.10.100.161:5000,10.10.100.162"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| assertEquals(endpointsList.size(), 2); |
| |
| CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), 5000); |
| |
| endpoint = endpointsList.get(1); |
| assertEquals(endpoint.getAddress(), "10.10.100.162"); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsEmptyString() throws Exception { |
| |
| // Test with empty string |
| final String drillBitConnection = ""; |
| try { |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsOnlyPortDelim() throws Exception{ |
| // Test to check when connection string only has delimiter |
| final String drillBitConnection = ":"; |
| |
| try { |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsWithOnlyPort() throws Exception{ |
| // Test to check when connection string has port with no ip |
| final String drillBitConnection = ":5000"; |
| |
| try { |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsWithMultiplePort() throws Exception{ |
| // Test to check when connection string has multiple port with one ip |
| final String drillBitConnection = "10.10.100.161:5000:6000"; |
| |
| try { |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsIpWithDelim() throws Exception{ |
| // Test to check when connection string has ip with delimiter |
| final String drillBitConnection = "10.10.100.161:"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| final CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpointsList.size(), 1); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsIpWithEmptyPort() throws Exception{ |
| // Test to check when connection string has ip with delimiter |
| final String drillBitConnection = "10.10.100.161: "; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| final CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpointsList.size(), 1); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), config.getInt(ExecConstants.INITIAL_USER_PORT)); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsIpWithSpaces() throws Exception{ |
| // Test to check when connection string has spaces in between |
| final String drillBitConnection = "10.10.100.161 : 5000, 10.10.100.162:6000 "; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| |
| CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpointsList.size(), 2); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), 5000); |
| |
| endpoint = endpointsList.get(1); |
| assertEquals(endpoint.getAddress(), "10.10.100.162"); |
| assertEquals(endpoint.getUserPort(), 6000); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsStringWithSpaces() throws Exception{ |
| // Test to check when connection string has ip with delimiter |
| final String drillBitConnection = "10.10.100.161 : 5000"; |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| final CoordinationProtos.DrillbitEndpoint endpoint = endpointsList.get(0); |
| assertEquals(endpointsList.size(), 1); |
| assertEquals(endpoint.getAddress(), "10.10.100.161"); |
| assertEquals(endpoint.getUserPort(), 5000); |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsNonNumericPort() throws Exception{ |
| // Test to check when connection string has non-numeric port |
| final String drillBitConnection = "10.10.100.161:5ab0"; |
| |
| try{ |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| |
| @Test |
| public void testParseAndVerifyEndpointsOnlyDelim() throws Exception{ |
| // Test to check when connection string has only delimiter coma |
| final String drillBitConnection = " , "; |
| |
| try{ |
| final List<CoordinationProtos.DrillbitEndpoint> endpointsList = DrillClient.parseAndVerifyEndpoints |
| (drillBitConnection, config.getString(ExecConstants.INITIAL_USER_PORT)); |
| fail(); |
| } catch (InvalidConnectionInfoException e) { |
| System.out.println(e.getMessage()); |
| } |
| } |
| } |