blob: 518a94c040b4942e1caa81dab0cdd0a15d0af1d4 [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.
###############################################################################
# curl command tests for templeton
#
#
#use Yahoo::Miners::Test::PigSetup;
#PigSetup::setup();
#my $me = `whoami`;
#chomp $me;
$cfg =
{
'driver' => 'Curl',
'groups' =>
[
##=============================================================================================================
{
'name' => 'Hcat_table',
'tests' =>
[
{
#drop table if exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop table if exists templetontest_tab2'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#create table
'num' => 2,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=create table templetontest_tab2(i int, j bigint) STORED AS rcfile;'],
'json_field_substr_match' => {'stderr' => 'OK', 'exitcode' => '^0$'}
},
{
#show tables
'num' => 3,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=show tables;'],
'json_field_substr_match' => {'stderr' => 'OK', 'stdout' => 'templetontest_tab2', 'exitcode' => '^0$'}
},
{
#create table again, should fail
'num' => 4,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=create table templetontest_tab2(i int, j bigint) STORED AS rcfile;'],
'json_field_substr_match' => { 'exitcode' => '^1$'}
},
{
#describe table
'num' => 5,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=describe templetontest_tab2;'],
'json_field_substr_match' => { 'stdout' => '.*i\s+int.*\n.*j.*bigint.*', 'exitcode' => '^0$', 'stderr' => 'OK'}
},
{
#alter table - file format
'num' => 6,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=alter table templetontest_tab2 SET FILEFORMAT rcfile;'],
'json_field_substr_match' => { 'exitcode' => '^0$', 'stderr' => 'OK'}
},
{
#alter table - add column
'num' => 7,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=alter table templetontest_tab2 add columns(newcolx int);'],
'json_field_substr_match' => { 'exitcode' => '^0$', 'stderr' => 'OK'}
},
{
#describe table
'num' => 8,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=describe templetontest_tab2;'],
'json_field_substr_match' => { 'stdout' => '.*newcolx\s+int.*', 'exitcode' => '^0$', 'stderr' => 'OK'}
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_DB',
'tests' =>
[
{
#cleanup
#drop database if exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop database if exists templeton_testempty_db'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#create db
'num' => 2,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testempty_db?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"comment":"Hello there", "location":"", "properties":{"a":"b"}}']
},
{
#negative test - create same db again
'ignore' => 'does not return corect status code',
'num' => 3,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testempty_db?user.name=:UNAME:',
'status_code' => 409,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"comment":"Hello there", "location":"", "properties":{"a":"b"}}']
},
{ #show databases
'num' => 4,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'json_field_substr_match' => {'databases' => 'templeton_testempty_db'},
},
{ #show databases w like
'num' => 5,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/?like=*empty*&user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' => {'databases' => 'templeton_testempty_db'},
},
{ #desc db
'num' => 6,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testempty_db?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'templeton_testempty_db', 'location' => 'templeton_testempty_db'},
},
{ #drop db
'num' => 7,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testempty_db?user.name=:UNAME:',
'status_code' => 200,
},
{
#-ve test , describe on non existent db
'num' => 8,
'ignore' => 'ignore waiting for bugfix',
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/test_no_such_db?user.name=:UNAME:',
'status_code' => 404,
'json_field_substr_match' => {'error' => 'No such database'},
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_TABLE_BASIC',
'tests' =>
[
{
#setup
#create db if not exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=create database if not exists templeton_testdb1;'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#cleanup
#drop table if exists
'num' => 2,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:&ifExists=true',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'templeton_testdb1', 'table' => 'templeton_testtab1'},
},
{
#setup
#create table if not exists
'ignore' => 'rest api now available',
'num' => 3,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=use templeton_testdb1; create table if not exists templeton_testtab1 (i int, j bigint) STORED AS rcfile;'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#create table
'num' => 4,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:',
'format_header' => 'Content-Type: application/json',
'post_options' => ['{
"external" : "true", "ifNotExists": "true",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint", "comment" : "some comment" }
],
"location" : "/tmp/tab1",
"format" : { "storedAs" : "rcfile"}
}'],
'status_code' => 200,
'json_field_substr_match' => {'database' => 'templeton_testdb1', 'table' => 'templeton_testtab1'},
},
{
#negative test - create same table again
'ignore' => 'currently returns success, needs to be fixed',
'num' => 5,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:',
'format_header' => 'Content-Type: application/json',
'post_options' => ['{
"external" : "true", "ifNotExists": "true",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint", "comment" : "some comment" }
],
"location" : "/tmp/tab1",
"format" : { "storedAs" : "rcfile"}
}'],
'status_code' => 409,
},
{ #show tables
'num' => 6,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' => {'tables' => 'templeton_testtab1'},
},
{ #show tables like '%table1%'
'num' => 7,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/?user.name=:UNAME:&like=*testtab1*',
'status_code' => 200,
'json_field_substr_match' => {'tables' => 'templeton_testtab1'},
},
{ #desc table
'num' => 8,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:',
'status_code' => 200,
# 'json_field_substr_match' => {'table-name' => 'templeton_testtab1'},
'json_field_match_object' => { 'columns' => '[
{ "name" : "i", "type" : "int"},
{ "name" : "j", "type" : "bigint", "comment" : "some comment" }
]' },
},
{ #drop table
'num' => 9,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:',
'status_code' => 200,
},
{
#-ve test , describe on non existent table
'num' => 10,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:',
'status_code' => 404,
'json_field_substr_match' => {'error' => 'templeton_testtab1 does not exist'},
},
{
#-ve test , describe on non existent table
'num' => 11,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/templeton_testdb1/table/templeton_testtab1?user.name=:UNAME:&format=extended:',
'status_code' => 404,
'json_field_substr_match' => {'error' => 'templeton_testtab1 does not exist'},
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_TABLE_EXTENDED',
'tests' =>
[
{
#cleanup
#drop table if exists
'num' => 1,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tabe?user.name=:UNAME:&ifExists=true',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tabe'},
},
{
#setup
#create table if not exists
'num' => 2,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tabe?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => [
'{"ifNotExists": "false",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint" },
{ "name" : "ip", "type" : "string", "comment" : "IP Address of the User" }
],
"format" : {
"storedAs" : "rcfile",
"rowFormat" : {
"fieldsTerminatedBy" : "\u0001",
"collectionItemsTerminatedBy" : "\u0002",
"mapKeysTerminatedBy" : "\u0003",
"linesTerminatedBy" : "\n",
"serde" : {
"name" : "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe",
"properties" : {
"key" : "value"
}
}
}
},
"comment" : "This is the page view table",
"partitionedBy" : [ { "name" : "dt", "type" : "string"}, { "name" : "country", "type" : "string"} ],
"tableProperties" : {"prop1" : "val1" , "prop2" : "val2" },
"clusteredBy" : {"columnNames": ["i", "j"], "sortedBy": [ {"columnName": "i", "order": "ASC"}, {"columnName": "j", "order": "ASC"}], "numberOfBuckets": 10 }
}',
],
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tabe'},
},
{ #desc table
'num' => 3,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tabe?user.name=:UNAME:&format=extended',
'status_code' => 200,
#TODO: check for clustered section
'json_field_substr_match' =>
{
'location' => "templetontest_tabe",
'inputFormat' => "org.apache.hadoop.hive.ql.io.RCFileInputFormat",
'lastAccessTime' => 0,
'lastUpdateTime' => '\d{13}',
'maxFileSize' => 0,
'minFileSize' => 0,
'outputFormat' => "org.apache.hadoop.hive.ql.io.RCFileOutputFormat",
'partitioned' => "true",
'table' => "templetontest_tabe",
},
'json_field_match_object' =>
{'columns' => '[
{
"name" : "i",
"type" : "int"
},
{
"name" : "j",
"type" : "bigint"
},
{
"comment" : "IP Address of the User",
"name" : "ip",
"type" : "string"
}
]',
"partitionColumns" => '[
{
"name" : "dt",
"type" : "string"
},
{
"name" : "country",
"type" : "string"
}
]',
},
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_TABLE_RENAME',
'tests' =>
[
{
#cleanup table 1
#drop table if exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop table if exists templeton_testtab_rename1'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#cleanup table 2
#drop table if exists
'num' => 2,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop table if exists templeton_testtab_rename2'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#setup
#create table if not exists
'num' => 3,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=create table if not exists templeton_testtab_rename1 (i int, j bigint) STORED AS rcfile;'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#rename table
'num' => 4,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testtab_rename1',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','rename=templeton_testtab_rename2'],
'json_field_substr_match' => {'table' => 'templeton_testtab_rename2'},
},
{
#desc table
'num' => 5,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testtab_rename2?user.name=:UNAME:',
'status_code' => 200,
# 'json_field_substr_match' => {'table-name' => 'templeton_testtab1'},
'json_field_match_object' => { 'columns' => '[
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint" }
]' },
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_PARTITIONS',
'tests' =>
[
{
#cleanup
#drop table if exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop table if exists templetontest_parts'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#setup
#create table if not exists
'num' => 2,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:',
'exec=create table if not exists templetontest_parts (i int, j bigint, ip STRING COMMENT "IP Address of the User")
COMMENT "This is the page view table"
PARTITIONED BY(dt STRING, country STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY "\001"
COLLECTION ITEMS TERMINATED BY "\002"
MAP KEYS TERMINATED BY "\003"
STORED AS rcfile
--LOCATION "table1_location" '],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#create partition 1
'num' => 3,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27US%27?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"location" : "loc1"}' ],
'json_field_substr_match' => {'database' => 'default',
'table' => 'templetontest_parts',
'partition' => "dt='20120101',country='US'"
},
},
{
#create partition 2
'num' => 4,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27IN%27?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"location" : "loc2"}' ],
'json_field_substr_match' => {'database' => 'default',
'table' => 'templetontest_parts',
'partition' => "dt='20120101',country='IN'"
},
},
{
#-ve test. create partition 2 -with same name
'num' => 5,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27IN%27?user.name=:UNAME:',
'status_code' => 409,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"location" : "loc2"}' ],
'json_field_substr_match' => {'error' => 'Partition already exists',
},
},
{
#lookup partitions
'num' => 6,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/?user.name=:UNAME:',
'status_code' => 200,
'json_field_match_object' =>
{
"partitions" =>
'[
{
"name" : "dt=\'20120101\',country=\'IN\'",
"values" : [
{
"columnName" : "dt",
"columnValue" : "20120101"
},
{
"columnName" : "country",
"columnValue" : "IN"
}
]
},
{
"name" : "dt=\'20120101\',country=\'US\'",
"values" : [
{
"columnName" : "dt",
"columnValue" : "20120101"
},
{
"columnName" : "country",
"columnValue" : "US"
}
]
}
]'
},
},
{
#describe a partition
'num' => 7,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=\'20120101\',country=\'IN\'?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{
"database" => "default",
"table" => "templetontest_parts",
"partition" => "dt=\'20120101\',country=\'IN\'",
},
'json_field_match_object' =>
{
"columns" => '[
{
"name" : "i",
"type" : "int"
},
{
"name" : "j",
"type" : "bigint"
},
{
"comment" : "IP Address of the User",
"name" : "ip",
"type" : "string"
}
]',
"partitionColumns" => '[
{
"name" : "dt",
"type" : "string"
},
{
"name" : "country",
"type" : "string"
}
]',
},
},
{
#describe a partition - extended
'num' => 8,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=\'20120101\',country=\'IN\'?user.name=:UNAME:&format=extended',
'status_code' => 200,
'json_field_substr_match' =>
{
"outputFormat" => "org.apache.hadoop.hive.ql.io.RCFileOutputFormat",
"inputFormat" => "org.apache.hadoop.hive.ql.io.RCFileInputFormat",
"lastAccessTime" => 0,
"maxFileSize" => 0,
"location" => "loc2",
"totalNumberFiles" => 0,
"lastUpdateTime" => '\d{13}',
"minFileSize" => 0,
"partitioned" => 'true',
"totalFileSize" => 0,
"table" => "templetontest_parts"
},
'json_field_match_object' =>
{
"columns" => '[
{
"name" : "i",
"type" : "int"
},
{
"name" : "j",
"type" : "bigint"
},
{
"comment" : "IP Address of the User",
"name" : "ip",
"type" : "string"
}
]',
"partitionColumns" => '[
{
"name" : "dt",
"type" : "string"
},
{
"name" : "country",
"type" : "string"
}
]',
},
},
{
#delete partition 2
'num' => 9,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27IN%27?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'default',
'table' => 'templetontest_parts',
},
},
{
#delete partition 2 again
'num' => 10,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27IN%27?user.name=:UNAME:',
'status_code' => 200, #should return 404 when bug is fixed
'json_field_substr_match' =>
{ 'database' => 'default',
'table' => 'templetontest_parts',
},
},
{
#lookup deleted partition 2
'num' => 11,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_parts/partition/dt=%2720120101%27,country=%27IN%27?user.name=:UNAME:',
'status_code' => 404,
'json_field_substr_match' =>
{
'error' => 'Partition.*for table templetontest_parts does not exist'
},
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_COLUMN',
'tests' =>
[
{
#cleanup table
#drop table if exists
'num' => 1,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testcol_tab?user.name=:UNAME:',
'status_code' => 200,
},
{
#setup
#create table if not exists
'num' => 2,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl?user.name=:UNAME:',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=create table if not exists templeton_testcol_tab (i int comment "column with comment", j bigint) STORED AS rcfile;'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#get column
'num' => 3,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testcol_tab/column/?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{
'database' => 'default',
'table' => 'templeton_testcol_tab',
},
'json_field_match_object' =>
{
'columns' => '[
{ "name" : "i", "type" : "int", "comment" : "column with comment"},
{ "name" : "j", "type" : "bigint" }
]'
},
},
{
#get specific column
'num' => 4,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testcol_tab/column/i?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{
'database' => 'default',
'table' => 'templeton_testcol_tab',
},
'json_field_match_object' =>
{
'column' => '{ "name" : "i", "type" : "int", "comment" : "column with comment" }'
},
},
{
#create new column
'num' => 5,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testcol_tab/column/k?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"type": "string", "comment": "The k column"}' ],
'json_field_substr_match' =>
{
'database' => 'default',
'table' => 'templeton_testcol_tab',
'column' => 'k',
},
},
{
#create duplicate column
'num' => 6,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templeton_testcol_tab/column/k?user.name=:UNAME:',
'status_code' => 409,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"type": "string", "comment": "The k column"}' ],
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_TABLE_PROPS',
'tests' =>
[
{
#cleanup
#drop table if exists
'num' => 1,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop?user.name=:UNAME:&ifExists=true',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tprop'},
},
{
#setup
#create table if not exists
'num' => 2,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => [
'{"ifNotExists": "true",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint" },
{ "name" : "ip", "type" : "string", "comment" : "IP Address of the User" }
],
"format" : { "storedAs" : "rcfile"},
"comment" : "This is the page view table",
"partitionedBy" : [ { "name" : "dt", "type" : "string"}, { "name" : "country", "type" : "string"} ],
"tableProperties" : {"prop1" : "val1" , "prop2" : "val2" }
}',
],
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tprop'},
},
{
'num' => 3,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop/property?user.name=:UNAME:',
'status_code' => 200,
#using the substring match instead of object match for properties because object contains a property with timestamp value
'json_field_substr_match' =>
{'database' => 'default',
'table' => 'templetontest_tprop',
'properties' => '(.*prop1.*val1|.*prop2.*val2)|(.*prop1.*val1|.*prop2.*val2)'
},
},
{
#add new property
'num' => 4,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop/property/prop3?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{'database' => 'default', 'table' => 'templetontest_tprop', "property" => "prop3"},
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"value" : "val3"}' ],
},
{
#get new property
'num' => 5,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop/property/prop3?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{'database' => 'default', 'table' => 'templetontest_tprop'},
'json_field_match_object' =>
{ 'property' => '{"prop3" : "val3"}'},
'format_header' => 'Content-Type: application/json',
},
{
#add new property
'num' => 6,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop/property/prop3?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{'database' => 'default', 'table' => 'templetontest_tprop', "property" => "prop3"},
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"value" : "newval3"}' ],
},
{
#get new property
'num' => 7,
'method' => 'GET',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop/property/prop3?user.name=:UNAME:',
'status_code' => 200,
'json_field_substr_match' =>
{'database' => 'default', 'table' => 'templetontest_tprop'},
'json_field_match_object' =>
{ 'property' => '{"prop3" : "newval3"}'},
'format_header' => 'Content-Type: application/json',
},
{
#cleanup
#drop table if exists
'num' => 10,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tprop?user.name=:UNAME:&ifExists=true',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tprop'},
},
]
},
##=============================================================================================================
{
'name' => 'REST_DDL_TABLE_GROUP_PERMS', #test the group and permission flags
'ignore' => 'these features are tested as part of hcat auth tests. current test cases dont work with auth enabled',
'tests' =>
[
{
#cleanup
#drop table if exists
'num' => 1,
'method' => 'DELETE',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tgrouperm?user.name=:UNAME:&ifExists=true',
'status_code' => 200,
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tgrouperm'},
},
{
#create table -ve test - no such group
'num' => 2,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tgrouperm?user.name=:UNAME:',
'status_code' => 500,
'format_header' => 'Content-Type: application/json',
'post_options' => [
'{"ifNotExists": "true",
"group" : "nosuchgroupAAAABBB",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint" },
{ "name" : "ip", "type" : "string", "comment" : "IP Address of the User" }
],
"format" : { "storedAs" : "rcfile"},
"comment" : "This is the page view table",
"partitionedBy" : [ { "name" : "dt", "type" : "string"}, { "name" : "country", "type" : "string"} ],
"tableProperties" : {"prop1" : "val1" , "prop2" : "val2" }
}',
],
# 'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tgrouperm'},
#TODO - add checks after error message is standardised
},
{
#create table with no permissions
'num' => 3,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tgrouperm?user.name=:UNAME:',
'status_code' => 200,
'format_header' => 'Content-Type: application/json',
'post_options' => [
'{"ifNotExists": "true",
"permissions" : "---------",
"columns": [
{ "name" : "i", "type" : "int" },
{ "name" : "j", "type" : "bigint" },
{ "name" : "ip", "type" : "string", "comment" : "IP Address of the User" }
],
"format" : { "storedAs" : "rcfile"},
"comment" : "This is the page view table",
"partitionedBy" : [ { "name" : "dt", "type" : "string"}, { "name" : "country", "type" : "string"} ],
"tableProperties" : {"prop1" : "val1" , "prop2" : "val2" }
}',
],
'json_field_substr_match' => {'database' => 'default', 'table' => 'templetontest_tgrouperm'},
},
{
#create partition in table that does not have permissions
'num' => 4,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_tgrouperm/partition/dt=%2720120101%27,country=%27US%27?user.name=:UNAME:',
'status_code' => 500,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"location" : "loc1"}' ],
'json_field_substr_match' => {'database' => 'default',
'table' => 'templetontest_tgrouperm',
'error' => 'Permission denied',
'partition' => "dt='20120101',country='US'"
},
},
]
},
##=============================================================================================================
{
'name' => 'HCAT_GROUP_PERMS',
'ignore' => 'these features are tested as part of hcat auth tests. current test cases dont work with auth enabled',
'tests' =>
[
{
#drop table if exists
'num' => 1,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:','exec=drop table if exists templetontest_hcatgp'],
'json_field_substr_match' => {'stderr' => 'OK'},
},
{
#create table . -ve test
'num' => 2,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:',
'group=no_such_group_AA',
'exec=create table templetontest_hcatgp(i int, j bigint) STORED AS rcfile;'],
'json_field_substr_match' => {'stderr' => 'User does not belong to no_such_group_AA', 'exitcode' => '^1$'}
},
{
#create table with no permissions
'num' => 3,
'method' => 'POST',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl',
'status_code' => 200,
'post_options' => ['user.name=:UNAME:',
'permissions=---------',
'exec=create table templetontest_hcatgp(i int, j bigint)
PARTITIONED BY(dt STRING, country STRING)
STORED AS rcfile;'
],
'json_field_substr_match' => {'stderr' => 'OK', 'exitcode' => '^0$'}
},
{
#create partition in table that does not have permissions
'num' => 4,
'method' => 'PUT',
'url' => ':TEMPLETON_URL:/templeton/v1/ddl/database/default/table/templetontest_hcatgp/partition/dt=%2720120101%27,country=%27US%27?user.name=:UNAME:',
'status_code' => 500,
'format_header' => 'Content-Type: application/json',
'post_options' => ['{"location" : "loc1"}' ],
'json_field_substr_match' => {'database' => 'default',
'table' => 'templetontest_hcatgp',
'error' => 'Permission denied',
'partition' => "dt='20120101',country='US'"
},
},
]
}
]
},
;