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 f12ae980 BIGTOP-4342: Add some ut cases for config classes in server 
module (#162)
f12ae980 is described below

commit f12ae98065fe9606d14fc3acf48eaad7b081c7f7
Author: xianrenzw <[email protected]>
AuthorDate: Tue Feb 4 18:19:12 2025 +0800

    BIGTOP-4342: Add some ut cases for config classes in server module (#162)
---
 .../config/CommandGroupSequenceProviderTest.java   |  79 ++++++++++++
 .../manager/server/config/MyBatisConfigTest.java   | 132 +++++++++++++++++++++
 .../manager/server/config/ValidatorConfigTest.java |  63 ++++++++++
 3 files changed, 274 insertions(+)

diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/CommandGroupSequenceProviderTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/CommandGroupSequenceProviderTest.java
new file mode 100644
index 00000000..5ce3596e
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/CommandGroupSequenceProviderTest.java
@@ -0,0 +1,79 @@
+/*
+ * 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.config;
+
+import org.apache.bigtop.manager.common.enums.Command;
+import org.apache.bigtop.manager.server.enums.CommandLevel;
+import org.apache.bigtop.manager.server.model.req.CommandReq;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+class CommandGroupSequenceProviderTest {
+
+    private CommandGroupSequenceProvider provider;
+    private CommandReq req;
+
+    @BeforeEach
+    void setUp() {
+        provider = new CommandGroupSequenceProvider();
+        req = new CommandReq();
+    }
+
+    @Test
+    void testGetValidationGroups_ServiceLevel_AddCommand() {
+        req.setCommandLevel(CommandLevel.SERVICE);
+        req.setCommand(Command.ADD);
+        List<Class<?>> groups = provider.getValidationGroups(req);
+        assertEquals(2, groups.size());
+        assertTrue(groups.contains(CommandReq.class));
+        
assertTrue(groups.contains(CommandGroupSequenceProvider.ServiceInstallCommandGroup.class));
+    }
+
+    @Test
+    void testGetValidationGroups_ServiceLevel_OtherCommand() {
+        req.setCommandLevel(CommandLevel.SERVICE);
+        req.setCommand(Command.START);
+        List<Class<?>> groups = provider.getValidationGroups(req);
+        assertEquals(2, groups.size());
+        assertTrue(groups.contains(CommandReq.class));
+        
assertTrue(groups.contains(CommandGroupSequenceProvider.ServiceCommandGroup.class));
+    }
+
+    @Test
+    void testGetValidationGroups_NullCommandReq() {
+        List<Class<?>> groups = provider.getValidationGroups(null);
+        assertEquals(1, groups.size());
+        assertTrue(groups.contains(CommandReq.class));
+    }
+
+    @Test
+    void testGetValidationGroups_UnsetCommand() {
+        req.setCommandLevel(CommandLevel.SERVICE);
+        List<Class<?>> groups = provider.getValidationGroups(req);
+        assertEquals(2, groups.size());
+        assertTrue(groups.contains(CommandReq.class));
+        
assertTrue(groups.contains(CommandGroupSequenceProvider.ServiceCommandGroup.class));
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/MyBatisConfigTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/MyBatisConfigTest.java
new file mode 100644
index 00000000..5d7675cb
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/MyBatisConfigTest.java
@@ -0,0 +1,132 @@
+/*
+ * 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.config;
+
+import org.apache.ibatis.session.SqlSessionFactory;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.junit.jupiter.MockitoExtension;
+import org.mybatis.spring.annotation.MapperScan;
+
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+@ExtendWith(MockitoExtension.class)
+@MapperScan("org.apache.bigtop.manager.dao")
+public class MyBatisConfigTest {
+
+    @Mock
+    private DataSource dataSource;
+
+    @Mock
+    private Connection connection;
+
+    @Mock
+    private DatabaseMetaData databaseMetaData;
+
+    @InjectMocks
+    private MyBatisConfig myBatisConfig;
+
+    @BeforeEach
+    public void setUp() throws SQLException {
+        when(dataSource.getConnection()).thenReturn(connection);
+        when(connection.getMetaData()).thenReturn(databaseMetaData);
+    }
+
+    @Test
+    public void testSqlSessionFactory_withMySQL() throws Exception {
+        when(databaseMetaData.getDatabaseProductName()).thenReturn("MySQL");
+
+        SqlSessionFactory sqlSessionFactory = 
myBatisConfig.sqlSessionFactory(dataSource);
+
+        assertNotNull(sqlSessionFactory);
+        verify(databaseMetaData, times(2)).getDatabaseProductName();
+    }
+
+    @Test
+    public void testSqlSessionFactory_withPostgreSQL() throws Exception {
+        
when(databaseMetaData.getDatabaseProductName()).thenReturn("PostgreSQL");
+
+        SqlSessionFactory sqlSessionFactory = 
myBatisConfig.sqlSessionFactory(dataSource);
+
+        assertNotNull(sqlSessionFactory);
+        verify(databaseMetaData, times(2)).getDatabaseProductName();
+    }
+
+    @Test
+    public void testSqlSessionFactory_withUnsupportedDatabase() throws 
SQLException {
+        when(databaseMetaData.getDatabaseProductName()).thenReturn("Oracle");
+
+        Exception exception = assertThrows(IllegalArgumentException.class, () 
-> {
+            myBatisConfig.sqlSessionFactory(dataSource);
+        });
+
+        assertEquals("Unsupported database: Oracle", exception.getMessage());
+        verify(databaseMetaData).getDatabaseProductName();
+    }
+
+    @Test
+    public void testProductNameDatabaseIdProvider_getDatabaseId_withMySQL() 
throws SQLException {
+        when(databaseMetaData.getDatabaseProductName()).thenReturn("MySQL");
+
+        MyBatisConfig.ProductNameDatabaseIdProvider provider = new 
MyBatisConfig.ProductNameDatabaseIdProvider();
+        String databaseId = provider.getDatabaseId(dataSource);
+
+        assertEquals("mysql", databaseId);
+        verify(databaseMetaData).getDatabaseProductName();
+    }
+
+    @Test
+    public void 
testProductNameDatabaseIdProvider_getDatabaseId_withPostgreSQL() throws 
SQLException {
+        
when(databaseMetaData.getDatabaseProductName()).thenReturn("PostgreSQL");
+
+        MyBatisConfig.ProductNameDatabaseIdProvider provider = new 
MyBatisConfig.ProductNameDatabaseIdProvider();
+        String databaseId = provider.getDatabaseId(dataSource);
+
+        assertEquals("postgresql", databaseId);
+        verify(databaseMetaData).getDatabaseProductName();
+    }
+
+    @Test
+    public void 
testProductNameDatabaseIdProvider_getDatabaseId_withUnsupportedDatabase() 
throws SQLException {
+        when(databaseMetaData.getDatabaseProductName()).thenReturn("Oracle");
+
+        MyBatisConfig.ProductNameDatabaseIdProvider provider = new 
MyBatisConfig.ProductNameDatabaseIdProvider();
+
+        Exception exception = assertThrows(IllegalArgumentException.class, () 
-> {
+            provider.getDatabaseId(dataSource);
+        });
+
+        assertEquals("Unsupported database: Oracle", exception.getMessage());
+        verify(databaseMetaData).getDatabaseProductName();
+    }
+}
diff --git 
a/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/ValidatorConfigTest.java
 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/ValidatorConfigTest.java
new file mode 100644
index 00000000..ee69de6b
--- /dev/null
+++ 
b/bigtop-manager-server/src/test/java/org/apache/bigtop/manager/server/config/ValidatorConfigTest.java
@@ -0,0 +1,63 @@
+/*
+ * 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.config;
+
+import org.junit.jupiter.api.Test;
+
+import jakarta.validation.ConstraintViolation;
+import jakarta.validation.Validator;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.Size;
+import java.util.Set;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class ValidatorConfigTest {
+
+    @Test
+    public void testFailFast() {
+        // Manually create a Validator instance
+        ValidatorConfig validatorConfig = new ValidatorConfig();
+        Validator validator = validatorConfig.validator();
+
+        // Create an invalid object with multiple validation errors
+        InvalidObject invalidObject = new InvalidObject("", "123");
+
+        // Validate the object
+        Set<ConstraintViolation<InvalidObject>> violations = 
validator.validate(invalidObject);
+
+        // Since failFast is enabled, there should be only one error
+        assertEquals(1, violations.size());
+    }
+
+    // Define a class with multiple validation constraints
+    private static class InvalidObject {
+
+        @NotBlank(message = "must not be blank")
+        private String field1;
+
+        @Size(min = 5, message = "length must be at least 5")
+        private String field2;
+
+        public InvalidObject(String field1, String field2) {
+            this.field1 = field1;
+            this.field2 = field2;
+        }
+    }
+}

Reply via email to