Package com.endgame.binarypig.loaders

Source Code of com.endgame.binarypig.loaders.AbstractExecutingLoaderTest

/**
* 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.
*
*  Copyright 2013 Endgame Inc.
*
*/
package com.endgame.binarypig.loaders;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;

import junit.framework.TestCase;

import org.apache.hadoop.io.BytesWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.InputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.RecordReader;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.SequenceFileRecordReader;
import org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigSplit;
import org.apache.pig.data.Tuple;
import org.apache.pig.data.TupleFactory;
import org.easymock.EasyMock;

public class AbstractExecutingLoaderTest extends TestCase {
  AbstractExecutingLoader underTest;
  File dataDir = new File("./_data");
   
  @Override
  protected void setUp() throws Exception {
    super.setUp();
   
    underTest = new AbstractExecutingLoader("") {
      @Override
      public Tuple outputToTuple(Text key, BytesWritable value, String output,boolean timedOut) {
        return TupleFactory.getInstance().newTuple(Arrays.asList((Object)key, value, output, timedOut));
      }
    };   
  }
 
  @Override
  protected void tearDown() throws Exception {
   
    if(dataDir.exists())
    {
      dataDir.delete();
    }
  }
 
  public void testPrepareToRead()
  {
    PigSplit split = null;
    RecordReader reader = EasyMock.createMock(SequenceFileRecordReader.class);
    EasyMock.replay(reader);
   
    underTest.script = "src/test/resources/echo.sh";
   
    try {
      underTest.prepareToRead(reader, split);
    } catch (IOException e) {     
      e.printStackTrace();
      fail("This should not fail");
    }
   
    assertTrue(underTest.dataDir.exists());
    assertTrue(reader == underTest.reader);
  }
 
  public void testPrepareToReadErrors()
  {
    underTest.script = "src/test/resources/doesNotExist.sh";
   
    try {
      underTest.prepareToRead(null, null);
      fail("This should fail, that file doesn't exist");
    } catch (Exception e) {     
     
    }
  }
 
  public void testGetInputFormat() throws IOException
  {
    InputFormat f = underTest.getInputFormat();
    assertEquals(f.getClass(), SequenceFileInputFormat.class);
  }
 
  public void testgetCommand()
  {
    underTest.programFile = new File("/tmp/myProgramFile");
    File inputFile = new File("/tmp/Hello.exe");
   
    String[] cmd = underTest.getCommand(inputFile);
    Arrays.equals(new String[]{"/tmp/myProgramFile", inputFile.getAbsolutePath()},  cmd);
  }
 
  public void testShouldContinue() throws IOException, InterruptedException
  {
    underTest.reader = EasyMock.createMock(SequenceFileRecordReader.class);
    EasyMock.expect(underTest.reader.nextKeyValue()).andReturn(true);
    EasyMock.replay(underTest.reader);
    assertTrue(underTest.shouldContinue());
   
    underTest.reader = EasyMock.createMock(SequenceFileRecordReader.class);
    EasyMock.expect(underTest.reader.nextKeyValue()).andReturn(false);
    EasyMock.replay(underTest.reader);
    assertFalse(underTest.shouldContinue());
  }
 
  public void testGetNext() throws IOException, InterruptedException
  {
    SequenceFileRecordReader reader = EasyMock.createMock(SequenceFileRecordReader.class);
    EasyMock.expect(reader.nextKeyValue()).andReturn(true);
    EasyMock.expect(reader.getCurrentKey()).andReturn(new Text("mykey1"));
    EasyMock.expect(reader.getCurrentValue()).andReturn(new BytesWritable("test123".getBytes()));
    EasyMock.replay(reader);
   
    underTest.script = "src/test/resources/echo.sh";
    underTest.prepareToRead(reader, null);
    Tuple tuple = underTest.getNext();
    assertEquals(4, tuple.size());
    assertEquals(tuple.get(0), new Text("mykey1"));
    assertEquals(tuple.get(1), new BytesWritable("test123".getBytes()));
    assertEquals(tuple.get(2), new File(underTest.dataDir, "mykey1").getAbsolutePath()+"\n");
    assertEquals(tuple.get(3), false);
   
    // returns null when no more tuples are available
    reader = EasyMock.createMock(SequenceFileRecordReader.class);
    EasyMock.expect(reader.nextKeyValue()).andReturn(false);
    EasyMock.replay(reader);
    underTest.reader = reader;
   
    tuple = underTest.getNext();
    assertNull(tuple);
  }
 
  public void testSetLocation() throws IOException
  {
    Job job = new Job();
    underTest.setLocation("/tmp/some/path", job);
    assertEquals("file:/tmp/some/path", job.getConfiguration().get("mapred.input.dir"));
  }
}
TOP

Related Classes of com.endgame.binarypig.loaders.AbstractExecutingLoaderTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.