/** * (c) Copyright 2012 WibiData, Inc. * * See the NOTICE file distributed with this work for additional * information regarding copyright ownership. * * Licensed 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. */ package org.kiji.mapreduce.tools; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import org.junit.Test; import org.kiji.mapreduce.tools.framework.JobIOSpecParseException; import org.kiji.mapreduce.tools.framework.JobOutputSpec; public class TestJobOutputSpec { @Test public void testNullPathConstructor() { final String location = "the-location"; JobOutputSpec spec = JobOutputSpec.create(JobOutputSpec.Format.KIJI, location, 1); assertEquals(JobOutputSpec.Format.KIJI, spec.getFormat()); assertEquals(location, spec.getLocation()); assertEquals(1, spec.getSplits()); } @Test public void testNormalConstructor() { JobOutputSpec spec = JobOutputSpec.create(JobOutputSpec.Format.TEXT, "/tmp/foo", 2); assertEquals(JobOutputSpec.Format.TEXT, spec.getFormat()); assertEquals("/tmp/foo", spec.getLocation()); assertEquals(2, spec.getSplits()); } @Test public void testParseKiji() { JobOutputSpec spec = JobOutputSpec.parse("kiji:kiji://hbase/instance/table@123"); assertEquals(JobOutputSpec.Format.KIJI, spec.getFormat()); assertEquals("kiji://hbase/instance/table", spec.getLocation()); assertEquals(123, spec.getSplits()); } @Test public void testParseKijiColon() { try { JobOutputSpec.parse("kiji:"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. [spec=kiji:]", jpe.getMessage()); } } @Test public void testParseKijiNoSplits() { try { JobOutputSpec.parse("kiji:kiji://hbase/instance/table"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. " + "[spec=kiji:kiji://hbase/instance/table]", jpe.getMessage()); } } @Test public void testParseText() { JobOutputSpec spec = JobOutputSpec.parse("text:/tmp/foo@1"); assertEquals(JobOutputSpec.Format.TEXT, spec.getFormat()); assertEquals("/tmp/foo", spec.getLocation()); assertEquals(1, spec.getSplits()); } @Test public void testParseHFile() { JobOutputSpec spec = JobOutputSpec.parse("hfile:/tmp/foo@8"); assertEquals(JobOutputSpec.Format.HFILE, spec.getFormat()); assertEquals("/tmp/foo", spec.getLocation()); assertEquals(8, spec.getSplits()); } @Test public void testParseHFileHDFS() { JobOutputSpec spec = JobOutputSpec.parse("hfile:hdfs://localhost:1234/tmp/foo@8"); assertEquals(JobOutputSpec.Format.HFILE, spec.getFormat()); assertEquals("hdfs://localhost:1234/tmp/foo", spec.getLocation()); assertEquals(8, spec.getSplits()); } @Test public void testParseHFileHDFSWithKiji() { JobOutputSpec spec = JobOutputSpec.parse("hfile:kiji://hbase/instance/table;hdfs://localhost:1234/tmp/foo@8"); assertEquals(JobOutputSpec.Format.HFILE, spec.getFormat()); assertEquals("kiji://hbase/instance/table;hdfs://localhost:1234/tmp/foo", spec.getLocation()); assertEquals(8, spec.getSplits()); } @Test public void testParseMapWithColon() { JobOutputSpec spec = JobOutputSpec.parse("map:hdfs://localhost:8000/tmp/foo@2"); assertEquals(JobOutputSpec.Format.MAP_FILE, spec.getFormat()); assertEquals("hdfs://localhost:8000/tmp/foo", spec.getLocation()); assertEquals(2, spec.getSplits()); } @Test public void testInvalidFormat() { try { JobOutputSpec.parse("invalid:hdfs://localhost:8000/tmp/foo"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. " + "[spec=invalid:hdfs://localhost:8000/tmp/foo]", jpe.getMessage()); } } @Test public void testMissingRequiredPath() { try { JobOutputSpec.parse("avro"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. [spec=avro]", jpe.getMessage()); } } @Test public void testMissingRequiredPathWithColon() { try { JobOutputSpec.parse("seq:"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. [spec=seq:]", jpe.getMessage()); } } @Test public void testMissingSplits() { try { JobOutputSpec.parse("seq:asdf"); fail("Should have gotten a JobIOSpecParseException."); } catch (JobIOSpecParseException jpe) { assertEquals("Invalid job output spec, expecting 'format:location@nsplit'. [spec=seq:asdf]", jpe.getMessage()); } } }