This is an automated email from the ASF dual-hosted git repository.
zhangliang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git
The following commit(s) were added to refs/heads/master by this push:
new 7d51940eb6b Add more test cases on
FrontDatabaseProtocolTypeFactoryTest (#37883)
7d51940eb6b is described below
commit 7d51940eb6b5e07c3b3780ea772fbd33a10b5f39
Author: Liang Zhang <[email protected]>
AuthorDate: Thu Jan 29 11:51:12 2026 +0800
Add more test cases on FrontDatabaseProtocolTypeFactoryTest (#37883)
---
.../FrontDatabaseProtocolTypeFactoryTest.java | 69 ++++++++++++++++++----
1 file changed, 56 insertions(+), 13 deletions(-)
diff --git
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
index af0818864c2..edb15f16ae7 100644
---
a/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
+++
b/proxy/frontend/core/src/test/java/org/apache/shardingsphere/proxy/frontend/protocol/FrontDatabaseProtocolTypeFactoryTest.java
@@ -18,34 +18,42 @@
package org.apache.shardingsphere.proxy.frontend.protocol;
import org.apache.shardingsphere.database.connector.core.type.DatabaseType;
-import org.apache.shardingsphere.infra.config.mode.ModeConfiguration;
import org.apache.shardingsphere.infra.config.props.ConfigurationProperties;
import org.apache.shardingsphere.infra.config.props.ConfigurationPropertyKey;
import org.apache.shardingsphere.infra.instance.ComputeNodeInstanceContext;
import org.apache.shardingsphere.infra.metadata.ShardingSphereMetaData;
import
org.apache.shardingsphere.infra.metadata.database.ShardingSphereDatabase;
+import
org.apache.shardingsphere.infra.metadata.database.resource.unit.StorageUnit;
import
org.apache.shardingsphere.infra.metadata.statistics.ShardingSphereStatistics;
import
org.apache.shardingsphere.infra.metadata.statistics.builder.ShardingSphereStatisticsFactory;
+import org.apache.shardingsphere.infra.spi.ShardingSphereServiceLoader;
import org.apache.shardingsphere.infra.spi.type.typed.TypedSPILoader;
import org.apache.shardingsphere.infra.util.props.PropertiesBuilder;
import org.apache.shardingsphere.infra.util.props.PropertiesBuilder.Property;
import org.apache.shardingsphere.mode.manager.ContextManager;
import org.apache.shardingsphere.mode.metadata.MetaDataContexts;
import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
+import
org.apache.shardingsphere.proxy.frontend.spi.DatabaseProtocolFrontendEngine;
import
org.apache.shardingsphere.test.infra.framework.extension.mock.AutoMockExtension;
import
org.apache.shardingsphere.test.infra.framework.extension.mock.StaticMockSettings;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.MockedStatic;
import org.mockito.junit.jupiter.MockitoSettings;
import org.mockito.quality.Strictness;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Properties;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.mockito.Mockito.CALLS_REAL_METHODS;
+import static org.mockito.Mockito.RETURNS_DEEP_STUBS;
import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.mockStatic;
import static org.mockito.Mockito.when;
@ExtendWith(AutoMockExtension.class)
@@ -53,40 +61,75 @@ import static org.mockito.Mockito.when;
@MockitoSettings(strictness = Strictness.LENIENT)
class FrontDatabaseProtocolTypeFactoryTest {
+ private final DatabaseType databaseType =
TypedSPILoader.getService(DatabaseType.class, "FIXTURE");
+
@Test
- void assertGetDatabaseTypeWhenThrowShardingSphereConfigurationException() {
+ void assertGetDatabaseTypeWhenNoFrontendEngineFound() {
ContextManager contextManager =
mockContextManager(Collections.emptyList(), new Properties());
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is("FIXTURE"));
+ try (MockedStatic<ShardingSphereServiceLoader> mocked =
mockStatic(ShardingSphereServiceLoader.class, CALLS_REAL_METHODS)) {
+ mocked.when(() ->
ShardingSphereServiceLoader.getServiceInstances(DatabaseProtocolFrontendEngine.class)).thenReturn(Collections.emptyList());
+ assertThrows(IllegalArgumentException.class,
FrontDatabaseProtocolTypeFactory::getDatabaseType);
+ }
}
@Test
- void
assertGetDatabaseTypeInstanceOfMySQLDatabaseTypeFromMetaDataContextsSchemaName()
{
- ContextManager contextManager =
mockContextManager(Collections.singleton(mockDatabase()), new Properties());
+ void assertGetDatabaseTypeWhenSingleFrontendEngineAndNoDatabase() {
+ DatabaseProtocolFrontendEngine databaseProtocolFrontendEngine =
mock(DatabaseProtocolFrontendEngine.class);
+
when(databaseProtocolFrontendEngine.getType()).thenReturn(databaseType);
+ ContextManager contextManager =
mockContextManager(Collections.emptyList(), new Properties());
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
-
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is("FIXTURE"));
+ try (MockedStatic<ShardingSphereServiceLoader> mocked =
mockStatic(ShardingSphereServiceLoader.class, CALLS_REAL_METHODS)) {
+ mocked.when(() ->
ShardingSphereServiceLoader.getServiceInstances(DatabaseProtocolFrontendEngine.class)).thenReturn(Collections.singleton(databaseProtocolFrontendEngine));
+
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is(databaseType.getType()));
+ }
+ }
+
+ @Test
+ void assertGetDatabaseTypeWhenDatabaseHasStorageType() {
+ ContextManager contextManager =
mockContextManager(Collections.singleton(mockDatabaseWithStorageType()), new
Properties());
+
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ try (MockedStatic<ShardingSphereServiceLoader> mocked =
mockStatic(ShardingSphereServiceLoader.class, CALLS_REAL_METHODS)) {
+ mocked.when(() ->
ShardingSphereServiceLoader.getServiceInstances(DatabaseProtocolFrontendEngine.class)).thenReturn(Arrays.asList(mock(),
mock()));
+
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is("STORAGE"));
+ }
+ }
+
+ @Test
+ void assertGetDatabaseTypeWhenNoDatabaseContainsDataSource() {
+ ShardingSphereDatabase database = mock(ShardingSphereDatabase.class);
+ when(database.getName()).thenReturn("foo_db");
+ when(database.getProtocolType()).thenReturn(databaseType);
+ ContextManager contextManager =
mockContextManager(Collections.singleton(database), new Properties());
+
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
+ try (MockedStatic<ShardingSphereServiceLoader> mocked =
mockStatic(ShardingSphereServiceLoader.class, CALLS_REAL_METHODS)) {
+ mocked.when(() ->
ShardingSphereServiceLoader.getServiceInstances(DatabaseProtocolFrontendEngine.class)).thenReturn(Arrays.asList(mock(),
mock()));
+
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is("MySQL"));
+ }
}
@Test
void assertGetDatabaseTypeFromMetaDataContextsProps() {
- ContextManager contextManager =
mockContextManager(Collections.singleton(mockDatabase()),
+ ContextManager contextManager =
mockContextManager(Collections.emptyList(),
PropertiesBuilder.build(new
Property(ConfigurationPropertyKey.PROXY_FRONTEND_DATABASE_PROTOCOL_TYPE.getKey(),
"FIXTURE")));
when(ProxyContext.getInstance().getContextManager()).thenReturn(contextManager);
assertThat(FrontDatabaseProtocolTypeFactory.getDatabaseType().getType(),
is("FIXTURE"));
}
- private ShardingSphereDatabase mockDatabase() {
- ShardingSphereDatabase result = mock(ShardingSphereDatabase.class);
+ private ShardingSphereDatabase mockDatabaseWithStorageType() {
+ ShardingSphereDatabase result = mock(ShardingSphereDatabase.class,
RETURNS_DEEP_STUBS);
when(result.getName()).thenReturn("foo_db");
-
when(result.getProtocolType()).thenReturn(TypedSPILoader.getService(DatabaseType.class,
"MySQL"));
+ when(result.getProtocolType()).thenReturn(databaseType);
+ when(result.containsDataSource()).thenReturn(true);
+ StorageUnit storageUnit = mock(StorageUnit.class, RETURNS_DEEP_STUBS);
+ when(storageUnit.getStorageType().getType()).thenReturn("STORAGE");
+
when(result.getResourceMetaData().getStorageUnits()).thenReturn(Collections.singletonMap("foo_ds",
storageUnit));
return result;
}
private ContextManager mockContextManager(final
Collection<ShardingSphereDatabase> databases, final Properties props) {
ShardingSphereMetaData metaData = new
ShardingSphereMetaData(databases, mock(), mock(), new
ConfigurationProperties(props));
MetaDataContexts metaDataContexts = new MetaDataContexts(metaData,
ShardingSphereStatisticsFactory.create(metaData, new
ShardingSphereStatistics()));
- ComputeNodeInstanceContext computeNodeInstanceContext =
mock(ComputeNodeInstanceContext.class);
-
when(computeNodeInstanceContext.getModeConfiguration()).thenReturn(mock(ModeConfiguration.class));
- return new ContextManager(metaDataContexts,
computeNodeInstanceContext, mock(), mock());
+ return new ContextManager(metaDataContexts,
mock(ComputeNodeInstanceContext.class, RETURNS_DEEP_STUBS), mock(), mock());
}
}