#!/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();


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

	'groups' => [
		{
		'name' => 'HadoopError',
		'tests' => [
			{
			'num' => 1,
			'java_params' => ['-Dopt.fetch=false'],
			'pig' => q\
a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
b = group a by name;
c = foreach b generate group, COUNT($5);
dump c;\,
			'expected_err_regex' => "Out of bound access. Trying to access non-existent column: 5.",
			},
		]
		},
		{
		'name' => 'NoSuchFile',
		'tests' => [
			{
			'num' => 1,
			'java_params' => ['-Dopt.fetch=false'],
			'pig' => q\a = load '/user/gates/nosuchfile'; dump a;\,
			'expected_err_regex' => "ERROR 2118: Input path does not exist",
			},
			{
			'num' => 2,
			'pig' => q\register bla.jar\,
			'expected_err_regex' => "ERROR 101: file 'bla.jar' does not exist.",
			}
		]
		},
		{
		'name' => 'BadFunc',
		'tests' => [
			{ # PIG-431
			'num' => 1,
			'pig' => "a = load ':INPATH:/singlefile/studenttab10k' using NoSuchFunction(':');",
			'expected_err_regex' => "Could not resolve NoSuchFunction using imports",
			},
		]
		},
		{
		'name' => 'FileExists',
		'tests' => [
			{
			'num' => 1,
			'pig' => q\a = load ':INPATH:/singlefile/studenttab10k';
store a into ':INPATH:/singlefile/fileexists';\,
			'expected_err_regex' => ".* already exists",
			},
		]
		},
		{
		'name' => 'NegForeach',
        'tests' => [
            {
            'num' => 1,
            'ignore' => 1, # it is valid now
            # testing that nested foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = group a by name;
                        c = foreach b { ba = filter a by age < '25'; bb = foreach ba generate gpa; generate group, flatten(bb);}\,
            'expected_err_regex' => " Encountered \" \"foreach\" \"foreach \"\" at line.*\nWas expecting one of:",
            },
            {
            'num' => 2,
            # testing that group within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = group a by name;
                        c = foreach b { ba = filter a by age < '25'; g = group ba by gpa; x = foreach g generate group, flatten(g); generate x;}\,
            'expected_err_regex' => "Syntax error, unexpected symbol at or near 'ba'",
            },
            {
            'num' => 3,
            # testing that cogroup within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/votertab10k' as (name, age, registration, contributions);
                        c = cogroup a by (name, age), b by (name, age) ;
                        d = foreach c { e = cogroup a by (name), b by (name); x= foreach a generate flatten(a), flatten(b); generate x;}\,
            'expected_err_regex' => "mismatched input 'a' expecting LEFT_PAREN",
            },
            {
            'num' => 4,
            # testing that join within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/votertab10k' as (name, age, registration, contributions);
                        c = cogroup a by (name), b by (name) ;
                        d = foreach c { e = join a by (age), b by (age); generate e;}\,
            'expected_err_regex' => "mismatched input 'a' expecting LEFT_PAREN",
            },
            {
            'num' => 5,
            'ignore' => 1, # it is valid now
            # testing that cross within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/votertab10k' as (name, age, registration, contributions);
                        c = cogroup a by (name), b by (name) ;
                        d = foreach c { e = cross a,b; generate e;}\,
            'expected_err_regex' => "Encountered \" \"cross\" \"cross \"\" at .*\nWas expecting one of",            
            },
            {
            'num' => 6,
            # testing that union within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/votertab10k' as (name, age, registration, contributions);
                        c = cogroup a by (name), b by (name) ;
                        d = foreach c { e = union a,b; generate e;}\,
            'expected_err_regex' => "mismatched input 'a' expecting LEFT_PAREN",
            },
            {
            'num' => 7,
            # testing that split within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = group a by name;
                        c = foreach b { split a into ba if age < '25', bb if age > '40'; generate group, COUNT(ba), COUNT(bb);}\,
            'expected_err_regex' => "mismatched input 'split' expecting GENERATE",
            },
            {
            'num' => 8,
            # testing that load within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = group a by name;
                        c = foreach b { 
                                d = load ':INPATH:/singlefile/votertab10k' as (name, age, registration, contributions); 
                                generate *;}\,
            'expected_err_regex' => "mismatched input ''.*/singlefile/votertab10k'' expecting LEFT_PAREN",
            },
            {
            'num' => 9,
            # testing that store within foreach is not allowed
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = group a by name;
                        c = foreach b { store a into ':OUTPATH:'; generate *;}\,
            'expected_err_regex' => "mismatched input 'store' expecting GENERATE",
            },
        ]
		
		},
        {
        # test not allowed operations
        'name' => 'NotAllowed',
        'tests' => [

            {
            # currently (as of 09/18/2008), the following are not allowed
            #a = b;
            'num' => 1,
            'ignore' => 1, # different error message for different version of hadoop
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = a;\,
            'expected_err_regex' => "mismatched input ';' expecting LEFT_PAREN",
            },
            {
            # currently (as of 09/18/2008), the following are not allowed
            #a = b as (x,y,z);
            'num' => 2,
            'ignore' => 1, # different error message for different version of hadoop
            'pig' => q\a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = a as (x,y,z);\,
            'expected_err_regex' => "mismatched input 'as' expecting LEFT_PAREN",
            },
        ]
        },
        {
        # test  with udf which throws exception
        'name' => 'UdfException',
        'tests' => [

            {
            'num' => 1,
            'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        c = cogroup a by name, b by name;
                        d = foreach c generate flatten(org.apache.pig.test.udf.evalfunc.BadUdf(a,b));
                        store d into ':OUTPATH:';\,
	    'expected_err_regex' => "Out of bounds access",
            },
            {
            'num' => 2,
            'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        c = cogroup a by name, b by name;
                        d = foreach c generate flatten(org.apache.pig.test.udf.evalfunc.BadUdf2(a,b));
                        store d into ':OUTPATH:';\,
            'expected_err_regex' => "Out of bounds access",
            },
            {
            'num' => 3,
            'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        c = cogroup a by name, b by name;
                        d = foreach c generate flatten(org.apache.pig.test.udf.evalfunc.BadUdf3(a,b));
                        store d into ':OUTPATH:';\,
            'expected_err_regex' => "Out of bounds access",
            },
            {
            'num' => 4,
            'pig' => q\
                        register :FUNCPATH:/testudf.jar;
                        a = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        b = load ':INPATH:/singlefile/studenttab10k' as (name, age, gpa);
                        c = cogroup a by name, b by name;
                        d = foreach c generate flatten(org.apache.pig.test.udf.evalfunc.BadUdf4(a,b));
                        store d into ':OUTPATH:';\,
            'expected_err_regex' => "ERROR 2078: .*",
            },
        ]
        },
		{
		# test for sytax errors
                'name' => 'SyntaxErrors',
                'tests' => [
                        {
			# missing quotes around command
                        'num' => 1,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q#
A = load ':INPATH:/singlefile/studenttab10k';
B = foreach A generate $2, $1, $0;
C = stream B through awk 'BEGIN {FS = "\t"; OFS = "\t"} {print $3, $2, $1}';
dump C;#,
                        #'expected_err_regex' => "mismatched input ''BEGIN {FS = \"\\t\"; OFS = \"\\t\"} {print \$"."3, \$"."2, \$"."1}'' expecting SEMI_COLON",
                        'expected_err_regex' => "mismatched input ''BEGIN \\{.*} \\{.*}'' expecting SEMI_COLON",
                        },
                        {
			# input spec missing parenthesis
                        'num' => 2,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q#
define CMD `perl PigStreaming.pl foo -` input 'foo' using PigStorage() ship(':SCRIPTHOMEPATH:/PigStreaming.pl');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;#,
                        'expected_err_regex' => "mismatched input ''foo'' expecting LEFT_PAREN",
                        },
                        {
			# no serializer name after using
                        'num' => 3,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q#
define CMD `perl PigStreaming.pl foo -` output ('foo' using );
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;#,
                        'expected_err_regex' => "Syntax error, unexpected symbol at or near '\\)'",
                        },
                        {
			# alias name missing from define
                        'num' => 4,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q#
define `perl PigStreaming.pl foo -`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;#,
                        'expected_err_regex' => "mismatched input '`perl PigStreaming.pl foo -`' expecting IDENTIFIER",
                        },
                        {
			# quotes missing from name of the file in ship script
                        'num' => 5,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q#
define CMD `perl PigStreaming.pl foo -` ship(:SCRIPTHOMEPATH:/PigStreaming.pl);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;#,
                        'expected_err_regex' => "mismatched input '.' expecting RIGHT_PAREN",
                        },
                ]
                },
				{
		# relevant information missing/incorrect in streaming command
                'name' => 'CmdErrors',
                'tests' => [
                        {
			# Define uses using non-existent command (autoship)
                        'num' => 1,
			'execonly' => 'mapred,tez,spark',
			'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreamingNotThere.pl`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "failed with exit status: 2",
                        },
                        {
			# Define uses non-existent command with ship clause
                        'num' => 2,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreamingNotThere.pl foo -` ship(':SCRIPTHOMEPATH:/PigStreamingNotThere.pl');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "Invalid ship specification: .*/PigStreamingNotThere.pl.* does not exist!",
                        },
                        {
			# Define uses non-existent command with cache clause
                        'num' => 3,
                        'pig' => q\
define CMD `perl PigStreaming.pl - - nameMap` ship(':SCRIPTHOMEPATH:/PigStreaming.pl') cache(':SCRIPTHOMEPATH:/PigStreamingNotThere.pl#NotThere');
A = load ':INPATH:/singlefile/studenttab10k';
B = foreach A generate $0;
C = stream B through CMD as (name);
D = group C by name;
E = foreach D generate group, COUNT(C);
dump E;\,
                        'expected_err_regex' => "Invalid cache specification: .*/PigStreamingNotThere.pl.*",
                        },
                        {
			# Define uses non-existent serializer
                        'num' => 4,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreaming.pl foo -` input('foo' using SerializerNotThere()) ship(':SCRIPTHOMEPATH:/PigStreaming.pl');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "Could not resolve SerializerNotThere using imports",
                        },
                        {
			# Define uses non-existent deserializer
                        'num' => 5,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreaming.pl` output(stdout using DeserializerNotThere()) ship(':SCRIPTHOMEPATH:/PigStreaming.pl');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "Could not resolve DeserializerNotThere using imports",
                        },
                        {
			# Invalid skip path
                        'num' => 6,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
set stream.skippath 'foo';
define CMD `perl PigStreaming.pl`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "Invalid value for stream.skippath.*",
                        },
                        {
			# Invalid command alias in stream operator
                        'num' => 7,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreaming.pl`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD1;
dump B;\,
                        'expected_err_regex' => "pig script failed to validate: Undefined command-alias \\[CMD1\\]",
                        },
                        {
			# Invalid operator alias in stream operator
                        'num' => 8,
                        'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreaming.pl`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream C through CMD;
dump B;\,
                        'expected_err_regex' => "Undefined alias: C",
                        },
                ]
                },
				{
		# streaming application failures
                'name' => 'StreamingErrors',
                'tests' => [
                        {
			# Streaming application fails in the beginning of processing
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 1,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
define CMD `perl PigStreamingBad.pl start` ship(':SCRIPTHOMEPATH:/PigStreamingBad.pl')  stderr('CMD' limit 1);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 1",
                        },
                        {
			# Streaming application fails in the middle of processing
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 2,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
define CMD `perl PigStreamingBad.pl middle` ship(':SCRIPTHOMEPATH:/PigStreamingBad.pl')  stderr('CMD' limit 1); 
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 2",
                        },
                        {
			# Streaming application fails in the end of processing
			# bring logs to dfs
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 3,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
define CMD `perl PigStreamingBad.pl end` ship(':SCRIPTHOMEPATH:/PigStreamingBad.pl') stderr('CMD' limit 1);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 3",
                        },
                        {
			# Streaming application fails in the randomly during processing
			# bring logs to dfs
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 4,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
define CMD `perl DieRandomly.pl 10000 2` ship(':SCRIPTHOMEPATH:/DieRandomly.pl') stderr('CMD' limit 1);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 2",
                        },
			{
                        'num' => 5,
			'execonly' => 'mapred,tez',
                        'pig' => q\
define BADCMD `perl PigStreamingBad.pl start` ship(':SCRIPTHOMEPATH:/PigStreamingBad.pl');
define GOODCMD `perl PigStreaming.pl` ship(':SCRIPTHOMEPATH:/PigStreaming.pl') ;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through GOODCMD;
C = stream A through BADCMD;
store B into ':OUTPATH:.1';
store C into ':OUTPATH:.2';\,
                        'expected_err_regex' => "failed with exit status: 1|Error while reading from POStream and passing it to the streaming",
                        },

                ]
		},
		{
		# errors (de)serializing data for streaming
                'name' => 'IOErrors',
                'tests' => [
                        {
                        # Invalid deserializer - throws exception
                        'num' => 1,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
register :FUNCPATH:/testudf.jar;
define CMD `perl PigStreaming.pl` input(stdin) output(stdout using org.apache.pig.test.udf.streaming.DumpStreamerBad) ship(':SCRIPTHOMEPATH:/PigStreaming.pl');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "Error reading output from Streaming binary|Error while reading from POStream and passing it to the streaming process",
                        },
			{
			# Invalid serializer - throws exception
                        'num' => 2,
			'execonly' => 'mapred,tez,spark',
                        'pig' => q\
define CMD `perl PigStreamingDepend.pl` input(stdin using StringStoreBad) ship(':SCRIPTHOMEPATH:/PigStreamingDepend.pl', ':SCRIPTHOMEPATH:/PigStreamingModule.pm');
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through `perl PigStreaming.pl`;
C = stream B through CMD as (name, age, gpa);
D = foreach C generate name, age;
store D into ':OUTPATH:';\,
                        'expected_err_regex' => "Could not resolve StringStoreBad using imports",
                        },
                ]
		},
		{
		'name' => 'StreamingLocalErrors',
		'tests' => [
			{
			# Define uses using non-existent command
                        'num' => 1,
						'execonly' => 'local',
						'java_params' => ['-Dopt.fetch=false'],
                        'pig' => q\
define CMD `perl PigStreamingNotThere.pl`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
dump B;\,
                        'expected_err_regex' => "Can't open perl script .*PigStreamingNotThere.pl.*: No such file or directory",
                        },
                        {
			# Streaming application fails in the beginning of processing
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 2,
			'execonly' => 'local',
                        'pig' => q\
define CMD `perl :SCRIPTHOMEPATH:/PigStreamingBad.pl start`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 1",
                        },
                        {
			# Streaming application fails in the middle of processing
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 3,
			'execonly' => 'local',
                        'pig' => q\
define CMD `perl :SCRIPTHOMEPATH:/PigStreamingBad.pl middle`; 
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 2",
                        },
                        {
			# Streaming application fails in the middle of processing
			# bring logs to dfs
			# NEED TO CHECK STDERR MANUALLY FOR NOW
                        'num' => 4,
			'execonly' => 'local',
                        'pig' => q\
define CMD `perl :SCRIPTHOMEPATH:/PigStreamingBad.pl end`;
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "failed with exit status: 3",
                        },
                        {
                        # Invalid deserializer - throws exception
                        'num' => 5,
			            'execonly' => 'local',
                        'pig' => q\
register :FUNCPATH:/testudf.jar;
define CMD `perl :SCRIPTHOMEPATH:/PigStreaming.pl` input(stdin using PigDump) output(stdout using org.apache.pig.test.udf.storefunc.DumpLoaderBad);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through CMD;
store B into ':OUTPATH:';\,
                        'expected_err_regex' => "Could not resolve PigDump using imports",
                        },
			{
			# Invalid serializer - throws exception
                        'num' => 6,
			            'execonly' => 'local',
                        'pig' => q\
define CMD `perl :SCRIPTHOMEPATH:/PigStreamingDepend.pl` input(stdin using StringStoreBad);
A = load ':INPATH:/singlefile/studenttab10k';
B = stream A through `perl PigStreaming.pl`;
C = stream B through CMD as (name, age, gpa);
D = foreach C generate name, age;
store D into ':OUTPATH:';\,
                        'expected_err_regex' => "Could not resolve StringStoreBad using imports",
			},
		]
		}
    ]
}
;



