Dimitry, Nope that is new for me thanks for pointing it out, been using this home grown class since pig 0.5--really like the idea of unit testing moving into pig as a first class citizen.
On Jul 21, 2010, at 2:11 AM, Dmitriy Ryaboy wrote: > Corbin, > Have you looked at PigUnit? https://issues.apache.org/jira/browse/PIG-1404 > > > On Tue, Jul 20, 2010 at 11:07 PM, Corbin Hoenes <cor...@tynt.com> wrote: > >> okay no attachments...try this gist: >> >> http://gist.github.com/484135 >> >> On Jul 21, 2010, at 12:02 AM, Corbin Hoenes wrote: >> >>> Trying to attach the PigRunner class in case that helps give you a start >> using register script. >>> >>> >>> >>> On Jul 20, 2010, at 11:56 PM, Corbin Hoenes wrote: >>> >>>> Hey Todd we run against entire pig scripts with some helper classes we >> built basically they preprocess the variables then call register script but >> the test looks like this: >>>> >>>> @Before >>>> public void setUp() throws Exception { >>>> Helper.delete(OUT_FILE); >>>> runner = new PigRunner(); >>>> } >>>> >>>> >>>> @Test >>>> public void testRecordCount() throws Exception { >>>> runner.execute("myscript.pig", "param1=foo","param2=bar"); >>>> >>>> Iterator<Tuple> tuples = runner.getPigServer().openIterator("foo"); >>>> assertEquals(41L, Helper.countTuples(tuples)); >>>> } >>>> >>>> It's been very useful for us to test this way. Would love to see more >> chatter about other techniques. >>>> >>>> On Jul 20, 2010, at 3:26 PM, ToddG wrote: >>>> >>>> >>>>> I'd like to include running various PIG scripts in my continuous build >> system. Of course, I'll only use small datasets for this, and in the >> beginning, I'll only target a local machine instance. However, this brings >> up several questions: >>>>> >>>>> >>>>> Q: Whats the best way to run PIG from java? Here's what I'm doing, >> following a pattern I found in some of the pig tests: >>>>> >>>>> 1. Create Pig resources in a base class (shamelessly copied from >> PigExecTestCase): >>>>> >>>>> protected MiniCluster cluster; >>>>> protected PigServer pigServer; >>>>> >>>>> @Before >>>>> public void setUp() throws Exception { >>>>> >>>>> String execTypeString = System.getProperty("test.exectype"); >>>>> if(execTypeString!=null && execTypeString.length()>0){ >>>>> execType = PigServer.parseExecType(execTypeString); >>>>> } >>>>> if(execType == MAPREDUCE) { >>>>> cluster = MiniCluster.buildCluster(); >>>>> pigServer = new PigServer(MAPREDUCE, cluster.getProperties()); >>>>> } else { >>>>> pigServer = new PigServer(LOCAL); >>>>> } >>>>> } >>>>> >>>>> 2. Test classes sub class this to get access to the MiniCluster and >> PigServer (copied from TestPigSplit): >>>>> >>>>> @Test >>>>> public void notestLongEvalSpec() throws Exception{ >>>>> inputFileName = "notestLongEvalSpec-input.txt"; >>>>> createInput(new String[] {"0\ta"}); >>>>> >>>>> pigServer.registerQuery("a = load '" + inputFileName + "';"); >>>>> for (int i=0; i< 500; i++){ >>>>> pigServer.registerQuery("a = filter a by $0 == '1';"); >>>>> } >>>>> Iterator<Tuple> iter = pigServer.openIterator("a"); >>>>> while (iter.hasNext()){ >>>>> throw new Exception(); >>>>> } >>>>> } >>>>> >>>>> 3. ERROR >>>>> >>>>> This pattern works for simple PIG directives, but I want to load up >> entire pig scripts, which have REGISTER and DEFINE directives, then the >> pigServer.registerQuery() fails with: >>>>> >>>>> org.apache.pig.impl.logicalLayer.FrontendException: ERROR 1000: Error >> during parsing. Unrecognized alias REGISTER >>>>> at org.apache.pig.PigServer$Graph.parseQuery(PigServer.java:1170) >>>>> at org.apache.pig.PigServer$Graph.registerQuery(PigServer.java:1114) >>>>> at org.apache.pig.PigServer.registerQuery(PigServer.java:425) >>>>> at org.apache.pig.PigServer.registerQuery(PigServer.java:441) >>>>> at >> com.audiencescience.apollo.reporting.NetworkRevenueReportTest.shouldParseNetworkRevenueReportScript(NetworkRevenueReportTest.java:74) >>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>> at >> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>>>> at >> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>>> >>>>> Any suggestions? >>>>> >>>>> -Todd >>>> >>> >> >>