blob: f240a820e256cedae4f1ef47168a83c6e01cb19d [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
*
* 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.apache.drill.exec.store.httpd;
import org.apache.drill.categories.RowSetTests;
import org.apache.drill.common.exceptions.DrillRuntimeException;
import org.apache.drill.common.types.TypeProtos.MinorType;
import org.apache.drill.exec.physical.rowSet.RowSet;
import org.apache.drill.exec.physical.rowSet.RowSetBuilder;
import org.apache.drill.exec.record.MaterializedField;
import org.apache.drill.exec.record.metadata.SchemaBuilder;
import org.apache.drill.exec.record.metadata.TupleMetadata;
import org.apache.drill.exec.rpc.RpcException;
import org.apache.drill.test.ClusterFixture;
import org.apache.drill.test.ClusterTest;
import org.apache.drill.test.rowSet.RowSetComparison;
import org.apache.drill.test.rowSet.RowSetUtilities;
import org.joda.time.LocalDate;
import org.joda.time.LocalTime;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import java.nio.file.Paths;
import java.util.stream.Collectors;
import static org.apache.drill.test.QueryTestUtil.generateCompressedFile;
import static org.junit.Assert.assertEquals;
import static org.apache.drill.test.rowSet.RowSetUtilities.mapArray;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@Category(RowSetTests.class)
public class TestHTTPDLogReader extends ClusterTest {
@BeforeClass
public static void setup() throws Exception {
ClusterTest.startCluster(ClusterFixture.builder(dirTestWatcher));
// Needed for compressed file unit test
dirTestWatcher.copyResourceToRoot(Paths.get("httpd/"));
}
@Test
public void testDateField() throws RpcException {
String sql = "SELECT `request_receive_time` FROM cp.`httpd/hackers-access-small.httpd` LIMIT 5";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_receive_time", MinorType.TIMESTAMP)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow(1445742685000L)
.addRow(1445742686000L)
.addRow(1445742687000L)
.addRow(1445743471000L)
.addRow(1445743472000L)
.build();
RowSetUtilities.verify(expected, results);
}
@Test
public void testDateEpochField() throws RpcException {
String sql = "SELECT `request_receive_time`, `request_receive_time_epoch` FROM cp.`httpd/hackers-access-small.httpd` LIMIT 5";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_receive_time", MinorType.TIMESTAMP)
.addNullable("request_receive_time_epoch", MinorType.TIMESTAMP)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow(1445742685000L, 1445742685000L)
.addRow(1445742686000L, 1445742686000L)
.addRow(1445742687000L, 1445742687000L )
.addRow(1445743471000L, 1445743471000L)
.addRow(1445743472000L, 1445743472000L)
.build();
RowSetUtilities.verify(expected, results);
}
@Test
public void testCount() throws Exception {
String sql = "SELECT COUNT(*) FROM cp.`httpd/hackers-access-small.httpd`";
long result = client.queryBuilder().sql(sql).singletonLong();
assertEquals(10L, result);
}
@Test
public void testSerDe() throws Exception {
String sql = "SELECT COUNT(*) AS cnt FROM cp.`httpd/hackers-access-small.httpd`";
String plan = queryBuilder().sql(sql).explainJson();
long cnt = queryBuilder().physical(plan).singletonLong();
assertEquals("Counts should match",10L, cnt);
}
@Test
public void testFlattenMap() throws Exception {
String sql = "SELECT request_firstline_original_uri_query_came__from " +
"FROM table(cp.`httpd/hackers-access-small.httpd` (type => 'httpd', logFormat => '%h %l %u %t \\\"%r\\\" %s %b \\\"%{Referer}i\\\" " +
"\\\"%{User-agent}i\\\"', " +
"flattenWildcards => true)) WHERE `request_firstline_original_uri_query_came__from` IS NOT NULL";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_firstline_original_uri_query_came__from", MinorType.VARCHAR)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow("http://howto.basjes.nl/join_form")
.build();
new RowSetComparison(expected).verifyAndClearAll(results);
}
@Test
public void testLimitPushdown() throws Exception {
String sql = "SELECT * FROM cp.`httpd/hackers-access-small.httpd` LIMIT 5";
queryBuilder()
.sql(sql)
.planMatcher()
.include("Limit", "maxRecords=5")
.match();
}
@Test
public void testMapField() throws Exception {
String sql = "SELECT data.`request_firstline_original_uri_query_$`.aqb AS aqb, data.`request_firstline_original_uri_query_$`.t AS data_time " +
"FROM cp.`httpd/example1.httpd` AS data";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("aqb", MinorType.VARCHAR)
.addNullable("data_time", MinorType.VARCHAR)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow("1", "19/5/2012 23:51:27 2 -120")
.build();
new RowSetComparison(expected).verifyAndClearAll(results);
}
@Test
public void testSingleExplicitColumn() throws Exception {
String sql = "SELECT request_referer FROM cp.`httpd/hackers-access-small.httpd`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_referer", MinorType.VARCHAR)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow("http://howto.basjes.nl/")
.addRow("http://howto.basjes.nl/")
.addRow("http://howto.basjes.nl/join_form")
.addRow("http://howto.basjes.nl/")
.addRow("http://howto.basjes.nl/join_form")
.addRow("http://howto.basjes.nl/join_form")
.addRow("http://howto.basjes.nl/")
.addRow("http://howto.basjes.nl/login_form")
.addRow("http://howto.basjes.nl/")
.addRow("http://howto.basjes.nl/")
.build();
assertEquals(results.rowCount(), 10);
new RowSetComparison(expected).verifyAndClearAll(results);
}
@Test
public void testImplicitColumn() throws Exception {
String sql = "SELECT _raw FROM cp.`httpd/hackers-access-small.httpd`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("_raw", MinorType.VARCHAR)
.build();
RowSet expected = client.rowSetBuilder(expectedSchema)
.addRow("195.154.46.135 - - [25/Oct/2015:04:11:25 +0100] \"GET /linux/doing-pxe-without-dhcp-control HTTP/1.1\" 200 24323 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0\"")
.addRow("23.95.237.180 - - [25/Oct/2015:04:11:26 +0100] \"GET /join_form HTTP/1.0\" 200 11114 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0\"")
.addRow("23.95.237.180 - - [25/Oct/2015:04:11:27 +0100] \"POST /join_form HTTP/1.1\" 302 9093 \"http://howto.basjes.nl/join_form\" \"Mozilla/5.0 (Windows NT 5.1; rv:35.0) " +
"Gecko/20100101 Firefox/35.0\"")
.addRow("158.222.5.157 - - [25/Oct/2015:04:24:31 +0100] \"GET /join_form HTTP/1.0\" 200 11114 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21\"")
.addRow("158.222.5.157 - - [25/Oct/2015:04:24:32 +0100] \"POST /join_form HTTP/1.1\" 302 9093 \"http://howto.basjes.nl/join_form\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21\"")
.addRow("158.222.5.157 - - [25/Oct/2015:04:24:37 +0100] \"GET /acl_users/credentials_cookie_auth/require_login?came_from=http%3A//howto.basjes.nl/join_form HTTP/1.1\" 200 10716 \"http://howto.basjes.nl/join_form\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21\"")
.addRow("158.222.5.157 - - [25/Oct/2015:04:24:39 +0100] \"GET /login_form HTTP/1.1\" 200 10543 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21\"")
.addRow("158.222.5.157 - - [25/Oct/2015:04:24:41 +0100] \"POST /login_form HTTP/1.1\" 200 16810 \"http://howto.basjes.nl/login_form\" \"Mozilla/5.0 (Windows NT 6.3; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0 AlexaToolbar/alxf-2.21\"")
.addRow("5.39.5.5 - - [25/Oct/2015:04:32:22 +0100] \"GET /join_form HTTP/1.1\" 200 11114 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 5.1; rv:34.0) Gecko/20100101 Firefox/34.0\"")
.addRow("180.180.64.16 - - [25/Oct/2015:04:34:37 +0100] \"GET /linux/doing-pxe-without-dhcp-control HTTP/1.1\" 200 24323 \"http://howto.basjes.nl/\" \"Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0\"")
.build();
new RowSetComparison(expected).verifyAndClearAll(results);
}
@Test
public void testExplicitSomeQuery() throws Exception {
String sql = "SELECT request_referer_ref, request_receive_time_last_time, request_firstline_uri_protocol FROM cp.`httpd/hackers-access-small.httpd`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_referer_ref", MinorType.VARCHAR)
.addNullable("request_receive_time_last_time", MinorType.TIME)
.addNullable("request_firstline_uri_protocol", MinorType.VARCHAR)
.buildSchema();
RowSet expected = new RowSetBuilder(client.allocator(), expectedSchema)
.addRow(null, new LocalTime("04:11:25"), null)
.addRow(null, new LocalTime("04:11:26"), null)
.addRow(null, new LocalTime("04:11:27"), null)
.addRow(null, new LocalTime("04:24:31"), null)
.addRow(null, new LocalTime("04:24:32"), null)
.addRow(null, new LocalTime("04:24:37"), null)
.addRow(null, new LocalTime("04:24:39"), null)
.addRow(null, new LocalTime("04:24:41"), null)
.addRow(null, new LocalTime("04:32:22"), null)
.addRow(null, new LocalTime("04:34:37"), null)
.build();
new RowSetComparison(expected).verifyAndClearAll(results);
}
@Test
public void testExplicitSomeQueryWithCompressedFile() throws Exception {
generateCompressedFile("httpd/hackers-access-small.httpd", "zip", "httpd/hackers-access-small.httpd.zip" );
String sql = "SELECT request_referer_ref, request_receive_time_last_time, request_firstline_uri_protocol FROM dfs.`httpd/hackers-access-small.httpd.zip`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = new SchemaBuilder()
.addNullable("request_referer_ref", MinorType.VARCHAR)
.addNullable("request_receive_time_last_time", MinorType.TIME)
.addNullable("request_firstline_uri_protocol", MinorType.VARCHAR)
.buildSchema();
RowSet expected = new RowSetBuilder(client.allocator(), expectedSchema)
.addRow(null, new LocalTime("04:11:25"), null)
.addRow(null, new LocalTime("04:11:26"), null)
.addRow(null, new LocalTime("04:11:27"), null)
.addRow(null, new LocalTime("04:24:31"), null)
.addRow(null, new LocalTime("04:24:32"), null)
.addRow(null, new LocalTime("04:24:37"), null)
.addRow(null, new LocalTime("04:24:39"), null)
.addRow(null, new LocalTime("04:24:41"), null)
.addRow(null, new LocalTime("04:32:22"), null)
.addRow(null, new LocalTime("04:34:37"), null)
.build();
new RowSetComparison(expected).verifyAndClearAll(results);
}
private TupleMetadata expectedAllFieldsSchema() {
return new SchemaBuilder()
.addNullable("connection_client_host", MinorType.VARCHAR)
.addNullable("connection_client_host_last", MinorType.VARCHAR)
.addNullable("connection_client_logname", MinorType.BIGINT)
.addNullable("connection_client_logname_last", MinorType.BIGINT)
.addNullable("connection_client_user", MinorType.VARCHAR)
.addNullable("connection_client_user_last", MinorType.VARCHAR)
.addNullable("request_firstline", MinorType.VARCHAR)
.addNullable("request_firstline_method", MinorType.VARCHAR)
.addNullable("request_firstline_original", MinorType.VARCHAR)
.addNullable("request_firstline_original_method", MinorType.VARCHAR)
.addNullable("request_firstline_original_protocol", MinorType.VARCHAR)
.addNullable("request_firstline_original_protocol_version", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_host", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_path", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_port", MinorType.BIGINT)
.addNullable("request_firstline_original_uri_protocol", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_query", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_ref", MinorType.VARCHAR)
.addNullable("request_firstline_original_uri_userinfo", MinorType.VARCHAR)
.addNullable("request_firstline_protocol", MinorType.VARCHAR)
.addNullable("request_firstline_protocol_version", MinorType.VARCHAR)
.addNullable("request_firstline_uri", MinorType.VARCHAR)
.addNullable("request_firstline_uri_host", MinorType.VARCHAR)
.addNullable("request_firstline_uri_path", MinorType.VARCHAR)
.addNullable("request_firstline_uri_port", MinorType.BIGINT)
.addNullable("request_firstline_uri_protocol", MinorType.VARCHAR)
.addNullable("request_firstline_uri_query", MinorType.VARCHAR)
.addNullable("request_firstline_uri_ref", MinorType.VARCHAR)
.addNullable("request_firstline_uri_userinfo", MinorType.VARCHAR)
.addNullable("request_receive_time", MinorType.TIMESTAMP)
.addNullable("request_receive_time_date", MinorType.DATE)
.addNullable("request_receive_time_date__utc", MinorType.DATE)
.addNullable("request_receive_time_day", MinorType.BIGINT)
.addNullable("request_receive_time_day__utc", MinorType.BIGINT)
.addNullable("request_receive_time_epoch", MinorType.TIMESTAMP)
.addNullable("request_receive_time_hour", MinorType.BIGINT)
.addNullable("request_receive_time_hour__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last", MinorType.TIMESTAMP)
.addNullable("request_receive_time_last_date", MinorType.DATE)
.addNullable("request_receive_time_last_date__utc", MinorType.DATE)
.addNullable("request_receive_time_last_day", MinorType.BIGINT)
.addNullable("request_receive_time_last_day__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_epoch", MinorType.TIMESTAMP)
.addNullable("request_receive_time_last_hour", MinorType.BIGINT)
.addNullable("request_receive_time_last_hour__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_microsecond", MinorType.BIGINT)
.addNullable("request_receive_time_last_microsecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_millisecond", MinorType.BIGINT)
.addNullable("request_receive_time_last_millisecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_minute", MinorType.BIGINT)
.addNullable("request_receive_time_last_minute__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_month", MinorType.BIGINT)
.addNullable("request_receive_time_last_month__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_monthname", MinorType.VARCHAR)
.addNullable("request_receive_time_last_monthname__utc", MinorType.VARCHAR)
.addNullable("request_receive_time_last_nanosecond", MinorType.BIGINT)
.addNullable("request_receive_time_last_nanosecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_second", MinorType.BIGINT)
.addNullable("request_receive_time_last_second__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_time", MinorType.TIME)
.addNullable("request_receive_time_last_time__utc", MinorType.TIME)
.addNullable("request_receive_time_last_timezone", MinorType.VARCHAR)
.addNullable("request_receive_time_last_weekofweekyear", MinorType.BIGINT)
.addNullable("request_receive_time_last_weekofweekyear__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_weekyear", MinorType.BIGINT)
.addNullable("request_receive_time_last_weekyear__utc", MinorType.BIGINT)
.addNullable("request_receive_time_last_year", MinorType.BIGINT)
.addNullable("request_receive_time_last_year__utc", MinorType.BIGINT)
.addNullable("request_receive_time_microsecond", MinorType.BIGINT)
.addNullable("request_receive_time_microsecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_millisecond", MinorType.BIGINT)
.addNullable("request_receive_time_millisecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_minute", MinorType.BIGINT)
.addNullable("request_receive_time_minute__utc", MinorType.BIGINT)
.addNullable("request_receive_time_month", MinorType.BIGINT)
.addNullable("request_receive_time_month__utc", MinorType.BIGINT)
.addNullable("request_receive_time_monthname", MinorType.VARCHAR)
.addNullable("request_receive_time_monthname__utc", MinorType.VARCHAR)
.addNullable("request_receive_time_nanosecond", MinorType.BIGINT)
.addNullable("request_receive_time_nanosecond__utc", MinorType.BIGINT)
.addNullable("request_receive_time_second", MinorType.BIGINT)
.addNullable("request_receive_time_second__utc", MinorType.BIGINT)
.addNullable("request_receive_time_time", MinorType.TIME)
.addNullable("request_receive_time_time__utc", MinorType.TIME)
.addNullable("request_receive_time_timezone", MinorType.VARCHAR)
.addNullable("request_receive_time_weekofweekyear", MinorType.BIGINT)
.addNullable("request_receive_time_weekofweekyear__utc", MinorType.BIGINT)
.addNullable("request_receive_time_weekyear", MinorType.BIGINT)
.addNullable("request_receive_time_weekyear__utc", MinorType.BIGINT)
.addNullable("request_receive_time_year", MinorType.BIGINT)
.addNullable("request_receive_time_year__utc", MinorType.BIGINT)
.addNullable("request_referer", MinorType.VARCHAR)
.addNullable("request_referer_host", MinorType.VARCHAR)
.addNullable("request_referer_last", MinorType.VARCHAR)
.addNullable("request_referer_last_host", MinorType.VARCHAR)
.addNullable("request_referer_last_path", MinorType.VARCHAR)
.addNullable("request_referer_last_port", MinorType.BIGINT)
.addNullable("request_referer_last_protocol", MinorType.VARCHAR)
.addNullable("request_referer_last_query", MinorType.VARCHAR)
.addNullable("request_referer_last_ref", MinorType.VARCHAR)
.addNullable("request_referer_last_userinfo", MinorType.VARCHAR)
.addNullable("request_referer_path", MinorType.VARCHAR)
.addNullable("request_referer_port", MinorType.BIGINT)
.addNullable("request_referer_protocol", MinorType.VARCHAR)
.addNullable("request_referer_query", MinorType.VARCHAR)
.addNullable("request_referer_ref", MinorType.VARCHAR)
.addNullable("request_referer_userinfo", MinorType.VARCHAR)
.addNullable("request_status_last", MinorType.VARCHAR)
.addNullable("request_user-agent", MinorType.VARCHAR)
.addNullable("request_user-agent_last", MinorType.VARCHAR)
.addNullable("response_body_bytes", MinorType.BIGINT)
.addNullable("response_body_bytes_last", MinorType.BIGINT)
.addNullable("response_body_bytesclf", MinorType.BIGINT)
.add("request_firstline_original_uri_query_$", MinorType.MAP)
.add("request_firstline_uri_query_$", MinorType.MAP)
.add("request_referer_last_query_$", MinorType.MAP)
.add("request_referer_query_$", MinorType.MAP)
.build();
}
private RowSet expectedAllFieldsRowSet(TupleMetadata expectedSchema) {
return client
.rowSetBuilder(expectedSchema)
.addRow("195.154.46.135", "195.154.46.135", null, null, null, null,
"GET /linux/doing-pxe-without-dhcp-control HTTP/1.1", "GET",
"GET /linux/doing-pxe-without-dhcp-control HTTP/1.1", "GET",
"HTTP/1.1", "1.1", "/linux/doing-pxe-without-dhcp-control", null, "/linux/doing-pxe-without-dhcp-control", null, null, null, null, null,
"HTTP/1.1", "1.1", "/linux/doing-pxe-without-dhcp-control", null, "/linux/doing-pxe-without-dhcp-control", null, null, null, null, null,
1445742685000L, new LocalDate("2015-10-25"), new LocalDate("2015-10-25"), 25, 25, 1445742685000L, 4, 3,
1445742685000L, new LocalDate("2015-10-25"), new LocalDate("2015-10-25"), 25, 25, 1445742685000L, 4, 3,
0, 0, 0, 0, 11, 11, 10, 10, "October", "October", 0, 0, 25, 25, new LocalTime("04:11:25"), new LocalTime("03:11:25"), "+01:00", 43, 43, 2015, 2015, 2015, 2015,
0, 0, 0, 0, 11, 11, 10, 10, "October", "October", 0, 0, 25, 25, new LocalTime("04:11:25"), new LocalTime("03:11:25"), "+01:00", 43, 43, 2015, 2015, 2015, 2015,
"http://howto.basjes.nl/", "howto.basjes.nl",
"http://howto.basjes.nl/", "howto.basjes.nl",
"/", null, "http", null, null, null,
"/", null, "http", null, null, null,
"200",
"Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0",
"Mozilla/5.0 (Windows NT 5.1; rv:35.0) Gecko/20100101 Firefox/35.0",
24323, 24323, 24323, mapArray(), mapArray(), mapArray(), mapArray())
.build();
}
@Test
public void testStarRowSet() throws Exception {
String sql = "SELECT * FROM cp.`httpd/hackers-access-really-small.httpd`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
TupleMetadata expectedSchema = expectedAllFieldsSchema();
RowSet expectedRowSet = expectedAllFieldsRowSet(expectedSchema);
new RowSetComparison(expectedRowSet).verifyAndClearAll(results);
}
@Test
public void testExplicitAllFields() throws Exception {
TupleMetadata expectedSchema = expectedAllFieldsSchema();
// To avoid typos we generate the SQL from the schema.
String sql = "SELECT `" +
expectedSchema
.toFieldList()
.stream()
.map(MaterializedField::getName)
.collect(Collectors.joining("`, `")) +
"` FROM cp.`httpd/hackers-access-really-small.httpd`";
RowSet results = client.queryBuilder().sql(sql).rowSet();
RowSet expectedRowSet = expectedAllFieldsRowSet(expectedSchema);
new RowSetComparison(expectedRowSet).verifyAndClearAll(results);
}
@Test
public void testInvalidFormat() throws Exception {
String sql = "SELECT * FROM cp.`httpd/dfs-bootstrap.httpd`";
try {
run(sql);
fail();
} catch (DrillRuntimeException e) {
assertTrue(e.getMessage().contains("Error reading HTTPD file "));
}
}
}