/** * Test creating a pre-split table using the HexStringSplit algorithm. */ @Test public void testCreatePresplitTableHex() throws Exception { final List<byte[]> expectedBounds = new ArrayList<byte[]>(); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); expectedBounds.add("10000000".getBytes()); expectedBounds.add("20000000".getBytes()); expectedBounds.add("30000000".getBytes()); expectedBounds.add("40000000".getBytes()); expectedBounds.add("50000000".getBytes()); expectedBounds.add("60000000".getBytes()); expectedBounds.add("70000000".getBytes()); expectedBounds.add("80000000".getBytes()); expectedBounds.add("90000000".getBytes()); expectedBounds.add("a0000000".getBytes()); expectedBounds.add("b0000000".getBytes()); expectedBounds.add("c0000000".getBytes()); expectedBounds.add("d0000000".getBytes()); expectedBounds.add("e0000000".getBytes()); expectedBounds.add("f0000000".getBytes()); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); // Do table creation/pre-splitting and verification of region boundaries preSplitTableAndVerify(expectedBounds, HexStringSplit.class.getSimpleName(), "NewHexPresplitTable"); }
/** * Test creating a pre-split table using the HexStringSplit algorithm. */ @Test public void testCreatePresplitTableHex() throws Exception { final List<byte[]> expectedBounds = new ArrayList<byte[]>(); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); expectedBounds.add("10000000".getBytes()); expectedBounds.add("20000000".getBytes()); expectedBounds.add("30000000".getBytes()); expectedBounds.add("40000000".getBytes()); expectedBounds.add("50000000".getBytes()); expectedBounds.add("60000000".getBytes()); expectedBounds.add("70000000".getBytes()); expectedBounds.add("80000000".getBytes()); expectedBounds.add("90000000".getBytes()); expectedBounds.add("a0000000".getBytes()); expectedBounds.add("b0000000".getBytes()); expectedBounds.add("c0000000".getBytes()); expectedBounds.add("d0000000".getBytes()); expectedBounds.add("e0000000".getBytes()); expectedBounds.add("f0000000".getBytes()); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); // Do table creation/pre-splitting and verification of region boundaries preSplitTableAndVerify(expectedBounds, HexStringSplit.class.getSimpleName(), TableName.valueOf("NewHexPresplitTable")); }
/** * Unit tests for the HexStringSplit algorithm. Makes sure it divides up the * space of keys in the way that we expect. */ @Test public void unitTestHexStringSplit() { HexStringSplit splitter = new HexStringSplit(); // Check splitting while starting from scratch byte[][] twoRegionsSplits = splitter.split(2); assertEquals(1, twoRegionsSplits.length); assertArrayEquals(twoRegionsSplits[0], "80000000".getBytes()); byte[][] threeRegionsSplits = splitter.split(3); assertEquals(2, threeRegionsSplits.length); byte[] expectedSplit0 = "55555555".getBytes(); assertArrayEquals(expectedSplit0, threeRegionsSplits[0]); byte[] expectedSplit1 = "aaaaaaaa".getBytes(); assertArrayEquals(expectedSplit1, threeRegionsSplits[1]); // Check splitting existing regions that have start and end points byte[] splitPoint = splitter.split("10000000".getBytes(), "30000000".getBytes()); assertArrayEquals("20000000".getBytes(), splitPoint); byte[] lastRow = "ffffffff".getBytes(); assertArrayEquals(lastRow, splitter.lastRow()); byte[] firstRow = "00000000".getBytes(); assertArrayEquals(firstRow, splitter.firstRow()); // Halfway between 00... and 20... should be 10... splitPoint = splitter.split(firstRow, "20000000".getBytes()); assertArrayEquals(splitPoint, "10000000".getBytes()); // Halfway between df... and ff... should be ef.... splitPoint = splitter.split("dfffffff".getBytes(), lastRow); assertArrayEquals(splitPoint,"efffffff".getBytes()); }
/** * Test creating a pre-split table using the HexStringSplit algorithm. */ @Test public void testCreatePresplitTableHex() throws Exception { final List<byte[]> expectedBounds = new ArrayList<>(17); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); expectedBounds.add("10000000".getBytes()); expectedBounds.add("20000000".getBytes()); expectedBounds.add("30000000".getBytes()); expectedBounds.add("40000000".getBytes()); expectedBounds.add("50000000".getBytes()); expectedBounds.add("60000000".getBytes()); expectedBounds.add("70000000".getBytes()); expectedBounds.add("80000000".getBytes()); expectedBounds.add("90000000".getBytes()); expectedBounds.add("a0000000".getBytes()); expectedBounds.add("b0000000".getBytes()); expectedBounds.add("c0000000".getBytes()); expectedBounds.add("d0000000".getBytes()); expectedBounds.add("e0000000".getBytes()); expectedBounds.add("f0000000".getBytes()); expectedBounds.add(ArrayUtils.EMPTY_BYTE_ARRAY); // Do table creation/pre-splitting and verification of region boundaries preSplitTableAndVerify(expectedBounds, HexStringSplit.class.getSimpleName(), TableName.valueOf(name.getMethodName())); }
/** * Unit tests for the HexStringSplit algorithm. Makes sure it divides up the * space of keys in the way that we expect. */ @Test public void unitTestHexStringSplit() { HexStringSplit splitter = new HexStringSplit(); // Check splitting while starting from scratch byte[][] twoRegionsSplits = splitter.split(2); assertEquals(1, twoRegionsSplits.length); assertArrayEquals("80000000".getBytes(), twoRegionsSplits[0]); byte[][] threeRegionsSplits = splitter.split(3); assertEquals(2, threeRegionsSplits.length); byte[] expectedSplit0 = "55555555".getBytes(); assertArrayEquals(expectedSplit0, threeRegionsSplits[0]); byte[] expectedSplit1 = "aaaaaaaa".getBytes(); assertArrayEquals(expectedSplit1, threeRegionsSplits[1]); // Check splitting existing regions that have start and end points byte[] splitPoint = splitter.split("10000000".getBytes(), "30000000".getBytes()); assertArrayEquals("20000000".getBytes(), splitPoint); byte[] lastRow = "ffffffff".getBytes(); assertArrayEquals(lastRow, splitter.lastRow()); byte[] firstRow = "00000000".getBytes(); assertArrayEquals(firstRow, splitter.firstRow()); // Halfway between 00... and 20... should be 10... splitPoint = splitter.split(firstRow, "20000000".getBytes()); assertArrayEquals("10000000".getBytes(), splitPoint); // Halfway between df... and ff... should be ef.... splitPoint = splitter.split("dfffffff".getBytes(), lastRow); assertArrayEquals("efffffff".getBytes(), splitPoint); // Check splitting region with multiple mappers per region byte[][] splits = splitter.split("00000000".getBytes(), "30000000".getBytes(), 3, false); assertEquals(2, splits.length); assertArrayEquals("10000000".getBytes(), splits[0]); assertArrayEquals("20000000".getBytes(), splits[1]); splits = splitter.split("00000000".getBytes(), "20000000".getBytes(), 2, true); assertEquals(3, splits.length); assertArrayEquals("10000000".getBytes(), splits[1]); }