blob: aaba212a6ae1e10e88dd1af2fdbfa6b3e6792acd [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.
*/
#include <vector>
#include <string>
#include "gtest/gtest.h"
#include "lib/command.h"
#include "lib/sql_util.h"
#include "lib/string_util.h"
#include "lib/hdfs_config.h"
#include "test_hawq_register.h"
using std::vector;
using std::string;
using hawq::test::SQLUtility;
using hawq::test::Command;
using hawq::test::HdfsConfig;
TEST_F(TestHawqRegister, TestUsage1ExpectSuccessDifferentSchema) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string filePath = rootPath + "/ManagementTool/data/parquet200/dat.paq";
util.execute("drop schema if exists xz;");
util.execute("create schema xz;");
util.execute("drop table if exists t;");
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1esdsusage1dat.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
std::string policy = "DISTRIBUTED RANDOMLY";;
auto sql1 = hawq::test::stringFormat("CREATE TABLE t(i int) with (appendonly=true, orientation=parquet) %s;", policy.c_str());
auto sql2 = hawq::test::stringFormat("CREATE TABLE xz.t(i int) with (appendonly=true, orientation=parquet) %s;", policy.c_str());
util.execute(sql1); util.execute(sql2);
util.query("SELECT * from t", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1esdsusage1dat.paq testhawqregister_testusage1expectsuccessdifferentschema.t", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from t;", 200);
util.execute("insert into t values(201);");
util.query("select * from t;", 201);
util.execute("drop table xz.t;");
util.execute("drop table t;");
util.execute("drop schema xz;");
}
TEST_F(TestHawqRegister, TestUsage1ExpectSuccess) {
// Register file/folder into HAWQ by specific file/folder name
SQLUtility util;
string rootPath(util.getTestRootPath());
string filePath = rootPath + "/ManagementTool/data/parquet200/dat.paq";
string folderPath = rootPath + "/ManagementTool/data/parquet200sum/";
vector<string> ddl_orientation_matrix = {"parquet"};
vector<string> distribution_policy_matrix = {"", "DISTRIBUTED RANDOMLY"};
vector<string> folder_matrix = {"/usage1tmp/", "/usage1tmp"};
for(int i = 0; i < ddl_orientation_matrix.size() * distribution_policy_matrix.size() * 2 + ddl_orientation_matrix.size() * distribution_policy_matrix.size() * folder_matrix.size(); ++i) {
util.execute(hawq::test::stringFormat("drop table if exists t_%s;", std::to_string(i).c_str()));
}
auto register_lambda = [&] () {
int suffix = 0;
// hawq register -d hawq_feature_test -f hdfs://localhost:8020/usage1dat.paq t_#
for(auto & ddl : ddl_orientation_matrix) {
for(auto & policy : distribution_policy_matrix) {
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1esusage1dat.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
auto sql = hawq::test::stringFormat("CREATE TABLE t_%s(i int) with (appendonly=true, orientation=%s) %s;", std::to_string(suffix).c_str(), ddl.c_str(), policy.c_str());
util.execute(sql); util.query(hawq::test::stringFormat("SELECT * from t_%s", std::to_string(suffix).c_str()), 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1esusage1dat.paq testhawqregister_testusage1expectsuccess.t_%s", HAWQ_DB, getHdfsLocation().c_str(), std::to_string(suffix).c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 200);
util.execute(hawq::test::stringFormat("insert into t_%s values(201);", std::to_string(suffix).c_str()));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 201);
suffix ++;
}
}
// hawq register -d hawq_feature_test -f hdfs://localhost:8020/usage1dat.paq -e eof t_#
for(auto & ddl : ddl_orientation_matrix) {
for(auto & policy : distribution_policy_matrix) {
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1esusage1dat.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
auto sql = hawq::test::stringFormat("CREATE TABLE t_%s(i int) with (appendonly=true, orientation=%s) %s;", std::to_string(suffix).c_str(), ddl.c_str(), policy.c_str());
util.execute(sql); util.query(hawq::test::stringFormat("SELECT * from t_%s", std::to_string(suffix).c_str()), 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1esusage1dat.paq -e 596 testhawqregister_testusage1expectsuccess.t_%s", HAWQ_DB, getHdfsLocation().c_str(), std::to_string(suffix).c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 100);
util.execute(hawq::test::stringFormat("insert into t_%s values(101);", std::to_string(suffix).c_str()));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 101);
suffix ++;
}
}
// hawq register -d hawq_feature_test -f hdfs://localhost:8020/usage1tmp/ t_#
// hawq register -d hawq_feature_test -f hdfs://localhost:8020/usage1tmp t_#
for(auto & ddl : ddl_orientation_matrix) {
for(auto & policy : distribution_policy_matrix) {
for(auto & folder : folder_matrix) {
auto cmd = hawq::test::stringFormat("hdfs dfs -mkdir -p %s/usage1tmp/", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s/*.paq %s/usage1tmp/", folderPath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
auto sql = hawq::test::stringFormat("CREATE TABLE t_%s(i int) with (appendonly=true, orientation=%s) %s;", std::to_string(suffix).c_str(), ddl.c_str(), policy.c_str());
util.execute(sql); util.query(hawq::test::stringFormat("SELECT * from t_%s", std::to_string(suffix).c_str()), 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s%s testhawqregister_testusage1expectsuccess.t_%s", HAWQ_DB, getHdfsLocation().c_str(), folder.c_str(), std::to_string(suffix).c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 200);
util.execute(hawq::test::stringFormat("insert into t_%s values(201);", std::to_string(suffix).c_str()));
util.query(hawq::test::stringFormat("select * from t_%s;", std::to_string(suffix).c_str()), 201);
suffix ++;
}
}
}
}; // register_lambda
auto gc_lambda = [&] () {
auto sql = hawq::test::stringFormat("hdfs dfs -rm -r %s/usage1tmp/", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(sql));
for(int i = 0; i < ddl_orientation_matrix.size() * distribution_policy_matrix.size() * 2 + ddl_orientation_matrix.size() * distribution_policy_matrix.size() * folder_matrix.size(); ++i) {
util.execute(hawq::test::stringFormat("drop table t_%s;", std::to_string(i).c_str()));
}
};
register_lambda();
gc_lambda();
}
TEST_F(TestHawqRegister, TestUsage1SingleHawqFile) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1shfhawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1shfhawq_register_hawq.paq testhawqregister_testusage1singlehawqfile.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 3);
util.execute("insert into hawqregister values(1);");
util.query("select * from hawqregister;", 4);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1SingleHiveFile) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hive.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1shfhawq_register_hive.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1shfhawq_register_hive.paq testhawqregister_testusage1singlehivefile.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 1);
util.execute("insert into hawqregister values(1);");
util.query("select * from hawqregister;", 2);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestDataTypes) {
SQLUtility util;
string rootPath(util.getTestRootPath());
/* This parquet file is generate by HIVE, using the table created by */
/* 'create table parquet(a boolean, b tinyint, c smallint, d int, e bigint, f date, g float, h double, i string, j binary, k char(10), l varchar(10)) stored as parquet;' */
string relativePath("/ManagementTool/test_hawq_register_data_types.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tdthawq_register_data_types.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(a bool, b int2, c int2, d int4, e int8, f date, g float4, h float8, i varchar, j bytea, k char, l varchar) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tdthawq_register_data_types.paq testhawqregister_testdatatypes.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 1);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestAllNULL) {
SQLUtility util;
string rootPath(util.getTestRootPath());
/* This parquet file is generate by HIVE, using the table created by */
/* 'create table parquet(a boolean, b tinyint, c smallint, d int, e bigint, f date, g float, h double, i string, j binary, k char(10), l varchar(10)) stored as parquet;' */
/* with all the values set to NULL */
string relativePath("/ManagementTool/test_hawq_register_null.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tanhawq_register_data_types.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(a bool, b int2, c int2, d int4, e int8, f date, g float4, h float8, i varchar, j bytea, k char, l varchar) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tanhawq_register_data_types.paq testhawqregister_testallnull.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 1);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestFiles) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath1 = rootPath + relativePath;
relativePath = "/ManagementTool/test_hawq_register_hive.paq";
string filePath2 = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -mkdir -p %s/hawq_register_test/t", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/hawq1.paq", filePath1.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/hawq2.paq", filePath1.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/t/hawq.paq", filePath1.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/hive1.paq", filePath2.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/hive2.paq", filePath2.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test/t/hive.paq", filePath2.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/hawq_register_test testhawqregister_testfiles.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 12);
util.execute("insert into hawqregister values(1);");
util.query("select * from hawqregister;", 13);
cmd = hawq::test::stringFormat("hadoop fs -rm -r %s/hawq_register_test", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1NotParquetFile) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_not_paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/hawq_register_test_not_paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/hawq_register_test_not_paq testhawqregister_testusage1notparquetfile.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hadoop fs -rm %s/hawq_register_test_not_paq", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1NotParquetTable) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
/* register a parquet file to a row random table, should fail */
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1npthawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1npthawq_register_hawq.paq testhawqregister_testusage1notparquettable.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
util.execute("drop table hawqregister;");
/* register a parquet file to a row hash table, should fail */
util.execute("create table hawqregister(i int) distributed by (i);");
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1npthawq_register_hawq.paq testhawqregister_testusage1notparquettable.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
util.execute("drop table hawqregister;");
/* register a parquet file to a parquet hash table, should fail */
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet) distributed by (i);");
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1npthawq_register_hawq.paq testhawqregister_testusage1notparquettable.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
util.execute("drop table hawqregister;");
cmd = hawq::test::stringFormat("hadoop fs -rm %s/tu1npthawq_register_hawq.paq", getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
}
TEST_F(TestHawqRegister, TestUsage1FileNotExist) {
SQLUtility util;
util.execute("create table hawqregister(i int);");
util.query("select * from hawqregister;", 0);
auto cmd = hawq::test::stringFormat("hawq register -d %s -f %shawq_register_file_not_exist testhawqregister_testusage1notparquettable.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1NoTable) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1nthawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
/* register a parquet file to a table not exist, should fail */
cmd = hawq::test::stringFormat("hawq register -d %s -f %s testhawqregister_testusage1notable.hawqregister", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
}
TEST_F(TestHawqRegister, TestUsage1NotHDFSPath) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
/* register a non-hdfs parquet file, should failed */
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
auto cmd = hawq::test::stringFormat("hawq register -d %s -f %s testhawqregister_testusage1nothdfspath.hawqregister", HAWQ_DB, filePath.c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1EofSuccess) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
/* register a parquet file with eof=0, should success */
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1eshawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1eshawq_register_hawq.paq testhawqregister_testusage1eofsuccess.hawqregister -e 0", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
/* register a parquet file with eof=filesize, should success */
int size = getFileSize(filePath.c_str());
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1eshawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1eshawq_register_hawq.paq testhawqregister_testusage1eofsuccess.hawqregister -e %d", HAWQ_DB, getHdfsLocation().c_str(), size);
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 3);
util.execute("drop table hawqregister;");
/* register a parquet file with eof<filesize, should success */
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1eshawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1eshawq_register_hawq.paq testhawqregister_testusage1eofsuccess.hawqregister -e %d", HAWQ_DB, getHdfsLocation().c_str(), size/2);
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1EofFailure) {
SQLUtility util;
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
auto cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/tu1efhawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
/* register a parquet file with eof=-1, should success */
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
util.query("select * from hawqregister;", 0);
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1efhawq_register_hawq.paq testhawqregister_testusage1eoffailure.hawqregister -e -1", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
/* register a parquet file with eof > filesize, should success */
int size = getFileSize(filePath.c_str());
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1efhawq_register_hawq.paq testhawqregister_testusage1eoffailure.hawqregister -e %d", HAWQ_DB, getHdfsLocation().c_str(), size+1);
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.query("select * from hawqregister;", 0);
/* register a parquet file with eof=float, should success */
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/tu1efhawq_register_hawq.paq testhawqregister_testusage1eoffailure.hawqregister -e 11.1", HAWQ_DB, getHdfsLocation().c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.execute("drop table hawqregister;");
}
TEST_F(TestHawqRegister, TestUsage1FolderFailure) {
SQLUtility util;
string folderName = "usage1_folder_tmp";
string folderNameNotExist = "usage1_folder_tmpNotExist";
string rootPath(util.getTestRootPath());
string relativePath("/ManagementTool/test_hawq_register_hawq.paq");
string filePath = rootPath + relativePath;
string relativePath2("/ManagementTool/files_incomplete.yml");
string filePath2 = rootPath + relativePath2;
auto cmd = hawq::test::stringFormat("hdfs dfs -mkdir %s/%s", getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
util.execute("create table hawqregister(i int) with (appendonly=true, orientation=parquet);");
/* register a empty folder, should success */
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/%s testhawqregister_testUsage1folderfailure.hawqregister", HAWQ_DB, getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
/* register a not exist folder, should fail */
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/%s testhawqregister_testUsage1folderfailure.hawqregister", HAWQ_DB, getHdfsLocation().c_str(), folderNameNotExist.c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
/* register a folder with eof, should fail */
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/%s testhawqregister_testUsage1folderfailure.hawqregister -e 100", HAWQ_DB, getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
/* register a folder containing parquet and non-parquet files, should fail */
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/%s/tu1ffhawq_register_hawq.paq", filePath.c_str(), getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hadoop fs -put -f %s %s/%s/", filePath2.c_str(), getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
cmd = hawq::test::stringFormat("hawq register -d %s -f %s/%s testhawqregister_testUsage1folderfailure.hawqregister", HAWQ_DB, getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(1, Command::getCommandStatus(cmd));
util.execute("drop table hawqregister;");
cmd = hawq::test::stringFormat("hdfs dfs -rm -r %s/%s", getHdfsLocation().c_str(), folderName.c_str());
EXPECT_EQ(0, Command::getCommandStatus(cmd));
}