This is an automated email from the ASF dual-hosted git repository.

tabish121 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-protonj2.git


The following commit(s) were added to refs/heads/main by this push:
     new 208bf3ea PROTON-2997 Fix array encoding for Timestamp types
208bf3ea is described below

commit 208bf3ea152e90b6cc907b2324fff5a00ad2abba
Author: Timothy Bish <[email protected]>
AuthorDate: Mon Nov 2 17:08:14 2026 -0500

    PROTON-2997 Fix array encoding for Timestamp types
    
    Write the correct encoding code and update the tests to correctly detect
    the encode / decode expectations
---
 .../encoders/primitives/TimestampTypeEncoder.java  |  2 +-
 .../codec/primitives/TimestampTypeCodecTest.java   | 38 +++++++++++++++++++---
 2 files changed, 35 insertions(+), 5 deletions(-)

diff --git 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/encoders/primitives/TimestampTypeEncoder.java
 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/encoders/primitives/TimestampTypeEncoder.java
index 2a7c94c3..c27015ed 100644
--- 
a/protonj2/src/main/java/org/apache/qpid/protonj2/codec/encoders/primitives/TimestampTypeEncoder.java
+++ 
b/protonj2/src/main/java/org/apache/qpid/protonj2/codec/encoders/primitives/TimestampTypeEncoder.java
@@ -61,7 +61,7 @@ public final class TimestampTypeEncoder extends 
AbstractPrimitiveTypeEncoder<Dat
 
     @Override
     public void writeRawArray(ProtonBuffer buffer, EncoderState state, 
Object[] values) {
-        buffer.writeByte(EncodingCodes.LONG);
+        buffer.writeByte(EncodingCodes.TIMESTAMP);
         for (Object value : values) {
             buffer.writeLong(((Date) value).getTime());
         }
diff --git 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/TimestampTypeCodecTest.java
 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/TimestampTypeCodecTest.java
index 10e52c90..f0ee8b62 100644
--- 
a/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/TimestampTypeCodecTest.java
+++ 
b/protonj2/src/test/java/org/apache/qpid/protonj2/codec/primitives/TimestampTypeCodecTest.java
@@ -17,6 +17,7 @@
 package org.apache.qpid.protonj2.codec.primitives;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -248,9 +249,10 @@ public class TimestampTypeCodecTest extends 
CodecTestSupport {
 
         assertNotNull(result);
         assertTrue(result.getClass().isArray());
-        assertTrue(result.getClass().getComponentType().isPrimitive());
+        assertFalse(result.getClass().getComponentType().isPrimitive());
+        assertEquals(Long.class, result.getClass().getComponentType());
 
-        long[] array = (long[]) result;
+        Long[] array = (Long[]) result;
         assertEquals(size, array.length);
 
         for (int i = 0; i < size; ++i) {
@@ -285,9 +287,10 @@ public class TimestampTypeCodecTest extends 
CodecTestSupport {
 
         assertNotNull(result);
         assertTrue(result.getClass().isArray());
-        assertTrue(result.getClass().getComponentType().isPrimitive());
+        assertFalse(result.getClass().getComponentType().isPrimitive());
+        assertEquals(Long.class, result.getClass().getComponentType());
 
-        long[] array = (long[]) result;
+        Long[] array = (Long[]) result;
         assertEquals(source.length, array.length);
     }
 
@@ -315,4 +318,31 @@ public class TimestampTypeCodecTest extends 
CodecTestSupport {
             assertEquals(8, typeDecoder.readSize(buffer, decoderState));
         }
     }
+
+    @Test
+    public void testEncodeArrayOfTimestampsAndValidateOutput() throws 
IOException {
+        ProtonBuffer buffer = 
ProtonBufferAllocator.defaultAllocator().allocate();
+        Random random = new Random();
+        random.setSeed(System.nanoTime());
+
+        final int size = 10;
+
+        Date[] source = new Date[size];
+        for (int i = 0; i < size; ++i) {
+            source[i] = new Date(random.nextLong());
+        }
+
+        encoder.writeArray(buffer, encoderState, source);
+
+        assertEquals(EncodingCodes.ARRAY32, buffer.readByte());
+        // Size = count + type code + elements (10 * Long.BYTES)
+        assertEquals(Integer.BYTES + Byte.BYTES + size * Long.BYTES, 
buffer.readInt());
+        assertEquals(10, buffer.readInt());
+
+        assertEquals(EncodingCodes.TIMESTAMP, buffer.readByte());
+
+        for (int i = 0; i < size; ++i) {
+            assertEquals(source[i].getTime(), buffer.readLong());
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to