#!/usr/bin/env perl

############################################################################           
#  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.                                                      
                                                                                       
###############################################################################
# Nightly tests for pig.
#
#

#PigSetup::setup();

#my $me = `whoami`;
#chomp $me;

$cfg = {
        'driver' => 'Pig',
	'nummachines' => 5,

	'groups' => [
		{
		'name' => 'Describe_cmdline',
		'floatpostprocess' => 0,
		'delimiter' => '	',
		'tests' => [
                        #JIRA[PIG-372]
                        #JIRA[PIG-374] 
                        #JIRA[PIG-384]
			{
			'num' => 1,
			'pig' => q\ 
A= load ':INPATH:/singlefile/studenttab10k' using PigStorage() as (name, age, gpa);
describe A;\,
                        'expected_out_regex' => "A: \\{name: bytearray,age: bytearray,gpa: bytearray}",
			},
                        #JIRA[PIG-19], Commented out until fixed.
#			{
#			'num' => 2,
#			'pig' => q\ 
#A=load ':INPATH:/singlefile/studenttab10k' using PigStorage() as (name, age, gpa);
#describe A;\,
#                        'expected_out_regex' => "A: \\{name: bytearray,age: bytearray,gpa: bytearray}",
#			},
                        #JIRA[PIG-373]
			{
			'num' => 3,
			'pig' => q\
A= load ':INPATH:/singlefile/studenttab10k' using PigStorage() as (name:chararray, age:int, gpa:double);
describe A;\,
                        'expected_out_regex' => "A: \\{name: chararray,age: int,gpa: double}",
			},
#********************************************************
#QUESTION: S/B SQL VERIFIER for DUMP statement?
#********************************************************
#                        #JIRA[PIG-373]
#			{
#			'num' => 4,
#			'java_params' => ['-Dopt.fetch=false'],
#			'pig' => q\ 
#A = load ':INPATH:/singlefile/studenttab10k' using PigStorage() as (name:chararray);
#describe A;
#A = load ':INPATH:/singlefile/studenttab10k' using PigStorage() as (name:chararray);
#dump A;\,
#
#                        'sql' => "select name, age, gpa from studenttab10k;",
#			},

			#JIRA[PIG-373]
                        #JIRA[PIG-405]
			{
			'num' => 5,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttabcomplex10k' using PigStorage() as (m:map[],x,y);
describe A;\,
                        'expected_out_regex' =>"A: \\{m: map\\[\\],x: bytearray,y: bytearray}",
			},

			#JIRA[PIG-373]
                        #JIRA[PIG-405]
			{
			'num' => 6,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttabcomplex10k' using PigStorage() as (m:map[],x,y);
B= foreach A generate m;
describe A;
describe B;\,
                        #Expect
                        # A : { m:map, x:bytearray, y:bytearray } 
                        # B : { m :map } 
                         'expected_out_regex' => "A: \\{m: map\\[\\],x: bytearray,y: bytearray}\nB: \\{m: map\\[\\]}",
			},
			#JIRA[PIG-373]
                        #JIRA[PIG-405]
			{
			'num' => 7,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttabcomplex10k' using PigStorage() as (m:map[],x,y);
describe A;
B= foreach A generate m;
describe B;\,
                        #Expect
                        # A : { m:map, x:bytearray, y:bytearray } 
                        # B : { m :map } 
                         'expected_out_regex' => "A: \\{m: map\\[\\],x: bytearray,y: bytearray}\nB: \\{m: map\\[\\]}",
			},
			#JIRA[PIG-373]
                        #JIRA[PIG-405]
			{
			'num' => 8,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttabcomplex10k' using PigStorage() as (m:map[],x,y);
B= foreach A generate m;
describe B;
describe A;\,
                        #Expect
                        # A : { m:map, x:bytearray, y:bytearray } 
                        # B : { m :map } 
                         'expected_out_regex' => "B: \\{m: map\\[\\]}\nA: \\{m: map\\[\\],x: bytearray,y: bytearray}",
			},
                        {
			'num' => 14,
			'pig' => q\A = load ':INPATH:/singlefile/allscalar10k' using PigStorage() as (name:chararray, age:int, gpa:double, instate:boolean);
describe A;\,
                        'expected_out_regex' => "A: \\{name: chararray,age: int,gpa: double,instate: boolean}",
			},

                        #JIRA[PIG-379]
			{
			'num' => 9,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttab10k' as (name:chararray, age:int, gpa:float);
describe A;
B= foreach A generate name, age;
describe B;
C= filter B by age > 30;
describe C;
D= group C by name;
describe D;\,
                        # EXPECT
                        # A: \\{name: chararray,age: integer,gpa: double}
                        # B: \\{name: chararray,age: integer}
                        # C: \\{name: chararray,age: integer}
                        # D: \\{group: chararray C: \\{name: chararray,age: integer}}
                        'expected_out_regex' => 
"A: \\{name: chararray,age: int,gpa: float}\nB: \\{name: chararray,age: int}\nC: \\{name: chararray,age: int}\nD: \\{group: chararray,C: \\{\\(name: chararray,age: int\\)}}",

			},
			{
			'num' => 10,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttab10k' as (name:chararray, age:int, gpa:float);
B= foreach A generate name, age;
C= filter B by age > 30;
D= group C by name;
describe A;
describe B;
describe C;
describe D;\,
                        # EXPECT
                        # A: \\{name: chararray,age: integer,gpa: double}
                        # B: \\{name: chararray,age: integer}
                        # C: \\{name: chararray,age: integer}
                        # D: \\{group: chararray C: \\{name: chararray,age: integer}}
                        'expected_out_regex' => 
"A: \\{name: chararray,age: int,gpa: float}\nB: \\{name: chararray,age: int}\nC: \\{name: chararray,age: int}\nD: \\{group: chararray,C: \\{\\(name: chararray,age: int\\)}}\n",

			},
			{
			'num' => 11,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttab10k' as (name:chararray, age:int, gpa:float);
B= foreach A generate name, age;
C= filter B by age > 30;
D= group C by name;
describe D;
describe C;
describe B;
describe A;\,
                        # EXPECT
                        # A: \\{name: chararray,age: integer,gpa: double}
                        # B: \\{name: chararray,age: integer}
                        # C: \\{name: chararray,age: integer}
                        # D: \\{group: chararray C: \\{name: chararray,age: integer}}
                        'expected_out_regex' => 
"D: \\{group: chararray,C: \\{\\(name: chararray,age: int\\)}}\nC: \\{name: chararray,age: int}\nB: \\{name: chararray,age: int}\nA: \\{name: chararray,age: int,gpa: float}",

			},
			{
			'num' => 12,
			'pig' => q\ 
A = load ':INPATH:/singlefile/studenttab10k' as (name:chararray, age:int, gpa:float);
B= foreach A generate name, age;
C= filter B by age > 30;
D= group C by name;
describe X;
describe D;
describe C;
describe B;
describe A;\,
                        # EXPECT
                        # A: \\{name: chararray,age: integer,gpa: double}
                        # B: \\{name: chararray,age: integer}
                        # C: \\{name: chararray,age: integer}
                        # D: \\{group: chararray C: \\{name: chararray,age: integer}}
                        'expected_err_regex' => "ERROR 1003: Unable to find an operator for alias X" 

			},
			{
			'num' => 13,
			'pig' => q\ 
A = LOAD ':INPATH:/singlefile/studenttab10k' AS (name: chararray, age: int, gpa: float);
B = LOAD 'voter_data' AS (name: chararray, age: int, registration: chararray, contributions: float);
C = COGROUP A BY name, B BY name;
D = FOREACH C GENERATE group, flatten((not IsEmpty(A) ? A : (bag{tuple(chararray, int, float)}){(null, null, null)})), flatten((not IsEmpty(B) ? B : (bag{tuple(chararray, int, chararray, float)}){(null,null,null, null)}));
describe D;\,
                        # EXPECT
                        # D: \\{group: chararray,A::name: chararray,A::age: int,A::gpa: float,B::name: chararray,B::age: int,B::registration: chararray,B::contributions: float}
                        'expected_out_regex' => "D: \\{group: chararray,A::name: chararray,A::age: int,A::gpa: float,B::name: chararray,B::age: int,B::registration: chararray,B::contributions: float}" 

			}
		],
		},
		{
		'name' => 'Unicode_cmdline',
		'floatpostprocess' => 0,
		'delimiter' => '	',
		'tests' => [
		
			{
			'num' => 1,
			'java_params' => ['-Dopt.fetch=false'],
			'pig' => q\ 
A = load ':INPATH:/singlefile/unicode100' as (name:chararray);
dump A;\,
                        'expected_out_regex' => ":Unicode_cmdline_1_output:" 

			},
        ],
        },

		{
		'name' => 'Warning',
		'floatpostprocess' => 0,
		'execonly' => 'mapred,tez,spark', # Warnings use counters, which don't work in local mode
		'delimiter' => '	',
		'tests' => [
		
 			{
				#Checking divide by zero warning
				'num' => 1,
				'pig' => q\a = load ':INPATH:/singlefile/studentnulltab10k' as (name:chararray, age:int, gpa:double);
b = foreach a generate (int)((int)gpa/((int)gpa - 1)) as norm_gpa:int;
c = foreach b generate (norm_gpa is null? 0 :norm_gpa);
store c into ':OUTPATH:';\,
			    'expected_err_regex' => ":Warning_1_err:",
			},
 			{
				#Checking field discarded warning
				'num' => 2,
				'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age:int, gpa:double);
b = foreach a generate (int)name;
store b into ':OUTPATH:';\,
			    'expected_err_regex' => "Encountered Warning FIELD_DISCARDED_TYPE_CONVERSION_FAILED 10000 time.*",
			},
 			{
				#Checking type cast warnings
				'num' => 3,
				'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name:chararray, age, gpa);
b = foreach a generate age + 1, gpa + 0.1f;
describe b;\,
			    'expected_err_regex' => "(Encountered Warning IMPLICIT_CAST_TO_INT 1 time.*\n.*Encountered Warning IMPLICIT_CAST_TO_FLOAT 1 time.*)|(Encountered Warning IMPLICIT_CAST_TO_FLOAT 1 time.*\n.*Encountered Warning IMPLICIT_CAST_TO_INT 1 time.*)",
			},
            {
                #Checking udf warnings
                'num' => 4,
                'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studentnulltab10k' as (name, age: int, gpa: float);
                        b = foreach a generate org.apache.pig.test.udf.evalfunc.TestWarningFunc(name, age, gpa);
                        store b into ':OUTPATH:';\,
                'expected_err_regex' => ":Warning_4_err:",
            },
            {
                #Checking non existent field warnings
                'num' => 5,
                'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studentnulltab10k';
                        b = foreach a generate $3;
                        store b into ':OUTPATH:';\,
                'expected_err_regex' => "Encountered Warning ACCESSING_NON_EXISTENT_FIELD 10000 time.*",
            },
        ],
        },
        {

# 1 Test that a nested foreach gives instant feedback: after user issue the foreach statement in Grunt  	   	  
# 2 Test that a nested foreach gives instant feedback: as part of execution: when we run this foreach statement, we will dump the schema for the nested alias 	 	 
# 3 Describe single Alias resulting from a nested Foreach 	 	 
# 4 Describe multiple Alias resulting from a nested Foreach 	 	 
# 5 Describe resulting from a nested Foreach that contains a positional parameter 	 	 
# 6 Describe for child Alias resulting from a nested Foreach where the child alias had multiple assignments 	  	The expected behavior is that the last assignment will destermine the result of the describe statement.
# 7 Describe for an Alias resulting from a nested Foreach where the projection for the nested alias is empty 	 	 
# 8 Describe within a foreach statement
# 9 Describe for alias with complex data types 
# 10 Describe that uses references an alias from an AS clause 

                'name' => 'NestedDescribe',
                'tests' => [
                        {
# 2 Test that a nested foreach gives instant feedback: as part of execution: when we run this foreach statement, we will dump the schema for the nested alias 	 	 
# 3 Describe single Alias resulting from a nested Foreach 	 	 
                        'num' => 1,
                        'pig' => q\
A = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
B = group A by name;
C = foreach B { D = distinct A.age; generate COUNT(D), group;}
describe C::D;
\,
                          ,'expected_out_regex' => "D: \\{age: bytearray}"

                      },{
# 2 Test that a nested foreach gives instant feedback: as part of execution: when we run this foreach statement, we will dump the schema for the nested alias 	 	 
# 7 Describe for an Alias resulting from a nested Foreach where the projection for the nested alias is empty 	 	 
                        'num' => 2,
                        'pig' => q\
A = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
B = group A by name;
C = foreach B { D = distinct A.age; E= filter D by age > 1000; generate COUNT(E), group;}
describe C;
\,
                          ,'expected_out_regex' => "C: \\{long,group: bytearray}"


                      },{
# 1 Test that a nested foreach gives instant feedback: after user issue the foreach statement in Grunt  	   	  
# 2 Test that a nested foreach gives instant feedback: as part of execution: when we run this foreach statement, we will dump the schema for the nested alias 	 	 
# 3 Describe single Alias resulting from a nested Foreach 	 	 
# 4 Describe multiple Alias resulting from a nested Foreach 	 	 
# 5 Describe resulting from a nested Foreach that contains a positional parameter 	 	 
                        'num' => 3,
                        'pig' => q\
A = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
B = group A by name;
C = foreach B { D = distinct A.$1; generate COUNT(D), group;}
describe C::D;
\,
                          ,'expected_out_regex' => "D: \\{age: bytearray}"


                      },
                ]

            }
	]
}
;
