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

dinglei pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/rocketmq.git


The following commit(s) were added to refs/heads/develop by this push:
     new 8167608334 [ISSUE #8503] Add test cases for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer (#8504)
8167608334 is described below

commit 8167608334c901bd85482904ed203a26ac8950e4
Author: 我是管小亮_V0x3f <[email protected]>
AuthorDate: Thu Aug 8 10:47:14 2024 +0800

    [ISSUE #8503] Add test cases for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer (#8504)
    
    * Which Issue(s) This PR Fixes
    add test case for AclConfig in commom module
    Fixes #8417
    
    Brief Description
    add test case for AclConfig in commom module by using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
    
    * Which Issue(s) This PR Fixes
    add test case for AclConfig in commom module
    Fixes #8476
    
    Brief Description
    add test case for org.apache.rocketmq.common.attribute in commom module by 
using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
    
    * Which Issue(s) This PR Fixes
    add test case for AclConfig in commom module
    Fixes #8476
    
    Brief Description
    add test case for org.apache.rocketmq.common.attribute in commom module by 
using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
    
    * Which Issue(s) This PR Fixes
    Add test cases for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer
    Fixes apache#8503
    
    Brief Description
    add test case for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer in commom module 
by using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
    
    * Which Issue(s) This PR Fixes
    Add test cases for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer
    Fixes #8503
    
    Brief Description
    add test case for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer in commom module 
by using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
    
    * Which Issue(s) This PR Fixes
    Add test cases for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer
    Fixes #8503
    
    Brief Description
    add test case for 
org.apache.rocketmq.common.chain/coldstr/compression/consumer in commom module 
by using tongyi tools.
    
    How Did You Test This Change?
    run test case successfull.
---
 .../rocketmq/common/chain/HandlerChainTest.java    |  65 +++++++++++++
 .../common/coldctr/AccAndTimeStampTest.java        |  70 ++++++++++++++
 .../common/compression/CompressionTypeTest.java    |  60 ++++++++++++
 .../common/compression/CompressorFactoryTest.java  |  42 +++++++++
 .../common/compression/Lz4CompressorTest.java      |  53 +++++++++++
 .../common/compression/ZlibCompressorTest.java     |  53 +++++++++++
 .../common/compression/ZstdCompressorTest.java     |  78 ++++++++++++++++
 .../common/consumer/ReceiptHandleTest.java         | 103 +++++++++++++++++++++
 8 files changed, 524 insertions(+)

diff --git 
a/common/src/test/java/org/apache/rocketmq/common/chain/HandlerChainTest.java 
b/common/src/test/java/org/apache/rocketmq/common/chain/HandlerChainTest.java
new file mode 100644
index 0000000000..3a8499ebad
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/chain/HandlerChainTest.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.chain;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+public class HandlerChainTest {
+
+    private HandlerChain<Integer, String> handlerChain;
+    private Handler<Integer, String> handler1;
+    private Handler<Integer, String> handler2;
+
+    @Before
+    public void setUp() {
+        handlerChain = HandlerChain.create();
+        handler1 = (t, chain) -> "Handler1";
+        handler2 = (t, chain) -> null;
+    }
+
+    @Test
+    public void testHandle_withEmptyChain() {
+        handlerChain.addNext(handler1);
+        handlerChain.handle(1);
+        assertNull("Expected null since the handler chain is empty", 
handlerChain.handle(2));
+    }
+
+    @Test
+    public void testHandle_withNonEmptyChain() {
+        handlerChain.addNext(handler1);
+
+        String result = handlerChain.handle(1);
+
+        assertEquals("Handler1", result);
+    }
+
+    @Test
+    public void testHandle_withMultipleHandlers() {
+        handlerChain.addNext(handler1);
+        handlerChain.addNext(handler2);
+
+        String result1 = handlerChain.handle(1);
+        String result2 = handlerChain.handle(2);
+
+        assertEquals("Handler1", result1);
+        assertNull("Expected null since there are no more handlers", result2);
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/coldctr/AccAndTimeStampTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/coldctr/AccAndTimeStampTest.java
new file mode 100644
index 0000000000..01bb4ae370
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/coldctr/AccAndTimeStampTest.java
@@ -0,0 +1,70 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.coldctr;
+
+import java.util.concurrent.atomic.AtomicLong;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class AccAndTimeStampTest {
+
+    private AccAndTimeStamp accAndTimeStamp;
+
+    @Before
+    public void setUp() {
+        accAndTimeStamp = new AccAndTimeStamp(new AtomicLong());
+    }
+
+    @Test
+    public void testInitialValues() {
+        assertEquals("Cold accumulator should be initialized to 0", 0, 
accAndTimeStamp.getColdAcc().get());
+        assertTrue("Last cold read time should be initialized to current 
time", accAndTimeStamp.getLastColdReadTimeMills() >= System.currentTimeMillis() 
- 1000);
+        assertTrue("Create time should be initialized to current time", 
accAndTimeStamp.getCreateTimeMills() >= System.currentTimeMillis() - 1000);
+    }
+
+    @Test
+    public void testSetColdAcc() {
+        AtomicLong newColdAcc = new AtomicLong(100L);
+        accAndTimeStamp.setColdAcc(newColdAcc);
+        assertEquals("Cold accumulator should be set to new value", 
newColdAcc, accAndTimeStamp.getColdAcc());
+    }
+
+    @Test
+    public void testSetLastColdReadTimeMills() {
+        long newLastColdReadTimeMills = System.currentTimeMillis() + 1000;
+        accAndTimeStamp.setLastColdReadTimeMills(newLastColdReadTimeMills);
+        assertEquals("Last cold read time should be set to new value", 
newLastColdReadTimeMills, 
accAndTimeStamp.getLastColdReadTimeMills().longValue());
+    }
+
+    @Test
+    public void testSetCreateTimeMills() {
+        long newCreateTimeMills = System.currentTimeMillis() + 2000;
+        accAndTimeStamp.setCreateTimeMills(newCreateTimeMills);
+        assertEquals("Create time should be set to new value", 
newCreateTimeMills, accAndTimeStamp.getCreateTimeMills().longValue());
+    }
+
+    @Test
+    public void testToStringContainsCorrectInformation() {
+        String toStringOutput = accAndTimeStamp.toString();
+        assertTrue("ToString should contain cold accumulator value", 
toStringOutput.contains("coldAcc=" + accAndTimeStamp.getColdAcc()));
+        assertTrue("ToString should contain last cold read time", 
toStringOutput.contains("lastColdReadTimeMills=" + 
accAndTimeStamp.getLastColdReadTimeMills()));
+        assertTrue("ToString should contain create time", 
toStringOutput.contains("createTimeMills=" + 
accAndTimeStamp.getCreateTimeMills()));
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/compression/CompressionTypeTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/compression/CompressionTypeTest.java
new file mode 100644
index 0000000000..e0ec18fd44
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/compression/CompressionTypeTest.java
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.compression;
+
+import org.apache.rocketmq.common.sysflag.MessageSysFlag;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class CompressionTypeTest {
+
+    @Test
+    public void testCompressionTypeValues() {
+        assertEquals(1, CompressionType.LZ4.getValue(), "LZ4 value should be 
1");
+        assertEquals(2, CompressionType.ZSTD.getValue(), "ZSTD value should be 
2");
+        assertEquals(3, CompressionType.ZLIB.getValue(), "ZLIB value should be 
3");
+    }
+
+    @Test
+    public void testCompressionTypeOf() {
+        assertEquals(CompressionType.LZ4, CompressionType.of("LZ4"), 
"CompressionType.of(LZ4) should return LZ4");
+        assertEquals(CompressionType.ZSTD, CompressionType.of("ZSTD"), 
"CompressionType.of(ZSTD) should return ZSTD");
+        assertEquals(CompressionType.ZLIB, CompressionType.of("ZLIB"), 
"CompressionType.of(ZLIB) should return ZLIB");
+
+        assertThrows(RuntimeException.class, () -> 
CompressionType.of("UNKNOWN"), "Unsupported compression type should throw 
RuntimeException");
+    }
+
+    @Test
+    public void testCompressionTypeFindByValue() {
+        assertEquals(CompressionType.LZ4, CompressionType.findByValue(1), 
"CompressionType.findByValue(1) should return LZ4");
+        assertEquals(CompressionType.ZSTD, CompressionType.findByValue(2), 
"CompressionType.findByValue(2) should return ZSTD");
+        assertEquals(CompressionType.ZLIB, CompressionType.findByValue(3), 
"CompressionType.findByValue(3) should return ZLIB");
+
+        assertEquals(CompressionType.ZLIB, CompressionType.findByValue(0), 
"CompressionType.findByValue(0) should return ZLIB for backward compatibility");
+
+        assertThrows(RuntimeException.class, () -> 
CompressionType.findByValue(99), "Invalid value should throw RuntimeException");
+    }
+
+    @Test
+    public void testCompressionFlag() {
+        assertEquals(MessageSysFlag.COMPRESSION_LZ4_TYPE, 
CompressionType.LZ4.getCompressionFlag(), "LZ4 compression flag is incorrect");
+        assertEquals(MessageSysFlag.COMPRESSION_ZSTD_TYPE, 
CompressionType.ZSTD.getCompressionFlag(), "ZSTD compression flag is 
incorrect");
+        assertEquals(MessageSysFlag.COMPRESSION_ZLIB_TYPE, 
CompressionType.ZLIB.getCompressionFlag(), "ZLIB compression flag is 
incorrect");
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/compression/CompressorFactoryTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/compression/CompressorFactoryTest.java
new file mode 100644
index 0000000000..e150fb2f7a
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/compression/CompressorFactoryTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.compression;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CompressorFactoryTest {
+
+    @Test
+    public void testGetCompressor_ReturnsNonNull() {
+        for (CompressionType type : CompressionType.values()) {
+            Compressor compressor = CompressorFactory.getCompressor(type);
+            Assert.assertNotNull("Compressor should not be null for type " + 
type, compressor);
+        }
+    }
+
+    @Test
+    public void testGetCompressor_ReturnsCorrectType() {
+        for (CompressionType type : CompressionType.values()) {
+            Compressor compressor = CompressorFactory.getCompressor(type);
+            Assert.assertTrue("Compressor type mismatch for " + type,
+                compressor instanceof Lz4Compressor && type == 
CompressionType.LZ4 ||
+                    compressor instanceof ZstdCompressor && type == 
CompressionType.ZSTD ||
+                    compressor instanceof ZlibCompressor && type == 
CompressionType.ZLIB);
+        }
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/compression/Lz4CompressorTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/compression/Lz4CompressorTest.java
new file mode 100644
index 0000000000..ca59025c13
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/compression/Lz4CompressorTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.compression;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import org.junit.Test;
+
+public class Lz4CompressorTest {
+
+    private static final String TEST_STRING = "The quick brown fox jumps over 
the lazy dog";
+
+    @Test
+    public void testCompressAndDecompress() throws Exception {
+        byte[] originalData = TEST_STRING.getBytes();
+        Compressor compressor = new Lz4Compressor();
+        byte[] compressedData = compressor.compress(originalData, 1);
+        assertTrue("Compressed data should be bigger than original", 
compressedData.length > originalData.length);
+
+        byte[] decompressedData = compressor.decompress(compressedData);
+        assertArrayEquals("Decompressed data should match original data", 
originalData, decompressedData);
+    }
+
+    @Test
+    public void testCompressWithIOException() throws Exception {
+        byte[] originalData = new byte[] {1, 2, 3};
+        Compressor compressor = new Lz4Compressor();
+        compressor.compress(originalData, 1);
+    }
+
+    @Test(expected = IOException.class)
+    public void testDecompressWithIOException() throws Exception {
+        byte[] compressedData = new byte[] {1, 2, 3};
+        Compressor compressor = new Lz4Compressor();
+        compressor.decompress(compressedData);
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/compression/ZlibCompressorTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/compression/ZlibCompressorTest.java
new file mode 100644
index 0000000000..f46ac7c669
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/compression/ZlibCompressorTest.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.compression;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import org.junit.Test;
+
+public class ZlibCompressorTest {
+
+    private static final String TEST_STRING = "The quick brown fox jumps over 
the lazy dog";
+
+    @Test
+    public void testCompressionAndDecompression() throws Exception {
+        byte[] originalData = TEST_STRING.getBytes();
+        ZlibCompressor compressor = new ZlibCompressor();
+        byte[] compressedData = compressor.compress(originalData, 0);
+        assertTrue("Compressed data should be bigger than original", 
compressedData.length > originalData.length);
+
+        byte[] decompressedData = compressor.decompress(compressedData);
+        assertArrayEquals("Decompressed data should match original", 
originalData, decompressedData);
+    }
+
+    @Test
+    public void testCompressionFailureWithInvalidData() throws Exception {
+        byte[] originalData = new byte[] {0, 1, 2, 3, 4};
+        ZlibCompressor compressor = new ZlibCompressor();
+        compressor.compress(originalData, 0);
+    }
+
+    @Test(expected = IOException.class)
+    public void testDecompressionFailureWithInvalidData() throws Exception {
+        byte[] compressedData = new byte[] {0, 1, 2, 3, 4};
+        ZlibCompressor compressor = new ZlibCompressor();
+        compressor.decompress(compressedData); // Invalid compressed data
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/compression/ZstdCompressorTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/compression/ZstdCompressorTest.java
new file mode 100644
index 0000000000..574e128181
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/compression/ZstdCompressorTest.java
@@ -0,0 +1,78 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.compression;
+
+import java.io.IOException;
+import org.junit.Test;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ZstdCompressorTest {
+
+    @Test
+    public void testCompressAndDecompress() throws IOException {
+        byte[] originalData = "RocketMQ is awesome!".getBytes();
+        ZstdCompressor compressor = new ZstdCompressor();
+        byte[] compressedData = compressor.compress(originalData, 1);
+        assertTrue("Compressed data should be bigger than original", 
compressedData.length > originalData.length);
+
+        byte[] decompressedData = compressor.decompress(compressedData);
+        assertArrayEquals("Decompressed data should match original data", 
originalData, decompressedData);
+    }
+
+    @Test
+    public void testCompressWithInvalidData() throws IOException {
+        byte[] invalidData = new byte[] {-1, -1, -1, -1};
+        ZstdCompressor compressor = new ZstdCompressor();
+        compressor.compress(invalidData, 1);
+    }
+
+    @Test(expected = IOException.class)
+    public void testDecompressWithInvalidData() throws IOException {
+        byte[] invalidData = new byte[] {-1, -1, -1, -1};
+        ZstdCompressor compressor = new ZstdCompressor();
+        compressor.decompress(invalidData);
+    }
+
+    @Test
+    public void testCompressAndDecompressEmptyString() throws IOException {
+        byte[] originalData = "".getBytes();
+        ZstdCompressor compressor = new ZstdCompressor();
+        byte[] compressedData = compressor.compress(originalData, 1);
+        assertTrue("Compressed data for empty string should not be empty", 
compressedData.length > 0);
+
+        byte[] decompressedData = compressor.decompress(compressedData);
+        assertArrayEquals("Decompressed data for empty string should match 
original", originalData, decompressedData);
+    }
+
+    @Test
+    public void testCompressAndDecompressLargeData() throws IOException {
+        StringBuilder largeStringBuilder = new StringBuilder();
+        for (int i = 0; i < 10000; i++) {
+            largeStringBuilder.append("RocketMQ is awesome! ");
+        }
+        byte[] originalData = largeStringBuilder.toString().getBytes();
+
+        ZstdCompressor compressor = new ZstdCompressor();
+        byte[] compressedData = compressor.compress(originalData, 1);
+        assertTrue("Compressed data for large data should be smaller than 
original", compressedData.length < originalData.length);
+
+        byte[] decompressedData = compressor.decompress(compressedData);
+        assertArrayEquals("Decompressed data for large data should match 
original", originalData, decompressedData);
+    }
+}
diff --git 
a/common/src/test/java/org/apache/rocketmq/common/consumer/ReceiptHandleTest.java
 
b/common/src/test/java/org/apache/rocketmq/common/consumer/ReceiptHandleTest.java
new file mode 100644
index 0000000000..54741817e1
--- /dev/null
+++ 
b/common/src/test/java/org/apache/rocketmq/common/consumer/ReceiptHandleTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.rocketmq.common.consumer;
+
+import org.apache.rocketmq.common.KeyBuilder;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ReceiptHandleTest {
+
+    @Test
+    public void testEncodeAndDecode() {
+        long startOffset = 1000L;
+        long retrieveTime = System.currentTimeMillis();
+        long invisibleTime = 1000L;
+        int reviveQueueId = 1;
+        String topicType = "NORMAL";
+        String brokerName = "BrokerA";
+        int queueId = 2;
+        long offset = 2000L;
+        long commitLogOffset = 3000L;
+        ReceiptHandle receiptHandle = ReceiptHandle.builder()
+            .startOffset(startOffset)
+            .retrieveTime(retrieveTime)
+            .invisibleTime(invisibleTime)
+            .reviveQueueId(reviveQueueId)
+            .topicType(topicType)
+            .brokerName(brokerName)
+            .queueId(queueId)
+            .offset(offset)
+            .commitLogOffset(commitLogOffset)
+            .build();
+
+        String encoded = receiptHandle.encode();
+        ReceiptHandle decoded = ReceiptHandle.decode(encoded);
+
+        assertEquals(receiptHandle.getStartOffset(), decoded.getStartOffset());
+        assertEquals(receiptHandle.getRetrieveTime(), 
decoded.getRetrieveTime());
+        assertEquals(receiptHandle.getInvisibleTime(), 
decoded.getInvisibleTime());
+        assertEquals(receiptHandle.getReviveQueueId(), 
decoded.getReviveQueueId());
+        assertEquals(receiptHandle.getTopicType(), decoded.getTopicType());
+        assertEquals(receiptHandle.getBrokerName(), decoded.getBrokerName());
+        assertEquals(receiptHandle.getQueueId(), decoded.getQueueId());
+        assertEquals(receiptHandle.getOffset(), decoded.getOffset());
+        assertEquals(receiptHandle.getCommitLogOffset(), 
decoded.getCommitLogOffset());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void testDecodeWithInvalidString() {
+        String invalidReceiptHandle = "invalid_data";
+
+        ReceiptHandle.decode(invalidReceiptHandle);
+    }
+
+    @Test
+    public void testIsExpired() {
+        long startOffset = 1000L;
+        long retrieveTime = System.currentTimeMillis();
+        long invisibleTime = 1000L;
+        int reviveQueueId = 1;
+        String topicType = "NORMAL";
+        String brokerName = "BrokerA";
+        int queueId = 2;
+        long offset = 2000L;
+        long commitLogOffset = 3000L;
+        long pastTime = System.currentTimeMillis() - 1000L;
+        ReceiptHandle receiptHandle = new ReceiptHandle(startOffset, 
retrieveTime, invisibleTime, pastTime, reviveQueueId, topicType, brokerName, 
queueId, offset, commitLogOffset, "");
+
+        boolean isExpired = receiptHandle.isExpired();
+
+        assertTrue(isExpired);
+    }
+
+    @Test
+    public void testGetRealTopic() {
+        // Arrange
+        String topic = "TestTopic";
+        String groupName = "TestGroup";
+        ReceiptHandle receiptHandle = ReceiptHandle.builder()
+            .topicType(ReceiptHandle.RETRY_TOPIC)
+            .build();
+
+        String realTopic = receiptHandle.getRealTopic(topic, groupName);
+
+        assertEquals(KeyBuilder.buildPopRetryTopicV1(topic, groupName), 
realTopic);
+    }
+}

Reply via email to