Java tutorial
/** * Copyright 2012 Willet Inc. * * 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 com.willetinc.hadoop.mapreduce.dynamodb; import static org.easymock.EasyMock.*; import static org.junit.Assert.assertEquals; import java.nio.ByteBuffer; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.apache.commons.codec.binary.Base64; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.mapreduce.InputSplit; import org.junit.Test; import com.amazonaws.services.dynamodb.model.AttributeValue; import com.willetinc.hadoop.mapreduce.dynamodb.BinarySplitter; import com.willetinc.hadoop.mapreduce.dynamodb.DynamoDBQueryInputFormat; import com.willetinc.hadoop.mapreduce.dynamodb.Types; public class BinarySplitterTest { @Test public void testSplitInteger() { final int NUM_RANGE_SPLITS = 2; final String VALUE = "007"; final Types hashKeyType = Types.NUMBER; final AttributeValue hashKeyValue = new AttributeValue().withN(VALUE); final Types rangeKeyType = Types.STRING; final AttributeValue minRangeKeyValue = new AttributeValue() .withB(ByteBuffer.wrap(new byte[] { 0x0, 0x0 })); final AttributeValue maxRangeKeyValue = new AttributeValue() .withB(ByteBuffer.wrap(new byte[] { 0x0, 0xF })); Configuration conf = createMock(Configuration.class); BinarySplitter splitter = new BinarySplitter(); List<InputSplit> inputSplits = new ArrayList<InputSplit>(); splitter.generateRangeKeySplits(conf, inputSplits, hashKeyType, hashKeyValue, rangeKeyType, minRangeKeyValue, maxRangeKeyValue, NUM_RANGE_SPLITS); assertEquals(2, inputSplits.size()); for (InputSplit inputSplit : inputSplits) { DynamoDBQueryInputFormat.DynamoDBQueryInputSplit split = (DynamoDBQueryInputFormat.DynamoDBQueryInputSplit) inputSplit; Iterator<AttributeValue> itr = split.getRangeKeyValues().iterator(); System.out.print(split.getRangeKeyOperator() + " "); System.out.print(Base64.encodeBase64String(itr.next().getB().array()) + " AND "); System.out.println(Base64.encodeBase64String(itr.next().getB().array())); } } @Test public void testCompareStrings() { assertEquals(0, BinarySplitter.compareBytes(new byte[] { 0xA }, new byte[] { 0xA })); assertEquals(-1, BinarySplitter.compareBytes(new byte[] { 0xA }, new byte[] { 0xA, 0xA })); assertEquals(1, BinarySplitter.compareBytes(new byte[] { 0xA, 0xA }, new byte[] { 0xA })); assertEquals(-1, BinarySplitter.compareBytes(new byte[] { 0xA }, new byte[] { 0xA, 0x0 })); assertEquals(1, BinarySplitter.compareBytes(new byte[] { 0xA, 0x0 }, new byte[] { 0xA })); assertEquals(-1, BinarySplitter.compareBytes(new byte[] { 0xA, 0xA }, new byte[] { 0xA, 0xB })); } }