/* * 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. */ package org.apache.hadoop.hive.accumulo.columns; import java.util.Map.Entry; import org.apache.hadoop.hive.accumulo.AccumuloHiveConstants; import org.junit.Assert; import org.junit.Test; import com.google.common.collect.Maps; /** * */ public class TestColumnEncoding { @Test(expected = IllegalArgumentException.class) public void testInvalidCodeThrowsException() { ColumnEncoding.fromCode("foo"); } @Test public void testStringEncoding() { Assert.assertEquals(ColumnEncoding.STRING, ColumnEncoding.fromCode("s")); } @Test public void testBinaryEncoding() { Assert.assertEquals(ColumnEncoding.BINARY, ColumnEncoding.fromCode("b")); } @Test public void testMissingColumnEncoding() { Assert.assertFalse(ColumnEncoding.hasColumnEncoding("foo:bar")); } @Test public void testColumnEncodingSpecified() { Assert.assertTrue(ColumnEncoding.hasColumnEncoding("foo:bar#s")); } @Test public void testEscapedPoundIsNoEncodingSpecified() { Assert.assertFalse(ColumnEncoding.hasColumnEncoding("foo:b\\#ar")); } @Test public void testEscapedPoundWithRealPound() { Assert.assertTrue(ColumnEncoding.hasColumnEncoding("foo:b\\#ar#b")); } @Test public void testParse() { Assert.assertEquals(ColumnEncoding.STRING, ColumnEncoding.getFromMapping("foo:bar#s")); } @Test public void testParseWithEscapedPound() { Assert.assertEquals(ColumnEncoding.BINARY, ColumnEncoding.getFromMapping("fo\\#o:bar#b")); } @Test(expected = IllegalArgumentException.class) public void testMissingEncodingOnParse() { ColumnEncoding.getFromMapping("foo:bar"); } @Test public void testStripCode() { String mapping = "foo:bar"; Assert.assertEquals( mapping, ColumnEncoding.stripCode(mapping + AccumuloHiveConstants.POUND + ColumnEncoding.BINARY.getCode())); } @Test(expected = IllegalArgumentException.class) public void testStripNonExistentCodeFails() { ColumnEncoding.stripCode("foo:bar"); } @Test public void testStripCodeWithEscapedPound() { String mapping = "foo:ba\\#r"; Assert.assertEquals( mapping, ColumnEncoding.stripCode(mapping + AccumuloHiveConstants.POUND + ColumnEncoding.BINARY.getCode())); } @Test public void testMapEncoding() { Assert.assertFalse(ColumnEncoding.isMapEncoding("s")); Assert.assertFalse(ColumnEncoding.isMapEncoding("string")); Assert.assertFalse(ColumnEncoding.isMapEncoding("binary")); Assert.assertTrue(ColumnEncoding.isMapEncoding("s:s")); Assert.assertTrue(ColumnEncoding.isMapEncoding("s:string")); Assert.assertTrue(ColumnEncoding.isMapEncoding("string:s")); Assert.assertTrue(ColumnEncoding.isMapEncoding("string:string")); } @Test public void testMapEncodingParsing() { Entry<ColumnEncoding,ColumnEncoding> stringString = Maps.immutableEntry(ColumnEncoding.STRING, ColumnEncoding.STRING), stringBinary = Maps.immutableEntry(ColumnEncoding.STRING, ColumnEncoding.BINARY), binaryBinary = Maps.immutableEntry(ColumnEncoding.BINARY, ColumnEncoding.BINARY), binaryString = Maps.immutableEntry(ColumnEncoding.BINARY, ColumnEncoding.STRING); Assert.assertEquals(stringString, ColumnEncoding.getMapEncoding("s:s")); Assert.assertEquals(stringString, ColumnEncoding.getMapEncoding("s:string")); Assert.assertEquals(stringString, ColumnEncoding.getMapEncoding("string:s")); Assert.assertEquals(stringString, ColumnEncoding.getMapEncoding("string:string")); Assert.assertEquals(stringBinary, ColumnEncoding.getMapEncoding("s:b")); Assert.assertEquals(stringBinary, ColumnEncoding.getMapEncoding("string:b")); Assert.assertEquals(stringBinary, ColumnEncoding.getMapEncoding("s:binary")); Assert.assertEquals(stringBinary, ColumnEncoding.getMapEncoding("string:binary")); Assert.assertEquals(binaryString, ColumnEncoding.getMapEncoding("b:s")); Assert.assertEquals(binaryString, ColumnEncoding.getMapEncoding("b:string")); Assert.assertEquals(binaryString, ColumnEncoding.getMapEncoding("binary:s")); Assert.assertEquals(binaryString, ColumnEncoding.getMapEncoding("binary:string")); Assert.assertEquals(binaryBinary, ColumnEncoding.getMapEncoding("b:b")); Assert.assertEquals(binaryBinary, ColumnEncoding.getMapEncoding("binary:b")); Assert.assertEquals(binaryBinary, ColumnEncoding.getMapEncoding("b:binary")); Assert.assertEquals(binaryBinary, ColumnEncoding.getMapEncoding("binary:binary")); } }