|
5 | 5 | import org.junit.Test;
|
6 | 6 |
|
7 | 7 | import java.io.IOException;
|
| 8 | +import java.nio.ByteBuffer; |
8 | 9 | import java.util.BitSet;
|
9 | 10 | import java.util.stream.IntStream;
|
10 |
| -import java.util.stream.Stream; |
11 | 11 |
|
12 | 12 | import org.junit.Assert;
|
13 | 13 |
|
| 14 | +import static junit.framework.Assert.assertEquals; |
| 15 | + |
14 | 16 | public class TableMapEventMetadataDeserializerTest {
|
15 | 17 | private static final byte[] DATA = {
|
16 | 18 | (byte)0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x74, 0x70, 0x63, 0x63, 0x32, 0x00, 0x09,
|
@@ -38,6 +40,48 @@ public void deserialize_shouldProperlyDeserializeData_withBinaryReader() throws
|
38 | 40 | assertEventData(actual);
|
39 | 41 | }
|
40 | 42 |
|
| 43 | + @Test |
| 44 | + public void readBooleanList_shouldConsistentlyDeserializeBitSet() throws IOException{ |
| 45 | + ReadBooleanListTestData[] testData = { |
| 46 | + // 01100101 -> 01100xxx -> {1, 2} |
| 47 | + new ReadBooleanListTestData(new byte[]{0x65}, 5, new int[]{1, 2}), |
| 48 | + // 01100101 -> 01100101 -> {1, 2, 5, 7} |
| 49 | + new ReadBooleanListTestData(new byte[]{0x65}, 8, new int[]{1, 2, 5, 7}), |
| 50 | + // 01011101 00010001 -> 01011101 000xxxxx -> {1, 3, 4, 5, 7} |
| 51 | + new ReadBooleanListTestData(new byte[]{0x5d, 0x11}, 11, new int[]{1, 3, 4, 5, 7}), |
| 52 | + // 01001000 11111111 -> 01001000 1111111x -> {1, 4, 8, 9, 10, 11, 12, 13, 14} |
| 53 | + new ReadBooleanListTestData(new byte[]{0x48, (byte)0xff}, 15, new int[]{1, 4, 8, 9, 10, 11, 12, 13, 14}), |
| 54 | + // 01010101 01101100 01000011 -> 10111010 10001000 0100001x -> {1, 3, 5, 7, 9, 10, 12, 13, 17, 22} |
| 55 | + new ReadBooleanListTestData(new byte[]{0x55, 0x6c, 0x43}, 23, new int[]{1, 3, 5, 7, 9, 10, 12, 13, 17, 22}), |
| 56 | + }; |
| 57 | + |
| 58 | + for (int i = 0; i < testData.length; i++) { |
| 59 | + ReadBooleanListTestData currentTest = testData[i]; |
| 60 | + BinaryLogEventDataReader reader = new BinaryLogEventDataReader(ByteBuffer.wrap(currentTest.data)); |
| 61 | + ByteArrayInputStream inputStream = new ByteArrayInputStream(currentTest.data); |
| 62 | + |
| 63 | + BitSet readerBitSet = TableMapEventMetadataDeserializer.readBooleanList(reader, currentTest.length); |
| 64 | + BitSet streamBitSet = TableMapEventMetadataDeserializer.readBooleanList(inputStream, currentTest.length); |
| 65 | + |
| 66 | + BitSet expectedBitSet = IntStream.of(currentTest.expectedBitsSet).collect(BitSet::new, BitSet::set, BitSet::or); |
| 67 | + |
| 68 | + assertEquals(String.format("Unexpected bits set in case %d", i), expectedBitSet, readerBitSet); |
| 69 | + assertEquals(String.format("Reader and stream results don't match in case %d", i), streamBitSet, readerBitSet); |
| 70 | + } |
| 71 | + } |
| 72 | + |
| 73 | + public static class ReadBooleanListTestData { |
| 74 | + public final byte[] data; |
| 75 | + public final int length; |
| 76 | + public final int[] expectedBitsSet; |
| 77 | + |
| 78 | + public ReadBooleanListTestData(byte[] data, int length, int[] expectedBitsSet) { |
| 79 | + this.data = data; |
| 80 | + this.length = length; |
| 81 | + this.expectedBitsSet = expectedBitsSet; |
| 82 | + } |
| 83 | + } |
| 84 | + |
41 | 85 | private static void assertEventData(TableMapEventData actual) {
|
42 | 86 | Assert.assertEquals(134L, actual.getTableId());
|
43 | 87 | Assert.assertEquals("tpcc2", actual.getDatabase());
|
|
0 commit comments