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 cba8a64b08 [ISSUE #8486]Add more test coverage for
BrokerMetricsManager (#8487)
cba8a64b08 is described below
commit cba8a64b08bf1b30ad2db6619b06d758d8cb3955
Author: ziiyee <[email protected]>
AuthorDate: Wed Aug 7 10:05:19 2024 +0800
[ISSUE #8486]Add more test coverage for BrokerMetricsManager (#8487)
* Add more test case for BrokerMetricsManager. Includes:
- check the topic is retry or dlq topic
- check the group is system group or not
- check the topic and the group belongs to system or not
* Add more test case for BrokerMetricsManager. Check topic message type by
request header.
* Add more test case for BrokerMetricsManager.
* Add more test case for BrokerMetricsManager.
---
.../broker/metrics/BrokerMetricsManagerTest.java | 277 ++++++++++++++++++++-
1 file changed, 275 insertions(+), 2 deletions(-)
diff --git
a/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
b/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
index 11f7ae8215..9264eb4b56 100644
---
a/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
+++
b/broker/src/test/java/org/apache/rocketmq/broker/metrics/BrokerMetricsManagerTest.java
@@ -20,8 +20,25 @@ package org.apache.rocketmq.broker.metrics;
import io.opentelemetry.api.common.AttributeKey;
import io.opentelemetry.api.common.Attributes;
import io.opentelemetry.api.common.AttributesBuilder;
+import org.apache.rocketmq.broker.BrokerController;
+import org.apache.rocketmq.common.BrokerConfig;
+import org.apache.rocketmq.common.MixAll;
+import org.apache.rocketmq.common.attribute.TopicMessageType;
+import org.apache.rocketmq.common.message.MessageConst;
+import org.apache.rocketmq.common.message.MessageDecoder;
+import org.apache.rocketmq.common.metrics.MetricsExporterType;
+import org.apache.rocketmq.common.topic.TopicValidator;
+import org.apache.rocketmq.remoting.netty.NettyClientConfig;
+import org.apache.rocketmq.remoting.netty.NettyServerConfig;
+import org.apache.rocketmq.remoting.protocol.header.SendMessageRequestHeader;
+import org.apache.rocketmq.store.config.MessageStoreConfig;
import org.junit.Test;
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
+
import static org.assertj.core.api.Assertions.assertThat;
public class BrokerMetricsManagerTest {
@@ -29,7 +46,7 @@ public class BrokerMetricsManagerTest {
@Test
public void testNewAttributesBuilder() {
Attributes attributes =
BrokerMetricsManager.newAttributesBuilder().put("a", "b")
- .build();
+ .build();
assertThat(attributes.get(AttributeKey.stringKey("a"))).isEqualTo("b");
}
@@ -37,6 +54,7 @@ public class BrokerMetricsManagerTest {
public void testCustomizedAttributesBuilder() {
BrokerMetricsManager.attributesBuilderSupplier = () -> new
AttributesBuilder() {
private AttributesBuilder attributesBuilder = Attributes.builder();
+
@Override
public Attributes build() {
return attributesBuilder.put("customized", "value").build();
@@ -61,8 +79,263 @@ public class BrokerMetricsManagerTest {
}
};
Attributes attributes =
BrokerMetricsManager.newAttributesBuilder().put("a", "b")
- .build();
+ .build();
assertThat(attributes.get(AttributeKey.stringKey("a"))).isEqualTo("b");
assertThat(attributes.get(AttributeKey.stringKey("customized"))).isEqualTo("value");
}
+
+
+ @Test
+ public void testIsRetryOrDlqTopicWithRetryTopic() {
+ String topic = MixAll.RETRY_GROUP_TOPIC_PREFIX + "TestTopic";
+ boolean result = BrokerMetricsManager.isRetryOrDlqTopic(topic);
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void testIsRetryOrDlqTopicWithDlqTopic() {
+ String topic = MixAll.DLQ_GROUP_TOPIC_PREFIX + "TestTopic";
+ boolean result = BrokerMetricsManager.isRetryOrDlqTopic(topic);
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void testIsRetryOrDlqTopicWithNonRetryOrDlqTopic() {
+ String topic = "NormalTopic";
+ boolean result = BrokerMetricsManager.isRetryOrDlqTopic(topic);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsRetryOrDlqTopicWithEmptyTopic() {
+ String topic = "";
+ boolean result = BrokerMetricsManager.isRetryOrDlqTopic(topic);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsRetryOrDlqTopicWithNullTopic() {
+ String topic = null;
+ boolean result = BrokerMetricsManager.isRetryOrDlqTopic(topic);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsSystemGroup_SystemGroup_ReturnsTrue() {
+ String group = "FooGroup";
+ String systemGroup = MixAll.CID_RMQ_SYS_PREFIX + group;
+ boolean result = BrokerMetricsManager.isSystemGroup(systemGroup);
+ assertThat(result).isTrue();
+ }
+
+ @Test
+ public void testIsSystemGroup_NonSystemGroup_ReturnsFalse() {
+ String group = "FooGroup";
+ boolean result = BrokerMetricsManager.isSystemGroup(group);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsSystemGroup_EmptyGroup_ReturnsFalse() {
+ String group = "";
+ boolean result = BrokerMetricsManager.isSystemGroup(group);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsSystemGroup_NullGroup_ReturnsFalse() {
+ String group = null;
+ boolean result = BrokerMetricsManager.isSystemGroup(group);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsSystem_SystemTopicOrSystemGroup_ReturnsTrue() {
+ String topic = "FooTopic";
+ String group = "FooGroup";
+ String systemTopic = TopicValidator.RMQ_SYS_TRANS_HALF_TOPIC;
+ String systemGroup = MixAll.CID_RMQ_SYS_PREFIX + group;
+
+ boolean resultTopic = BrokerMetricsManager.isSystem(systemTopic,
group);
+ assertThat(resultTopic).isTrue();
+
+ boolean resultGroup = BrokerMetricsManager.isSystem(topic,
systemGroup);
+ assertThat(resultGroup).isTrue();
+ }
+
+ @Test
+ public void testIsSystem_NonSystemTopicAndGroup_ReturnsFalse() {
+ String topic = "FooTopic";
+ String group = "FooGroup";
+ boolean result = BrokerMetricsManager.isSystem(topic, group);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testIsSystem_EmptyTopicAndGroup_ReturnsFalse() {
+ String topic = "";
+ String group = "";
+ boolean result = BrokerMetricsManager.isSystem(topic, group);
+ assertThat(result).isFalse();
+ }
+
+ @Test
+ public void testGetMessageTypeAsNormal() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ requestHeader.setProperties("");
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.NORMAL).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsTransaction() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_TRANSACTION_PREPARED, "true");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.TRANSACTION).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsFifo() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_SHARDING_KEY, "shardingKey");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.FIFO).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsDelayLevel() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "1");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.DELAY).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsDeliverMS() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_TIMER_DELIVER_MS, "10");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.DELAY).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsDelaySEC() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_TIMER_DELAY_SEC, "1");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.DELAY).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeAsDelayMS() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_TIMER_DELAY_MS, "10");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.DELAY).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeWithUnknownProperty() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put("unknownProperty", "unknownValue");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.NORMAL).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeWithMultipleProperties() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "1");
+ map.put(MessageConst.PROPERTY_SHARDING_KEY, "shardingKey");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.FIFO).isEqualTo(result);
+ }
+
+ @Test
+ public void
testGetMessageTypeWithTransactionFlagButOtherPropertiesPresent() {
+ SendMessageRequestHeader requestHeader = new
SendMessageRequestHeader();
+ Map<String, String> map = new HashMap<>();
+ map.put(MessageConst.PROPERTY_TRANSACTION_PREPARED, "true");
+ map.put(MessageConst.PROPERTY_SHARDING_KEY, "shardingKey");
+
requestHeader.setProperties(MessageDecoder.messageProperties2String(map));
+
+ TopicMessageType result =
BrokerMetricsManager.getMessageType(requestHeader);
+ assertThat(TopicMessageType.TRANSACTION).isEqualTo(result);
+ }
+
+ @Test
+ public void testGetMessageTypeWithEmptyProperties() {
+ TopicMessageType result = BrokerMetricsManager.getMessageType(new
SendMessageRequestHeader());
+ assertThat(TopicMessageType.NORMAL).isEqualTo(result);
+ }
+
+ @Test
+ public void testCreateMetricsManager() {
+ MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
+ String storePathRootDir = System.getProperty("java.io.tmpdir") +
File.separator + "store-"
+ + UUID.randomUUID();
+ messageStoreConfig.setStorePathRootDir(storePathRootDir);
+ BrokerConfig brokerConfig = new BrokerConfig();
+
+ NettyServerConfig nettyServerConfig = new NettyServerConfig();
+ nettyServerConfig.setListenPort(0);
+
+ BrokerController brokerController = new BrokerController(brokerConfig,
nettyServerConfig,
+ new NettyClientConfig(), messageStoreConfig);
+
+ BrokerMetricsManager metricsManager = new
BrokerMetricsManager(brokerController);
+
+ assertThat(metricsManager.getBrokerMeter()).isNull();
+ }
+
+ @Test
+ public void testCreateMetricsManagerLogType() throws
CloneNotSupportedException {
+ BrokerConfig brokerConfig = new BrokerConfig();
+ brokerConfig.setMetricsExporterType(MetricsExporterType.LOG);
+ brokerConfig.setMetricsLabel("label1:value1;label2:value2");
+ brokerConfig.setMetricsOtelCardinalityLimit(1);
+
+ MessageStoreConfig messageStoreConfig = new MessageStoreConfig();
+ String storePathRootDir = System.getProperty("java.io.tmpdir") +
File.separator + "store-"
+ + UUID.randomUUID();
+ messageStoreConfig.setStorePathRootDir(storePathRootDir);
+
+ NettyServerConfig nettyServerConfig = new NettyServerConfig();
+ nettyServerConfig.setListenPort(0);
+
+ BrokerController brokerController = new BrokerController(brokerConfig,
nettyServerConfig,
+ new NettyClientConfig(), messageStoreConfig);
+ brokerController.initialize();
+
+ BrokerMetricsManager metricsManager = new
BrokerMetricsManager(brokerController);
+
+ assertThat(metricsManager.getBrokerMeter()).isNotNull();
+ }
}
\ No newline at end of file