blob: cca85090e21e263f4d51c876e18bba67a9b6706b [file] [log] [blame]
/**
* 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());
}
}
}