encodeElementsList(message, out);\r
int endWriterIndex = out.writerIndex();\r
int writtenBytesDiff = computeLength(message) - (endWriterIndex - startWriterIndex);\r
- LOGGER.info("writtenbytes: " + writtenBytesDiff);\r
+ LOGGER.debug("writtenbytes: " + writtenBytesDiff);\r
ByteBufUtils.padBuffer(writtenBytesDiff, out);\r
}\r
\r
if (elements != null) {\r
for (Elements element : elements) {\r
if (HelloElementType.VERSIONBITMAP.equals(element.getType())) {\r
- length += computeVersionBitmapLength(element);\r
+ int bitmapLength = computeVersionBitmapLength(element);\r
+ int paddingRemainder = bitmapLength % EncodeConstants.PADDING;\r
+ if (paddingRemainder != 0) {\r
+ bitmapLength += EncodeConstants.PADDING - paddingRemainder;\r
+ }\r
+ length += bitmapLength;\r
}\r
}\r
- int paddingRemainder = length % EncodeConstants.PADDING;\r
- if (paddingRemainder != 0) {\r
- length += EncodeConstants.PADDING - paddingRemainder;\r
- }\r
}\r
return length;\r
}\r
\r
private static void encodeElementsList(HelloInput message, ByteBuf output) {\r
int[] versionBitmap;\r
- int arraySize = 0;\r
if (message.getElements() != null) {\r
for (Elements currElement : message.getElements()) {\r
output.writeShort(currElement.getType().getIntValue());\r
- \r
if (currElement.getType().equals(HelloElementType.VERSIONBITMAP)) {\r
short bitmapLength = computeVersionBitmapLength(currElement);\r
output.writeShort(bitmapLength);\r
versionBitmap = ByteBufUtils.fillBitMaskFromList(currElement.getVersionBitmap());\r
- arraySize = (versionBitmap.length/Integer.SIZE);\r
- for (int i = 0; i < arraySize; i++) {\r
+ LOGGER.info("vbs: " + versionBitmap.length);\r
+ for (int i = 0; i < versionBitmap.length; i++) {\r
+ LOGGER.info(Integer.toBinaryString(versionBitmap[i]));\r
output.writeInt(versionBitmap[i]);\r
}\r
- int padding = bitmapLength - arraySize * 4 - HELLO_ELEMENT_HEADER_SIZE;\r
+ int padding = bitmapLength - versionBitmap.length * 4 - HELLO_ELEMENT_HEADER_SIZE;\r
ByteBufUtils.padBuffer(padding , output);\r
}\r
} \r
private static short computeVersionBitmapLength(Elements element) {\r
short elementlength = HELLO_ELEMENT_HEADER_SIZE;\r
if (!element.getVersionBitmap().isEmpty()) {\r
- elementlength += ((element.getVersionBitmap().size() - 1) / Integer.SIZE + 1) * 4;\r
+ elementlength += ((element.getVersionBitmap().size() - 1) / Integer.SIZE + 1) * (Integer.SIZE / Byte.SIZE);\r
}\r
return elementlength;\r
}\r
* @throws Exception \r
*/\r
@Test\r
- public void testWithElementsSet() throws Exception {\r
+ public void testWith4BitVersionBitmap() throws Exception {\r
+ int lengthOfBitmap = 4;\r
HelloInputBuilder builder = new HelloInputBuilder();\r
BufferHelper.setupHeader(builder);\r
- List<Elements> expectedElement = createElement();\r
+ List<Elements> expectedElement = createElement(lengthOfBitmap);\r
builder.setElements(expectedElement);\r
HelloInput message = builder.build();\r
\r
BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
Elements element = readElement(out).get(0);\r
Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType());\r
- LOGGER.debug(expectedElement.get(0).getVersionBitmap().toString());\r
- LOGGER.debug(element.getVersionBitmap().toString());\r
- Assert.assertArrayEquals("Wrong element bitmap", expectedElement.get(0).getVersionBitmap().toArray(), element.getVersionBitmap().toArray());\r
+ Elements comparation = createComparationElement(lengthOfBitmap).get(0);\r
+ Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray());\r
}\r
\r
- private static List<Elements> createElement() {\r
+ /**\r
+ * Testing of {@link HelloInputMessageFactory} for correct translation from POJO\r
+ * @throws Exception \r
+ */\r
+ @Test\r
+ public void testWith64BitVersionBitmap() throws Exception {\r
+ int lengthOfBitmap = 64;\r
+ HelloInputBuilder builder = new HelloInputBuilder();\r
+ BufferHelper.setupHeader(builder);\r
+ List<Elements> expectedElement = createElement(lengthOfBitmap);\r
+ builder.setElements(expectedElement);\r
+ HelloInput message = builder.build();\r
+ \r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ HelloInputMessageFactory factory = HelloInputMessageFactory.getInstance();\r
+ factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+ LOGGER.debug("bytebuf: " + ByteBufUtils.byteBufToHexString(out));\r
+ \r
+ BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
+ Elements element = readElement(out).get(0);\r
+ Assert.assertEquals("Wrong element type", expectedElement.get(0).getType(), element.getType());\r
+ Elements comparation = createComparationElement(lengthOfBitmap).get(0);\r
+ Assert.assertArrayEquals("Wrong element bitmap", comparation.getVersionBitmap().toArray(), element.getVersionBitmap().toArray());\r
+ }\r
+ \r
+ private static List<Elements> createElement(int lengthOfBitmap) {\r
ElementsBuilder elementsBuilder = new ElementsBuilder();\r
List<Elements> elementsList = new ArrayList<>();\r
List<Boolean> booleanList = new ArrayList<>();\r
-\r
- for (int i = 0; i < 64; i++) {\r
+ for (int i = 0; i < lengthOfBitmap; i++) {\r
booleanList.add(true);\r
}\r
-\r
elementsBuilder.setType(HelloElementType.forValue(1));\r
elementsBuilder.setVersionBitmap(booleanList);\r
elementsList.add(elementsBuilder.build());\r
- \r
+ return elementsList;\r
+ }\r
+ \r
+ private static List<Elements> createComparationElement(int lengthOfBitmap) {\r
+ ElementsBuilder elementsBuilder = new ElementsBuilder();\r
+ List<Elements> elementsList = new ArrayList<>();\r
+ List<Boolean> booleanList = new ArrayList<>();\r
+ for (int i = 0; i < lengthOfBitmap; i++) {\r
+ booleanList.add(true);\r
+ }\r
+ if ((lengthOfBitmap % Integer.SIZE) != 0) {\r
+ for (int i = 0; i < (Integer.SIZE - (lengthOfBitmap % Integer.SIZE)); i++) {\r
+ booleanList.add(false);\r
+ }\r
+ }\r
+ LOGGER.debug("boolsize " + booleanList.size());\r
+ elementsBuilder.setType(HelloElementType.forValue(1));\r
+ elementsBuilder.setVersionBitmap(booleanList);\r
+ elementsList.add(elementsBuilder.build());\r
return elementsList;\r
}\r
\r