# 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'"
                                  },
    },

  ]

}





 ]
},
  ;

