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

wuzhiguo pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/bigtop-manager.git


The following commit(s) were added to refs/heads/main by this push:
     new 1f33bd3f BIGTOP-4347: Add ut cases for utils classes in server module 
(#166)
1f33bd3f is described below

commit 1f33bd3f66b0023dc4ed9882b59589ce5aaa868c
Author: xianrenzw <[email protected]>
AuthorDate: Sat Feb 8 18:32:29 2025 +0800

    BIGTOP-4347: Add ut cases for utils classes in server module (#166)
---
 .../bigtop/manager/server/utils/JWTUtils.java      |   2 +-
 .../manager/server/utils/ClusterUtilsTest.java     |  57 ++++++
 .../bigtop/manager/server/utils/JWTUtilsTest.java  |  88 +++++++++
 .../server/utils/MessageSourceUtilsTest.java       |  67 +++++++
 .../bigtop/manager/server/utils/PageUtilsTest.java | 147 ++++++++++++++
 .../manager/server/utils/ProxyUtilsTest.java       | 217 +++++++++++++++++++++
 .../manager/server/utils/ServletUtilsTest.java     | 121 ++++++++++++
 7 files changed, 698 insertions(+), 1 deletion(-)

diff --git 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/JWTUtils.java
 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/JWTUtils.java
index 3bd7bb04..02ca8c63 100644
--- 
a/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/JWTUtils.java
+++ 
b/bigtop-manager-server/src/main/java/org/apache/bigtop/manager/server/utils/JWTUtils.java
@@ -31,7 +31,7 @@ public class JWTUtils {
 
     public static final String CLAIM_USERNAME = "username";
 
-    private static final String SIGN = "r0PGVyvjKOxUBwGt";
+    protected static final String SIGN = "r0PGVyvjKOxUBwGt";
 
     public static String generateToken(Long id, String username) {
         Calendar calendar = Calendar.getInstance();
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ClusterUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ClusterUtilsTest.java
new file mode 100644
index 00000000..d0b2fe1a
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ClusterUtilsTest.java
@@ -0,0 +1,57 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+public class ClusterUtilsTest {
+
+    @Test
+    public void testIsNoneClusterClusterIdIsNull() {
+        assertTrue(ClusterUtils.isNoneCluster(null));
+    }
+
+    @Test
+    public void testIsNoneClusterClusterIdIsZero() {
+        assertTrue(ClusterUtils.isNoneCluster(0L));
+    }
+
+    @Test
+    public void testIsNoneClusterClusterIdIsPositive() {
+        assertFalse(ClusterUtils.isNoneCluster(1L));
+    }
+
+    @Test
+    public void testIsNoneClusterClusterIdIsNegative() {
+        assertFalse(ClusterUtils.isNoneCluster(-1L));
+    }
+
+    @Test
+    public void testIsNoneClusterClusterIdIsMaxValue() {
+        assertFalse(ClusterUtils.isNoneCluster(Long.MAX_VALUE));
+    }
+
+    @Test
+    public void testIsNoneClusterClusterIdIsMinValue() {
+        assertFalse(ClusterUtils.isNoneCluster(Long.MIN_VALUE));
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/JWTUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/JWTUtilsTest.java
new file mode 100644
index 00000000..53152e57
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/JWTUtilsTest.java
@@ -0,0 +1,88 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.junit.jupiter.api.Test;
+
+import com.auth0.jwt.JWT;
+import com.auth0.jwt.algorithms.Algorithm;
+import com.auth0.jwt.exceptions.JWTDecodeException;
+import com.auth0.jwt.exceptions.JWTVerificationException;
+import com.auth0.jwt.interfaces.DecodedJWT;
+
+import java.util.Calendar;
+import java.util.Date;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class JWTUtilsTest {
+
+    @Test
+    public void testGenerateTokenNormal() {
+        Long id = 1L;
+        String username = "testUser";
+        String token = JWTUtils.generateToken(id, username);
+        assertNotNull(token);
+
+        DecodedJWT decodedJWT = JWTUtils.resolveToken(token);
+        assertEquals(decodedJWT.getClaim(JWTUtils.CLAIM_ID).asLong(), id);
+        assertEquals(decodedJWT.getClaim(JWTUtils.CLAIM_USERNAME).asString(), 
username);
+    }
+
+    @Test
+    public void testResolveTokenExpired() {
+        Long id = 2L;
+        String username = "expiredUser";
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.HOUR_OF_DAY, -1);
+        Date date = calendar.getTime();
+
+        String token = JWT.create()
+                .withClaim(JWTUtils.CLAIM_ID, id)
+                .withClaim(JWTUtils.CLAIM_USERNAME, username)
+                .withExpiresAt(date)
+                .sign(Algorithm.HMAC256(JWTUtils.SIGN));
+
+        assertThrows(JWTVerificationException.class, () -> 
JWTUtils.resolveToken(token));
+    }
+
+    @Test
+    public void testResolveTokenIllegal() {
+        String illegalToken =
+                
"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c";
+        assertThrows(JWTVerificationException.class, () -> 
JWTUtils.resolveToken(illegalToken));
+    }
+
+    @Test
+    public void testResolveTokenWrongFormat() {
+        String wrongFormatToken = "wrong_format_token";
+        assertThrows(JWTDecodeException.class, () -> 
JWTUtils.resolveToken(wrongFormatToken));
+    }
+
+    @Test
+    public void testGenerateTokenUsernameEmpty() {
+        String token = JWTUtils.generateToken(1L, "");
+        assertNotNull(token);
+
+        DecodedJWT decodedJWT = JWTUtils.resolveToken(token);
+        assertEquals(decodedJWT.getClaim(JWTUtils.CLAIM_USERNAME).asString(), 
"");
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/MessageSourceUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/MessageSourceUtilsTest.java
new file mode 100644
index 00000000..df4617c1
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/MessageSourceUtilsTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.apache.bigtop.manager.server.enums.LocaleKeys;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.context.MessageSource;
+import org.springframework.context.i18n.LocaleContextHolder;
+
+import java.util.Locale;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.AdditionalMatchers.aryEq;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+class MessageSourceUtilsTest {
+
+    private MessageSource messageSourceMock;
+
+    @BeforeEach
+    void setUp() {
+        messageSourceMock = mock(MessageSource.class);
+        MessageSourceUtils utils = new MessageSourceUtils();
+        utils.setMessageSource(messageSourceMock);
+
+        LocaleContextHolder.setLocale(Locale.US);
+    }
+
+    @AfterEach
+    void tearDown() {
+        LocaleContextHolder.resetLocaleContext();
+    }
+
+    @Test
+    void testGetMessageWithArguments() {
+        LocaleKeys testKey = LocaleKeys.REQUEST_SUCCESS;
+        Object[] args = {"operation"};
+        String expectedMessage = "Operation succeeded";
+
+        when(messageSourceMock.getMessage(eq(testKey.getKey()), aryEq(args), 
eq(Locale.US)))
+                .thenReturn(expectedMessage);
+
+        String actualMessage = MessageSourceUtils.getMessage(testKey, 
"operation");
+        assertEquals(expectedMessage, actualMessage);
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/PageUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/PageUtilsTest.java
new file mode 100644
index 00000000..7b24fb6b
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/PageUtilsTest.java
@@ -0,0 +1,147 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.apache.bigtop.manager.server.model.query.PageQuery;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.MockedStatic;
+import org.mockito.junit.jupiter.MockitoExtension;
+
+import static org.junit.jupiter.api.Assertions.assertAll;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mockStatic;
+
+@ExtendWith(MockitoExtension.class)
+class PageUtilsTest {
+
+    private MockedStatic<ServletUtils> servletUtilsMock;
+
+    @BeforeEach
+    void setUp() {
+        servletUtilsMock = mockStatic(ServletUtils.class);
+    }
+
+    @AfterEach
+    void tearDown() {
+        servletUtilsMock.close();
+    }
+
+    @Test
+    void testDefaultValues() {
+        // Simulate all parameters not existing
+        setupMockParameters(null, null, null, null);
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll(
+                "Default values check",
+                () -> assertEquals(1, result.getPageNum()),
+                () -> assertEquals(10, result.getPageSize()),
+                () -> assertEquals("id ASC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testValidParameters() {
+        // Simulate valid parameters
+        setupMockParameters("3", "25", "createTime", "desc");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll(
+                "Valid parameters check",
+                () -> assertEquals(3, result.getPageNum()),
+                () -> assertEquals(25, result.getPageSize()),
+                () -> assertEquals("createTime DESC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testInvalidNumberParameters() {
+        // Simulate invalid number parameters
+        setupMockParameters("abc", "xyz", "name", "asc");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll(
+                "Invalid number parameters check",
+                () -> assertEquals(1, result.getPageNum()),
+                () -> assertEquals(10, result.getPageSize()),
+                () -> assertEquals("name ASC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testEmptyStringParameters() {
+        // Simulate empty string parameters
+        setupMockParameters("", "", "", "");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll(
+                "Empty string parameters check",
+                () -> assertEquals(1, result.getPageNum()),
+                () -> assertEquals(10, result.getPageSize()),
+                () -> assertEquals("id ASC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testEdgeCaseNumbers() {
+        // Test edge case numbers
+        setupMockParameters("0", "0", "updateTime", "invalid");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll(
+                "Edge case numbers check",
+                () -> assertEquals(0, result.getPageNum()),
+                () -> assertEquals(0, result.getPageSize()),
+                () -> assertEquals("updateTime ASC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testSpecialCharactersInOrderBy() {
+        // Test special characters handling
+        setupMockParameters("2", "15", "user_name", "desc");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertAll("Special characters check", () -> assertEquals("user_name 
DESC ", result.getOrderBy()));
+    }
+
+    @Test
+    void testMixedCaseSortParameter() {
+        // Test mixed case sort parameter
+        setupMockParameters("1", "10", "email", "desc");
+
+        PageQuery result = PageUtils.getPageQuery();
+
+        assertEquals("email DESC ", result.getOrderBy());
+    }
+
+    private void setupMockParameters(String pageNum, String pageSize, String 
orderBy, String sort) {
+        // Parameter mock configuration method
+        servletUtilsMock.when(() -> 
ServletUtils.getParameter(eq("pageNum"))).thenReturn(pageNum);
+        servletUtilsMock.when(() -> 
ServletUtils.getParameter(eq("pageSize"))).thenReturn(pageSize);
+        servletUtilsMock.when(() -> 
ServletUtils.getParameter(eq("orderBy"))).thenReturn(orderBy);
+        servletUtilsMock.when(() -> 
ServletUtils.getParameter(eq("sort"))).thenReturn(sort);
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ProxyUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ProxyUtilsTest.java
new file mode 100644
index 00000000..aa39edd3
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ProxyUtilsTest.java
@@ -0,0 +1,217 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.junit.jupiter.api.Test;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+public class ProxyUtilsTest {
+
+    @Test
+    // Test getDoubleSafely with normal case
+    public void testGetDoubleSafelyHappyPath() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":[1.1, 2.2, 3.3]}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(2.2, ProxyUtils.getDoubleSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getDoubleSafely with null node case
+    public void testGetDoubleSafelyNullNode() {
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode parentNode = mapper.createObjectNode();
+        assertEquals(0.0, ProxyUtils.getDoubleSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getDoubleSafely with non-array node case
+    public void testGetDoubleSafelyNotArrayNode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":1.1}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(0.0, ProxyUtils.getDoubleSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getDoubleSafely with index out of bounds case
+    public void testGetDoubleSafelyIndexOutOfBound() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":[1.1, 2.2, 3.3]}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(0.0, ProxyUtils.getDoubleSafely(parentNode, "values", 5));
+    }
+
+    @Test
+    // Test getLongSafely with normal case
+    public void testGetLongSafelyHappyPath() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":[1, 2, 3]}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(2L, ProxyUtils.getLongSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getLongSafely with null node case
+    public void testGetLongSafelyNullNode() {
+        ObjectMapper mapper = new ObjectMapper();
+        JsonNode parentNode = mapper.createObjectNode();
+        assertEquals(0L, ProxyUtils.getLongSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getLongSafely with non-array node case
+    public void testGetLongSafelyNotArrayNode() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":1}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(0L, ProxyUtils.getLongSafely(parentNode, "values", 1));
+    }
+
+    @Test
+    // Test getLongSafely with index out of bounds case
+    public void testGetLongSafelyIndexOutOfBound() throws Exception {
+        ObjectMapper mapper = new ObjectMapper();
+        String jsonString = "{\"values\":[1, 2, 3]}";
+        JsonNode parentNode = mapper.readTree(jsonString);
+        assertEquals(0L, ProxyUtils.getLongSafely(parentNode, "values", 5));
+    }
+
+    @Test
+    // Test array2node(double[] array) with normal case
+    public void testArray2NodeDoubleArrayHappyPath() {
+        double[] array = {1.123456789, 2.23456789, 3.3456789, 4.456789, 
5.56789, 6.6789};
+        JsonNode node = ProxyUtils.array2node(array);
+        assertEquals("1.123457", node.get(0).asText());
+        assertEquals("2.234568", node.get(1).asText());
+        assertEquals("3.345679", node.get(2).asText());
+        assertEquals("4.456789", node.get(3).asText());
+        assertEquals("5.567890", node.get(4).asText());
+        assertEquals("6.678900", node.get(5).asText());
+    }
+
+    @Test
+    // Test array2node(long[] array) with normal case
+    public void testArray2NodeLongArrayHappyPath() {
+        long[] array = {1, 2, 3, 4, 5, 6};
+        JsonNode node = ProxyUtils.array2node(array);
+        assertEquals(1L, node.get(0).asLong());
+        assertEquals(2L, node.get(1).asLong());
+        assertEquals(3L, node.get(2).asLong());
+        assertEquals(4L, node.get(3).asLong());
+        assertEquals(5L, node.get(4).asLong());
+        assertEquals(6L, node.get(5).asLong());
+    }
+
+    @Test
+    // Test array2node(long[] array1, long[] array2) with normal case
+    public void testArray2NodeTwoLongArraysHappyPath() {
+        long[] array1 = {1, 2, 3, 4, 5, 6};
+        long[] array2 = {2, 4, 6, 8, 10, 12};
+        JsonNode node = ProxyUtils.array2node(array1, array2);
+        assertEquals("0.500000", node.get(0).asText());
+        assertEquals("0.500000", node.get(1).asText());
+        assertEquals("0.500000", node.get(2).asText());
+        assertEquals("0.500000", node.get(3).asText());
+        assertEquals("0.500000", node.get(4).asText());
+        assertEquals("0.500000", node.get(5).asText());
+    }
+
+    @Test
+    // Test array2node(long[] array1, long[] array2) with array2 containing 
zero case
+    public void testArray2NodeTwoLongArraysWithZero() {
+        long[] array1 = {1, 2, 3, 4, 5, 6};
+        long[] array2 = {0, 4, 0, 8, 10, 0};
+        JsonNode node = ProxyUtils.array2node(array1, array2);
+        assertEquals("0.000000", node.get(0).asText());
+        assertEquals("0.500000", node.get(1).asText());
+        assertEquals("0.000000", node.get(2).asText());
+        assertEquals("0.500000", node.get(3).asText());
+        assertEquals("0.500000", node.get(4).asText());
+        assertEquals("0.000000", node.get(5).asText());
+    }
+
+    @Test
+    // Test array2node(long[][] array1, long[][] array2, int num) with normal 
case
+    public void testArray2NodeTwoLong2DArraysHappyPath() {
+        long[][] array1 = {{1, 2, 3, 4, 5, 6}, {2, 3, 4, 5, 6, 7}};
+        long[][] array2 = {{2, 4, 6, 8, 10, 12}, {3, 5, 6, 8, 10, 12}};
+        JsonNode node = ProxyUtils.array2node(array1, array2, 2);
+        assertEquals("0.400000", node.get(0).asText());
+        assertEquals("0.444444", node.get(1).asText());
+        assertEquals("0.416667", node.get(2).asText());
+        assertEquals("0.437500", node.get(3).asText());
+        assertEquals("0.450000", node.get(4).asText());
+        assertEquals("0.458333", node.get(5).asText());
+    }
+
+    @Test
+    // Test array2node(long[][] array1, long[][] array2, int num) with array2 
containing zero case
+    public void testArray2NodeTwoLong2DArraysWithZero() {
+        long[][] array1 = {{1, 2, 3, 4, 5, 6}, {2, 3, 4, 5, 6, 7}};
+        long[][] array2 = {{2, 4, 0, 8, 10, 0}, {3, 5, 0, 8, 10, 0}};
+        JsonNode node = ProxyUtils.array2node(array1, array2, 2);
+        assertEquals("0.400000", node.get(0).asText());
+        assertEquals("0.444444", node.get(1).asText());
+        assertEquals("0.000000", node.get(2).asText());
+        assertEquals("0.437500", node.get(3).asText());
+        assertEquals("0.450000", node.get(4).asText());
+        assertEquals("0.000000", node.get(5).asText());
+    }
+
+    @Test
+    // Test getTimeStampsList with normal case
+    public void testGetTimeStampsListHappyPath() {
+        ArrayList<Long> timestamps = ProxyUtils.getTimeStampsList(10);
+        assertEquals(7, timestamps.size());
+        // Here we cannot precisely assert the value of each timestamp as they 
depend on the current time, but we can
+        // assert the number of timestamps
+    }
+
+    @Test
+    // Test Number2Param with normal case
+    public void testNumber2ParamHappyPath() {
+        assertEquals("10m", ProxyUtils.Number2Param(10));
+    }
+
+    @Test
+    // Test processInternal with normal case
+    public void testProcessInternalHappyPath() {
+        assertEquals(600, ProxyUtils.processInternal("10m"));
+        assertEquals(3600, ProxyUtils.processInternal("1h"));
+        assertEquals(120, ProxyUtils.processInternal("2m"));
+    }
+
+    @Test
+    // Test processInternal with illegal input case
+    public void testProcessInternalIllegalInput() {
+        Exception exception = assertThrows(NumberFormatException.class, () -> {
+            ProxyUtils.processInternal("abc");
+        });
+        assertNotNull(exception);
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ServletUtilsTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ServletUtilsTest.java
new file mode 100644
index 00000000..1f0d1cf9
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/utils/ServletUtilsTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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
+ *
+ *    https://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.bigtop.manager.server.utils;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import jakarta.servlet.http.HttpServletRequest;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class ServletUtilsTest {
+
+    // Use mockito to mock HttpServletRequest object
+    private HttpServletRequest mockRequest;
+
+    @BeforeEach
+    public void setUp() {
+        ServletRequestAttributes mockAttributes = 
mock(ServletRequestAttributes.class);
+        mockRequest = mock(HttpServletRequest.class);
+        when(mockAttributes.getRequest()).thenReturn(mockRequest);
+        RequestContextHolder.setRequestAttributes(mockAttributes);
+    }
+
+    @Test
+    public void testGetParameterNormalPath() {
+        // Test case: normal path, get existing parameter
+        when(mockRequest.getParameter("testParam")).thenReturn("testValue");
+        assertEquals("testValue", ServletUtils.getParameter("testParam"));
+    }
+
+    @Test
+    public void testGetParameterParameterDoesNotExist() {
+        // Test case: parameter does not exist, expect to return null
+        when(mockRequest.getParameter("nonexistentParam")).thenReturn(null);
+        assertNull(ServletUtils.getParameter("nonexistentParam"));
+    }
+
+    @Test
+    public void testGetParameterEmptyStringParameterName() {
+        // Test case: parameter name is an empty string, expect to return null
+        when(mockRequest.getParameter("")).thenReturn(null);
+        assertNull(ServletUtils.getParameter(""));
+    }
+
+    @Test
+    public void testGetParameterSpaceParameterName() {
+        // Test case: parameter name is a space, expect to return null
+        when(mockRequest.getParameter(" ")).thenReturn(null);
+        assertNull(ServletUtils.getParameter(" "));
+    }
+
+    @Test
+    public void testGetParameterSpecialCharacterParameterName() {
+        // Test case: parameter name contains special characters, expect to 
return null or correct value (adjust based
+        // on actual situation)
+        when(mockRequest.getParameter("!@#$%^&*()")).thenReturn(null);
+        assertNull(ServletUtils.getParameter("!@#$%^&*()"));
+    }
+
+    @Test
+    public void testGetRequestCorrectRequest() {
+        // Test case: correct request, expect to return the mock 
HttpServletRequest object
+        assertEquals(mockRequest, ServletUtils.getRequest());
+    }
+
+    @Test
+    public void testGetRequestAttributesCorrectAttributes() {
+        // Test case: correct attributes, expect to return the mock 
ServletRequestAttributes object
+        ServletRequestAttributes attributes = 
ServletUtils.getRequestAttributes();
+        assertNotNull(attributes);
+        assertEquals(mockRequest, attributes.getRequest());
+    }
+
+    @Test
+    public void testGetRequestAttributesAttributesNotSet() {
+        // Test case: attributes not set, expect to return null
+        RequestContextHolder.setRequestAttributes(null);
+        assertNull(ServletUtils.getRequestAttributes());
+    }
+
+    @Test
+    public void testGetParameterAttributesNotSet() {
+        // Test case: attributes not set, expect to throw an exception or 
return null
+        RequestContextHolder.setRequestAttributes(null);
+        assertThrows(NullPointerException.class, () -> 
ServletUtils.getParameter("testParam"));
+    }
+
+    @Test
+    public void testGetParameterRequestNotSet() {
+        // Test case: request not set, expect to throw an exception or return 
null
+        when(mockRequest.getParameter("testParam")).thenReturn(null);
+        ServletRequestAttributes mockAttributes = 
mock(ServletRequestAttributes.class);
+        when(mockAttributes.getRequest()).thenReturn(null);
+        RequestContextHolder.setRequestAttributes(mockAttributes);
+        assertThrows(NullPointerException.class, () -> 
ServletUtils.getParameter("testParam"));
+    }
+}

Reply via email to