diff --git a/.gitignore b/.gitignore index 5948b6615..306b3108d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,16 +30,13 @@ pom.xml.versionsBackup gen # buildTools -package/buildTools/gradle/ -package/buildTools/.gradle/ -package/buildTools/gradlew -package/buildTools/gradlew.bat +/package/build/ # run data dir. -/logs -/data -/install_upgrade.log +/backend/logs +/backend/data +/backend/install_upgrade.log # web -node_modules -dist \ No newline at end of file +frontend/node_modules +frontend/dist \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md index 8456171e4..babb05668 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -119,13 +119,17 @@ cd frontend && npm run check-i18n - 避免长条件和层层 `if` 堆叠导致代码难读;如果必须校验,优先让边界、契约和数据结构保持清晰。 - 代码要干净直接,好读优先,不要为了抽象而抽象。 - 尽量不写三元表达式,能用 `if` 表达清楚的逻辑,优先使用 `if`。 -- 不写没必要的小 helper,只有复用明显且能降低理解成本时才抽。 + - 连续条件判断的三元表达式只有在完整表达式能控制在 100 个字符以内时才允许使用;超过后必须退化为显式 `if`,避免嵌套三元和换行三元影响阅读。 +- 不写没必要的小 helper,只有复用明显且能降低理解成本时才抽。拆小方法的规则是: + - 2~3 行的代码在 3~5 处以上重复出现,那么适合拆小方法,但是优先考虑使用 JDK 自带工具及 utils 包的工具方法。 + - 一个独立的业务逻辑具有 20行以上的代码量那么适合拆小方法。否则优先 在代码中使用注释分段执行并标记注释。 + - 一个方法超过 40 行就适合评估拆方法。 + - 大段 `if/else` 分支承载独立业务流程时,即使只有一个调用点,也可以抽成有业务含义的小方法。 - 不为了测试扩大生产代码的 public API。 - 不要增加只为测试存在的生产方法。 - 没用到的字段、方法、分支、返回值要删掉。 - 方法、字段可见性要明确,能 `private` 就不要保留为默认或 `public`。 - 默认不要写内部类;能提成独立类就提成独立类。 -- 类不要声明为 `final`,统一使用 `public`。 - 不要使用 `@SneakyThrows`;需要 `try/catch` 异常时,用简短 `msg` 描述错误,并通过 `log.error(msg, e)` 打印异常。 - Java 中能用 Lombok 解决 getter / setter 模板代码的地方,优先使用 Lombok。 - 重复胶水代码要适度收敛,但收敛方式不能比原逻辑更难懂。 diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/ConfigI18nKey.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/ConfigI18nKey.java index 20156c91f..9d60a6e9f 100644 --- a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/ConfigI18nKey.java +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/ConfigI18nKey.java @@ -37,6 +37,8 @@ public enum ConfigI18nKey { CONFIG_DS_DEPLOY_ALIYUN_INSTANCE_ID_DESCRIPTION, CONFIG_RDB_CONFIG_VERSION_DESCRIPTION, CONFIG_RDB_STORE_PASSWORD_DESCRIPTION, + CONFIG_DS_SSH_PROXY_ENABLED, + CONFIG_DS_SSH_CONFIG_ID, // --------------------------------------------------------------------------------------------------- // for Type :com.clougence.clouddm.base.metadata.dsconfig.rdb.RdbConfig diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/DataSourceConfig.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/DataSourceConfig.java index 19b214a34..2b563c9d8 100644 --- a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/DataSourceConfig.java +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/DataSourceConfig.java @@ -38,17 +38,12 @@ public class DataSourceConfig implements DeserializeAble, ConfigKeys { // ------------------------------------------------------------------------------------------------------------------------ basic @ConfigDef(name = "instanceId", descKey = ConfigI18nKey.CONFIG_DS_INSTANCE_ID_DESCRIPTION) private String instanceId; - - /** DataSourceType */ @ConfigDef(name = DM_DS_KEY_DS_TYPE, descKey = ConfigI18nKey.CONFIG_DS_TYPE_DESCRIPTION) private DataSourceType dataSourceType; - @ConfigDef(name = DM_DS_KEY_VERSION, descKey = ConfigI18nKey.CONFIG_RDB_VERSION_DESCRIPTION) private String version; - @ConfigDef(name = DM_DS_KEY_DRIVER_VERSION, descKey = ConfigI18nKey.CONFIG_RDB_VERSION_DESCRIPTION, readOnly = false) private String driverVersion; - @ConfigDef(name = DM_DS_KEY_SEC_TYPE, descKey = ConfigI18nKey.CONFIG_DS_SECURITY_TYPE_DESCRIPTION, readOnly = false, valueAdvance = "NONE / USER_PASSWD / ONLY_PASSWD / ONLY_USER / USER_PASSWD_WITH_TLS / KERBEROS") private SecurityType securityType; @@ -77,26 +72,18 @@ public class DataSourceConfig implements DeserializeAble, ConfigKeys { @ConfigDef(name = DM_DS_KEY_USERNAME, descKey = ConfigI18nKey.CONFIG_RDB_USERNAME_DESCRIPTION, readOnly = false) private String userName; - @ConfigDef(name = DM_DS_KEY_PASSWORD, descKey = ConfigI18nKey.CONFIG_RDB_PASSWORD_DESCRIPTION, isSecret = true, readOnly = false) private String password; - @ConfigDef(name = "defaultDataBase", valueRequire = false, descKey = ConfigI18nKey.CONFIG_RDB_DEFAULT_DB_DESCRIPTION, readOnly = false) private String defaultDataBase; - @ConfigDef(name = "defaultSchema", valueRequire = false, descKey = ConfigI18nKey.CONFIG_RDB_DEFAULT_SCHEMA_DESCRIPTION, readOnly = false) private String defaultSchema; - - /** ip:port */ @ConfigDef(name = DM_DS_KEY_HOST, descKey = ConfigI18nKey.CONFIG_RDB_CONN_HOST_DESCRIPTION, readOnly = false) private String host; - @ConfigDef(name = "connectTimeoutMs", defaultValue = "5000", valueRequire = false, descKey = ConfigI18nKey.CONFIG_RDB_CONN_TIMEOUT_MS_DESCRIPTION, readOnly = false, valueAdvance = "2000 - 100000", group = DsConfigGroup.OPTIONS) private Long connectTimeoutMs; - @ConfigDef(name = "isolation", defaultValue = "DEFAULT", valueAdvance = "DEFAULT/READ_UNCOMMITTED/READ_COMMITTED/REPEATABLE_READ/SERIALIZABLE", descKey = ConfigI18nKey.CONFIG_RDB_ISOLATION_DESCRIPTION, readOnly = false) private String isolation; - @ConfigDef(name = "autoCommit", defaultValue = "true", valueAdvance = "true or false", descKey = ConfigI18nKey.CONFIG_RDB_TRANSACTION_DESCRIPTION, readOnly = false) private Boolean autoCommit; @@ -109,6 +96,10 @@ public class DataSourceConfig implements DeserializeAble, ConfigKeys { // ----------------------------------------------------------------------------------------------- config version UUID,for ssl file update @ConfigDef(name = "configVersion", descKey = ConfigI18nKey.CONFIG_RDB_CONFIG_VERSION_DESCRIPTION, defaultValue = "1") private Long configVersion; + @ConfigDef(name = "sshProxyEnabled", defaultValue = "false", valueAdvance = "true or false", descKey = ConfigI18nKey.CONFIG_DS_SSH_PROXY_ENABLED, readOnly = false, group = DsConfigGroup.OPTIONS) + private Boolean sshProxyEnabled; + @ConfigDef(name = "sshConfigId", valueRequire = false, descKey = ConfigI18nKey.CONFIG_DS_SSH_CONFIG_ID, readOnly = false, group = DsConfigGroup.OPTIONS) + private Long sshConfigId; // aliyun config // --------------------------------------------------------------------------------------------------- diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SecretField.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SecretField.java new file mode 100644 index 000000000..c024a9c66 --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SecretField.java @@ -0,0 +1,26 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Target(ElementType.FIELD) +@Retention(RetentionPolicy.RUNTIME) +public @interface SecretField { +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshAuthType.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshAuthType.java new file mode 100644 index 000000000..a5a423c00 --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshAuthType.java @@ -0,0 +1,34 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +public enum SshAuthType { + + PASSWORD, + PRIVATE_KEY; + + public static SshAuthType valueOfCode(String code) { + if (code == null || code.isEmpty()) { + return null; + } + for (SshAuthType authType : values()) { + if (authType.name().equalsIgnoreCase(code)) { + return authType; + } + } + return null; + } +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConFeatures.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConFeatures.java new file mode 100644 index 000000000..f3a2e6cec --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConFeatures.java @@ -0,0 +1,38 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class SshConFeatures implements Serializable { + + private Boolean keepAliveEnabled; + private Integer serverAliveIntervalMs; + private Integer connectTimeoutMs; + private SshHostKey hostKey; + private boolean strictHostKeyChecking; + private List knownHosts = new ArrayList<>(); +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConfig.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConfig.java new file mode 100644 index 000000000..37d8b3ef4 --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshConfig.java @@ -0,0 +1,44 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class SshConfig implements Serializable { + + private String name; + private String host; + private Integer port; + private String username; + private SshAuthType authType; + @SecretField + private String password; + @SecretField + private String privateKeyData; + @SecretField + private String privateKeyPassphrase; + private SshConFeatures conFeatures; + private SshProxyType proxyType; + private SshProxyFeatures proxyFeatures; +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshHostKey.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshHostKey.java new file mode 100644 index 000000000..7061c47eb --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshHostKey.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class SshHostKey implements Serializable { + + private boolean strictChecking; +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshKnownHost.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshKnownHost.java new file mode 100644 index 000000000..28aeb5eaa --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshKnownHost.java @@ -0,0 +1,34 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.io.Serializable; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class SshKnownHost implements Serializable { + + private String host; + private Integer port; + private String type; + private String key; +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyFeatures.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyFeatures.java new file mode 100644 index 000000000..8ed0db26a --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyFeatures.java @@ -0,0 +1,37 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +import java.io.Serializable; + +import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class SshProxyFeatures implements Serializable { + + private String host; + private Integer port; + private SecurityType securityType; + private String username; + @SecretField + private String password; +} diff --git a/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyType.java b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyType.java new file mode 100644 index 000000000..ac8d34948 --- /dev/null +++ b/backend/clouddm-base/src/main/java/com/clougence/clouddm/base/metadata/ds/SshProxyType.java @@ -0,0 +1,36 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.base.metadata.ds; + +public enum SshProxyType { + + NO_PROXY, + HTTP, + SOCKS4, + SOCKS5; + + public static SshProxyType valueOfCode(String code) { + if (code == null || code.isEmpty()) { + return null; + } + for (SshProxyType proxyType : values()) { + if (proxyType.name().equalsIgnoreCase(code)) { + return proxyType; + } + } + return null; + } +} diff --git a/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/component/scripts/V202606150001__dm_ssh_config.java b/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/component/scripts/V202606150001__dm_ssh_config.java new file mode 100644 index 000000000..b5b73a624 --- /dev/null +++ b/backend/clouddm-boot/boot-initialization/src/main/java/com/clougence/clouddm/init/component/scripts/V202606150001__dm_ssh_config.java @@ -0,0 +1,50 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.init.component.scripts; + +import java.util.List; + +import com.clougence.clouddm.init.component.flyway.AbstractUpgradeJavaMigration; + +public class V202606150001__dm_ssh_config extends AbstractUpgradeJavaMigration { + + @Override + public List collectScript() { + return List.of(""" + CREATE TABLE IF NOT EXISTS `dm_ssh_config` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + `name` varchar(128) NOT NULL COMMENT 'SSH 配置名称', + `host` varchar(512) NOT NULL COMMENT 'SSH 主机', + `port` int NOT NULL DEFAULT 22 COMMENT 'SSH 端口', + `username` varchar(255) NOT NULL COMMENT 'SSH 用户名', + `auth_type` varchar(64) NOT NULL COMMENT 'PASSWORD / PRIVATE_KEY', + `password` varchar(512) DEFAULT NULL COMMENT '登录密码或交互式认证密码密文', + `private_key_data` longtext DEFAULT NULL COMMENT '私钥数据,使用 URI scheme 区分来源', + `private_key_passphrase` varchar(512) DEFAULT NULL COMMENT '私钥 passphrase 密文', + `con_features` longtext DEFAULT NULL COMMENT 'JSON map for SSH connection parameters', + `proxy_type` varchar(64) NOT NULL DEFAULT 'NONE' COMMENT 'NONE / HTTP / SOCKS4 / SOCKS5', + `proxy_features` longtext DEFAULT NULL COMMENT 'JSON map for proxy parameters', + `deleted` tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除标记', + PRIMARY KEY (`id`), + KEY `idx_host` (`host`(127)), + KEY `idx_proxy_type` (`proxy_type`), + KEY `idx_deleted` (`deleted`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 + """); + } +} diff --git a/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/console/configs/ConfigRService.java b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/console/configs/ConfigRService.java index 6b24786cd..f874c28d2 100644 --- a/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/console/configs/ConfigRService.java +++ b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/console/configs/ConfigRService.java @@ -18,7 +18,7 @@ import java.util.List; import com.clougence.clouddm.base.metadata.ds.DataSourceConfig; -import com.clougence.clouddm.base.metadata.ds.DataSourceType; +import com.clougence.clouddm.base.metadata.ds.SshConfig; import com.clougence.clouddm.base.metadata.ds.ToolConfig; import com.clougence.clouddm.base.metadata.rdp.enumeration.ResourceType; import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityFileType; @@ -32,12 +32,14 @@ @RSocketApiClass public interface ConfigRService { - List fetchSettings(String ownerUid, List names); + List fetchSettings(List names); - DataSourceConfig fetchDsConfig(long dsId, DataSourceType dsType); + DataSourceConfig fetchDsConfig(long dsId); ToolConfig fetchToolConfig(String toolName); + SshConfig fetchSshConfig(long sshConfigId); + SensitiveConfig fetchSensitiveConfigByDs(long dsId); byte[] fetchDsFile(String instanceId, ResourceType resourceType, SecurityFileType fileType); diff --git a/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/SshRService.java b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/SshRService.java new file mode 100644 index 000000000..27a3ca04c --- /dev/null +++ b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/SshRService.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.api.sidecar.session.ssh; + +import java.util.List; + +import com.clougence.clouddm.base.metadata.ds.SshConfig; +import com.clougence.clouddm.base.metadata.ds.SshKnownHost; +import com.clougence.clouddm.comm.RSocketApiClass; +import com.clougence.clouddm.comm.model.RSocketSendDTO; + +@RSocketApiClass +public interface SshRService { + + List probeKnownHosts(RSocketSendDTO sendDTO, SshConfig config); + + TestResultDTO testConnection(RSocketSendDTO sendDTO, SshConfig config); +} diff --git a/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/TestResultDTO.java b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/TestResultDTO.java new file mode 100644 index 000000000..2c2fc1dee --- /dev/null +++ b/backend/clouddm-platform/cgdm-api/src/main/java/com/clougence/clouddm/api/sidecar/session/ssh/TestResultDTO.java @@ -0,0 +1,31 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.api.sidecar.session.ssh; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@JsonIgnoreProperties(ignoreUnknown = true) +public class TestResultDTO { + + private Boolean success; + private String message; + private long costMs; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/autoexec/impl/AutoExecManagerImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/autoexec/impl/AutoExecManagerImpl.java index 559f8f8f0..a48d084ff 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/autoexec/impl/AutoExecManagerImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/autoexec/impl/AutoExecManagerImpl.java @@ -30,6 +30,7 @@ import com.clougence.clouddm.console.web.component.autoexec.AutoExecManager; import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; +import com.clougence.clouddm.console.web.util.CallUtils; import com.clougence.clouddm.console.web.util.MessageUtils; import com.clougence.clouddm.platform.dal.access.ExecutionDal; import com.clougence.clouddm.platform.dal.access.MonitorDal; @@ -122,7 +123,7 @@ public void stopJob(Long jobId, DmAuthUserDO user) { return; } - this.autoExecRService.pauseJob(buildRSocketSendDTO(job.getWorkerSeqNumber()), jobId); + this.autoExecRService.pauseJob(CallUtils.buildSendDTO(job.getWorkerSeqNumber()), jobId); job.setStatus(AutoExecJobStatus.PAUSING); this.executionDal.autoJobMapper().updateById(job); @@ -132,18 +133,6 @@ public void stopJob(Long jobId, DmAuthUserDO user) { this.monitorDal.bizLogMapper().insert(logDO); } - private RSocketSendDTO buildRSocketSendDTO(String wsn) { - DmSysWorkerDO worker = systemDal.workerMapper().getByWsn(wsn); - - RSocketSendDTO sendDTO = new RSocketSendDTO(); - sendDTO.setClusterId(worker.getClusterId()); - sendDTO.setWorkerSeqNumber(worker.getWorkerSeqNumber()); - sendDTO.setWorkerIP(worker.getWorkerIp()); - sendDTO.setRSocketSendType(RSocketSendType.SPECIFIED); - - return sendDTO; - } - private RSocketSendDTO buildRSocketSendDTO(long bindClusterId) { List workers = this.systemDal.workerMapper().queryConnectedByClusterId(bindClusterId); if (workers.isEmpty()) { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/detectrule/impl/SecRulesEngineImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/detectrule/impl/SecRulesEngineImpl.java index 5f9d81f8a..b8a83787a 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/detectrule/impl/SecRulesEngineImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/detectrule/impl/SecRulesEngineImpl.java @@ -87,7 +87,7 @@ public SecRulesCheckResult doQueryCheck(String ownerUid, String currentUid, Stri .dsId(context.getDsId()) .levelsParam(levelsParam) .deepParser(true) - .dataSourceConfig(configService.fetchDsConfigFromDM(context.getDsId(), dsCache.getDsType())) + .dataSourceConfig(configService.fetchDsConfigFromDM(context.getDsId())) .build(); CodeInfo codeInfo = CodeInfo.builder().baseLine(context.getBasicCodeLine()).baseColumn(context.getBasicCodeColumn()).query(querySql).build(); domainList = resolveSpi.resolveDomain(dsType, codeInfo, ctxInfo); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/DmDsConfigService.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/DmDsConfigService.java index 50b6b7698..9e66a0007 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/DmDsConfigService.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/DmDsConfigService.java @@ -37,9 +37,9 @@ public interface DmDsConfigService { DataSourceConfig fetchDsConfigFromTemp(DmDsDO dsDO, Map configMap, HostType hostType); - DataSourceConfig fetchDsConfigFromRDP(long dsId, DataSourceType dsType, HostType hostType); + DataSourceConfig fetchDsConfigFromRDP(long dsId, HostType hostType); - DataSourceConfig fetchDsConfigFromDM(long dsId, DataSourceType dsType); + DataSourceConfig fetchDsConfigFromDM(long dsId); String fetchDsConfig(long dsId, String configKey); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsConfigServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsConfigServiceImpl.java index e2571205f..6cdb59857 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsConfigServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsConfigServiceImpl.java @@ -46,8 +46,8 @@ import com.clougence.clouddm.sdk.execute.dsconf.DsConfigMap; import com.clougence.clouddm.sdk.execute.dsconf.DsConfigSpi; import com.clougence.clouddm.sdk.execute.session.rdb.RdbSupportSpi; -import com.clougence.clouddm.sdk.language.DsLanguageSupport; import com.clougence.clouddm.sdk.language.DsLanguageSpi; +import com.clougence.clouddm.sdk.language.DsLanguageSupport; import com.clougence.clouddm.sdk.resource.ResourceCategory; import com.clougence.clouddm.sdk.resource.ResourceSpi; import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; @@ -320,7 +320,7 @@ public DsLevels parseLevels(String levels) { } @Override - public DataSourceConfig fetchDsConfigFromDM(long dsId, DataSourceType dsType) { + public DataSourceConfig fetchDsConfigFromDM(long dsId) { List configs = this.dsDal.configKv4DmMapper().listByDsId(dsId); DmDsDO dsDO = this.dsDal.dsMapper().selectById(dsId); @@ -336,6 +336,9 @@ public DataSourceConfig fetchDsConfigFromDM(long dsId, DataSourceType dsType) { decryptValue(dsConfig, DataSourceConfig.class); decryptValue(dsConfig, dsConfig.getClass()); + log.info("fetch datasource config from dm, dsId={}, dsType={}, host={}, sshProxyEnabled={}, sshConfigId={}, rawSshProxyEnabled={}, rawSshConfigId={}",// + dsId, dsConfig.getDataSourceType(), dsConfig.getHost(), dsConfig.getSshProxyEnabled(), dsConfig.getSshConfigId(),// + configMap.get("sshProxyEnabled"), configMap.get("sshConfigId")); return dsConfig; } @@ -395,7 +398,7 @@ private String findEditorKeywordResourceModule(DsPluginInfo dsPlugin) { } @Override - public DataSourceConfig fetchDsConfigFromRDP(long dsId, DataSourceType dsType, HostType hostType) { + public DataSourceConfig fetchDsConfigFromRDP(long dsId, HostType hostType) { DmDsDO dsDO = this.dsDal.dsMapper().selectById(dsId); HostType ht = hostType == null ? dsDO.getHostType() : hostType; List configs = this.collectConfigFromRdp(dsDO, ht, dsDO.getVersion()); @@ -520,7 +523,7 @@ public void cleanDsConfig(long dsId) { @Override public Map fetchSettingsMap(String ownerUid, List names) { - return this.configService.fetchSettingsMap(ownerUid, names); + return this.configService.fetchSettingsMap(names); } public List fetchDsConfigDef(DataSourceType dsType) { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsServiceImpl.java index bd9f748ab..785b3d803 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/dsconfig/impl/DmDsServiceImpl.java @@ -156,7 +156,7 @@ public String testAndFetchDsVersion(String puid, EnableDsQueryFO fo) { throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.DS_NOT_EXIST_ERROR.name())); } - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromRDP(dsDO.getId(), dsDO.getDataSourceType(), fo.getHostType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); return getVersion(puid, fo.getClusterId(), dsConfig); } @@ -237,7 +237,7 @@ public void enableAndStore(String puid, EnableDsQueryFO fo) { this.notifyServices.forEach(s -> s.onDsUpdate(fo.getDataSourceId())); if (StringUtils.isBlank(dsDO.getVersion())) { - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromRDP(dsDO.getId(), dsDO.getDataSourceType(), fo.getHostType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); try { String version = this.getVersion(puid, fo.getClusterId(), dsConfig); this.dsDal.dsMapper().updateVersionByInstanceId(dsDO.getId(), version); @@ -469,7 +469,7 @@ private void validateDriverReadyBeforeTestConnect(Long clusterId, String driverS @Override public void testConnect(String puid, String uid, DsLevels levels) { DmDsDO dsDO = levels.dsDO(); - DataSourceConfig dsConfig = dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); try { this.dsSchemaService.realTimeFetchVersion(uid, dsDO, levels.levelsParam()); this.dmDsStatusService.resetStatus(uid, dsConfig); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/AfterSqlExecuteServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/AfterSqlExecuteServiceImpl.java index 0fe92812b..a370de48f 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/AfterSqlExecuteServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/AfterSqlExecuteServiceImpl.java @@ -85,7 +85,7 @@ public void handleAfterSqlSuccess(Long dsId, List dsLevels, String sql, SecDomainResolveSpi secDomainResolveSpi = PluginManager.findSecDomainResolveSpi(rdpDataSourceDO.getDataSourceType()); CodeInfo codeInfo = CodeInfo.builder().baseLine(1).baseColumn(0).query(sql).build(); ContextInfo contextInfo = ContextInfo.builder() - .dataSourceConfig(dmDsConfigService.fetchDsConfigFromDM(dsId, rdpDataSourceDO.getDataSourceType())) + .dataSourceConfig(dmDsConfigService.fetchDsConfigFromDM(dsId)) .deepParser(false) .build(); List list = secDomainResolveSpi.resolveDomain(rdpDataSourceDO.getDataSourceType(), codeInfo, contextInfo); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/QueryServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/QueryServiceImpl.java index ec2348471..187a218e8 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/QueryServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/QueryServiceImpl.java @@ -181,7 +181,7 @@ public String createSession(String curUid, DsLevels levels, SessionContextDTO co } // create session - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); try { this.sessionRService.createSession(sendDTO, dsConfig, context); this.dmDsStatusService.resetStatus(sendDTO.getUid(), dsConfig); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/ToolsServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/ToolsServiceImpl.java index 1fe6dbb3c..d9a4ba716 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/ToolsServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/execute/impl/ToolsServiceImpl.java @@ -31,6 +31,7 @@ import com.clougence.clouddm.console.web.component.execute.ToolsService; import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; +import com.clougence.clouddm.console.web.util.CallUtils; import com.clougence.clouddm.console.web.util.MessageUtils; import com.clougence.clouddm.platform.dal.access.ExecutionDal; import com.clougence.clouddm.platform.dal.access.SystemDal; @@ -79,21 +80,6 @@ private RSocketSendDTO buildRSocketSendDTO(long bindClusterId) { return sendDTO; } - private RSocketSendDTO buildRSocketSendDTO(String wsn) { - DmSysWorkerDO workerStatus = this.systemDal.workerMapper().queryConnectedByWsn(wsn); - if (workerStatus != null) { - RSocketSendDTO sendDTO = new RSocketSendDTO(); - sendDTO.setClusterId(workerStatus.getClusterId()); - sendDTO.setWorkerSeqNumber(workerStatus.getWorkerSeqNumber()); - sendDTO.setWorkerIP(workerStatus.getWorkerIp()); - sendDTO.setUid(workerStatus.getUid()); - sendDTO.setRSocketSendType(RSocketSendType.SPECIFIED); - return sendDTO; - } else { - throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.WORKER_STATUS_OFFLINE_ERROR.name(), wsn)); - } - } - @Override public boolean hasSession(String curUid, String sessionId) { DmExecSessionDO sessionDO = this.executionDal.sessionMapper().queryBySessionId(curUid, sessionId); @@ -101,7 +87,7 @@ public boolean hasSession(String curUid, String sessionId) { return false; } - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); return this.toolsRService.hasSession(sendDTO, sessionId); } @@ -120,7 +106,7 @@ public String createSession(String curUid, String toolName, ToolSessionContextDT // close and remove old data. DmExecSessionDO sessionDO = this.executionDal.sessionMapper().queryBySessionId(curUid, sessionId); if (sessionDO != null) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); this.toolsRService.closeSession(sendDTO, sessionId); this.executionDal.sessionMapper().deleteBySessionId(sessionId); } @@ -161,7 +147,7 @@ public void closeSession(String curUid, String sessionId) { return; } - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); this.toolsRService.closeSession(sendDTO, sessionId); this.executionDal.sessionMapper().deleteBySessionId(sessionId); } @@ -173,7 +159,7 @@ public String invoke(String curUid, String sessionId, String methodKey, ToolRequ return null; } - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); ToolResultDTO resultDTO = this.toolsRService.invoke(sendDTO, sessionId, methodKey, requestDTO); if (!resultDTO.isSuccess()) { throw new RuntimeException(resultDTO.getMessage()); @@ -189,7 +175,7 @@ public String tailLog(String curUid, String sessionId, ToolRequestDTO requestDTO return null; } - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); ToolResultDTO resultDTO = this.toolsRService.tailLog(sendDTO, sessionId, requestDTO); if (!resultDTO.isSuccess()) { throw new RuntimeException(resultDTO.getMessage()); @@ -205,7 +191,7 @@ public String tailStatus(String curUid, String sessionId, ToolRequestDTO request return null; } - RSocketSendDTO sendDTO = buildRSocketSendDTO(sessionDO.getWsn()); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(sessionDO.getWsn()); ToolResultDTO resultDTO = this.toolsRService.tailStatus(sendDTO, sessionId, requestDTO); if (!resultDTO.isSuccess()) { throw new RuntimeException(resultDTO.getMessage()); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/file/impl/FileServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/file/impl/FileServiceImpl.java index bc9a93b21..a86672dfb 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/file/impl/FileServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/file/impl/FileServiceImpl.java @@ -30,12 +30,12 @@ import com.clougence.clouddm.api.sidecar.session.execute.ResultPageDTO; import com.clougence.clouddm.api.sidecar.session.execute.ResultSetRService; import com.clougence.clouddm.comm.model.RSocketSendDTO; -import com.clougence.clouddm.comm.model.RSocketSendType; import com.clougence.clouddm.console.web.component.file.FileService; import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; import com.clougence.clouddm.console.web.service.editor.model.DataResultDataVO; import com.clougence.clouddm.console.web.service.editor.model.DataResultPageVO; +import com.clougence.clouddm.console.web.util.CallUtils; import com.clougence.clouddm.console.web.util.DmConvertUtils; import com.clougence.clouddm.platform.dal.access.ExecutionDal; import com.clougence.clouddm.platform.dal.access.SystemDal; @@ -74,21 +74,6 @@ public void stop() { } - private RSocketSendDTO buildRSocketSendDTO(String wsn) { - DmSysWorkerDO worker = this.systemDal.workerMapper().queryConnectedByWsn(wsn); - if (worker != null) { - RSocketSendDTO sendDTO = new RSocketSendDTO(); - sendDTO.setClusterId(worker.getClusterId()); - sendDTO.setWorkerSeqNumber(worker.getWorkerSeqNumber()); - sendDTO.setWorkerIP(worker.getWorkerIp()); - sendDTO.setUid(worker.getUid()); - sendDTO.setRSocketSendType(RSocketSendType.SPECIFIED); - return sendDTO; - } else { - throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.CONSOLE_QUERY_WORKER_STATUS_OFFLINE_ERROR.name(), wsn)); - } - } - private void doClearJob() { Calendar c = Calendar.getInstance(); c.setTime(new Date()); @@ -169,7 +154,7 @@ private void deleteFile(DmExecFileDO f) { String fsName = fileUri.getScheme().toLowerCase(); if (StringUtils.equalsIgnoreCase(fsName, "wsn")) { String wsn = fileUri.getHost(); - RSocketSendDTO sendDTO = this.buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); this.resultSetRService.deleteFile(sendDTO, fileUri.getPath(), false); log.info("delete file [{}] on worker [{}] success.", fileUri.getPath(), wsn); } @@ -181,7 +166,7 @@ private boolean existsFile(DmExecFileDO f) { String fsName = fileUri.getScheme().toLowerCase(); if (StringUtils.equalsIgnoreCase(fsName, "wsn")) { String wsn = fileUri.getHost(); - RSocketSendDTO sendDTO = this.buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); return this.resultSetRService.fileSize(sendDTO, fileUri.getPath()) >= 0; } else { return false; @@ -191,7 +176,7 @@ private boolean existsFile(DmExecFileDO f) { @Override public String submitFileConvert(String puid, String userId, String wsn, String srcFileId, String exportId, DmFileType dmFileType, String srcFile, String dstFile, String formatName, String option) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); return this.resultSetRService.convertFile(sendDTO, puid, userId, srcFileId, exportId, dmFileType, srcFile, dstFile, formatName, option); } @@ -207,25 +192,25 @@ public String fetchFileExtensionByFormatName(String dstFormatName) { @Override public void deleteFile(String wsn, String filePath) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); this.resultSetRService.deleteFile(sendDTO, filePath, false); } @Override public void deleteTemp(String wsn, String filePath) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); this.resultSetRService.deleteFile(sendDTO, filePath, true); } @Override public long fetchFileSize(String wsn, String filePath) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); return this.resultSetRService.fileSize(sendDTO, filePath); } @Override public byte[] fetchFileData(String wsn, String filePath, long offset, int length) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); ResultFileReadDTO readDTO = this.resultSetRService.fileRead(sendDTO, filePath, offset, length); if (readDTO.isSuccess()) { @@ -237,7 +222,7 @@ public byte[] fetchFileData(String wsn, String filePath, long offset, int length @Override public DataResultPageVO fetchResultPage(String wsn, String filePath, long rowOffset, int pageSize) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); ResultPageDTO readDTO = this.resultSetRService.resultPageRead(sendDTO, filePath, rowOffset, pageSize); if (readDTO.isSuccess()) { @@ -249,7 +234,7 @@ public DataResultPageVO fetchResultPage(String wsn, String filePath, long rowOff @Override public DataResultDataVO fetchResultCol(String wsn, String filePath, long rowNumber, long colNumber, long offset, int length) { - RSocketSendDTO sendDTO = buildRSocketSendDTO(wsn); + RSocketSendDTO sendDTO = CallUtils.buildSendDTO(wsn); ResultColDTO readDTO = this.resultSetRService.resultDataRead(sendDTO, filePath, rowNumber, colNumber, offset, length); if (readDTO.isSuccess()) { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/project/action/ChangeActionForFinish.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/project/action/ChangeActionForFinish.java index d47f17115..e425cbf35 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/project/action/ChangeActionForFinish.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/project/action/ChangeActionForFinish.java @@ -28,7 +28,7 @@ import com.clougence.clouddm.console.web.component.project.model.ChangeExecuteInfo; import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; -import com.clougence.clouddm.console.web.util.HttpUtils; +import com.clougence.clouddm.console.web.util.CallUtils; import com.clougence.clouddm.platform.dal.model.project.*; import com.clougence.utils.CollectionUtils; import com.clougence.utils.JsonUtils; @@ -122,9 +122,9 @@ private void doCallBack(Locale locale, DmProjectChangeDO change, DmProjectDevops String callbackMethod = devopsDO.getCallbackMethod(); Response res; if (StringUtils.equalsIgnoreCase(callbackMethod, "post")) { - res = HttpUtils.post(devopsDO.getCallbackUrl(), Collections.emptyMap()); + res = CallUtils.post(devopsDO.getCallbackUrl(), Collections.emptyMap()); } else if (StringUtils.equalsIgnoreCase(callbackMethod, "get")) { - res = HttpUtils.get(devopsDO.getCallbackUrl()); + res = CallUtils.get(devopsDO.getCallbackUrl()); } else { throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.PROJECT_CHANGE_CALLBACK_METHOD_NOT_SUPPORT_ERROR.name(), locale, change.getChangeName())); } diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/schema/RemoteDsSchemaService.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/schema/RemoteDsSchemaService.java index 0dc6e4403..1f7a82743 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/schema/RemoteDsSchemaService.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/component/schema/RemoteDsSchemaService.java @@ -16,10 +16,8 @@ package com.clougence.clouddm.console.web.component.schema; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.springframework.stereotype.Service; @@ -49,7 +47,6 @@ import com.clougence.schema.umi.struts.UmiTypes; import com.clougence.schema.umi.struts.Value; import com.clougence.utils.JsonUtils; -import com.clougence.utils.StringUtils; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @@ -81,7 +78,7 @@ protected RSocketSendDTO genClusterSendDTO(DmDsDO dsDO, String uid) { } protected final DataSourceConfig fetchDsConfig(DmDsDO dataSourceDO) { - return this.dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId(), dataSourceDO.getDataSourceType()); + return this.dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId()); } @Override @@ -153,7 +150,10 @@ public List cachedObjectNames(String uid, DmDsDO dsDO, List private static boolean shouldListLevels(DsConfig dsConfig, List levels) { int currentSize = levels == null ? 0 : levels.size(); - return dsConfig != null && dsConfig.getCategories() != null && dsConfig.getCategories().getLevels() != null && dsConfig.getCategories().getLevels().size() > currentSize + 2; + return dsConfig != null &&// + dsConfig.getCategories() != null &&// + dsConfig.getCategories().getLevels() != null && // + dsConfig.getCategories().getLevels().size() > currentSize + 2; } // diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/datasource/SshConfigController.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/datasource/SshConfigController.java new file mode 100644 index 000000000..6a7834054 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/datasource/SshConfigController.java @@ -0,0 +1,158 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.controller.datasource; + +import static com.clougence.clouddm.sdk.security.auth.def.SecRoleAuthLabel.DM_SSH_CHANNEL_READ; +import static com.clougence.clouddm.sdk.security.auth.def.SecRoleAuthLabel.DM_SSH_CHANNEL_WRITE; + +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +import com.clougence.clouddm.api.common.exception.ErrorMessageException; +import com.clougence.clouddm.api.common.rpc.ResWebData; +import com.clougence.clouddm.api.common.rpc.ResWebDataUtils; +import com.clougence.clouddm.base.metadata.ds.SshProxyType; +import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; +import com.clougence.clouddm.console.web.constants.DmControllerUrlPrefix; +import com.clougence.clouddm.console.web.global.config.DmConsoleConfig; +import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; +import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; +import com.clougence.clouddm.console.web.global.jwtsession.RequestAuth; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigIdFO; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigListFO; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigSaveFO; +import com.clougence.clouddm.console.web.model.fo.ssh.TestSshConnectionFO; +import com.clougence.clouddm.console.web.service.auth.RdpUserService; +import com.clougence.clouddm.console.web.service.ssh.SshConfigService; +import com.clougence.clouddm.console.web.util.Sm2Utils; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; +import lombok.extern.slf4j.Slf4j; + +@RestController +@RequestMapping(value = DmControllerUrlPrefix.CONSOLE_PREFIX + "/sshConfig") +@Slf4j +public class SshConfigController { + + @Resource + private SshConfigService sshConfigService; + @Resource + private DmConsoleConfig config; + + @RequestAuth(DM_SSH_CHANNEL_READ) + @RequestMapping(value = "/list", method = RequestMethod.POST) + public ResWebData list(@Valid @RequestBody SshConfigListFO fo) { + return ResWebDataUtils.buildSuccess(this.sshConfigService.list(fo.getSearch())); + } + + @RequestAuth(DM_SSH_CHANNEL_READ) + @RequestMapping(value = "/detail", method = RequestMethod.POST) + public ResWebData detail(@Valid @RequestBody SshConfigIdFO fo) { + return ResWebDataUtils.buildSuccess(this.sshConfigService.detail(fo.getId())); + } + + @RequestAuth(DM_SSH_CHANNEL_WRITE) + @RequestMapping(value = "/create", method = RequestMethod.POST) + public ResWebData create(@Valid @RequestBody SshConfigSaveFO fo, HttpServletRequest request) { + validateRequest(fo); + String uid = (String) request.getAttribute(RdpUserService.UID); + String privateKey = this.config.getPrivateKey(); + fo.setPassword(Sm2Utils.decrypt(privateKey, fo.getPassword())); + fo.setPrivateKeyPassphrase(Sm2Utils.decrypt(privateKey, fo.getPrivateKeyPassphrase())); + if (fo.getProxyFeatures() != null) { + fo.getProxyFeatures().setPassword(Sm2Utils.decrypt(privateKey, fo.getProxyFeatures().getPassword())); + } + return ResWebDataUtils.buildSuccess(this.sshConfigService.create(uid, fo)); + } + + @RequestAuth(DM_SSH_CHANNEL_WRITE) + @RequestMapping(value = "/update", method = RequestMethod.POST) + public ResWebData update(@Valid @RequestBody SshConfigSaveFO fo, HttpServletRequest request) { + validateRequest(fo); + String uid = (String) request.getAttribute(RdpUserService.UID); + String privateKey = this.config.getPrivateKey(); + fo.setPassword(Sm2Utils.decrypt(privateKey, fo.getPassword())); + fo.setPrivateKeyPassphrase(Sm2Utils.decrypt(privateKey, fo.getPrivateKeyPassphrase())); + if (fo.getProxyFeatures() != null) { + fo.getProxyFeatures().setPassword(Sm2Utils.decrypt(privateKey, fo.getProxyFeatures().getPassword())); + } + this.sshConfigService.update(uid, fo); + return ResWebDataUtils.buildSuccess(); + } + + @RequestAuth(DM_SSH_CHANNEL_WRITE) + @RequestMapping(value = "/delete", method = RequestMethod.POST) + public ResWebData delete(@Valid @RequestBody SshConfigIdFO fo, HttpServletRequest request) { + String uid = (String) request.getAttribute(RdpUserService.UID); + this.sshConfigService.delete(uid, fo.getId()); + return ResWebDataUtils.buildSuccess(); + } + + @RequestAuth(DM_SSH_CHANNEL_READ) + @RequestMapping(value = "/testConnection", method = RequestMethod.POST) + public ResWebData testConnection(@Valid @RequestBody TestSshConnectionFO fo) { + if (fo != null && fo.getConfig() != null) { + validateRequest(fo.getConfig()); + String privateKey = this.config.getPrivateKey(); + SshConfigSaveFO config = fo.getConfig(); + config.setPassword(Sm2Utils.decrypt(privateKey, config.getPassword())); + config.setPrivateKeyPassphrase(Sm2Utils.decrypt(privateKey, config.getPrivateKeyPassphrase())); + if (config.getProxyFeatures() != null) { + config.getProxyFeatures().setPassword(Sm2Utils.decrypt(privateKey, config.getProxyFeatures().getPassword())); + } + } + return ResWebDataUtils.buildSuccess(this.sshConfigService.testConnection(fo)); + } + + @RequestAuth(DM_SSH_CHANNEL_WRITE) + @RequestMapping(value = "/probeKnownHosts", method = RequestMethod.POST) + public ResWebData probeKnownHosts(@Valid @RequestBody TestSshConnectionFO fo) { + if (fo != null && fo.getConfig() != null) { + validateRequest(fo.getConfig()); + String privateKey = this.config.getPrivateKey(); + SshConfigSaveFO config = fo.getConfig(); + config.setPassword(Sm2Utils.decrypt(privateKey, config.getPassword())); + config.setPrivateKeyPassphrase(Sm2Utils.decrypt(privateKey, config.getPrivateKeyPassphrase())); + if (config.getProxyFeatures() != null) { + config.getProxyFeatures().setPassword(Sm2Utils.decrypt(privateKey, config.getProxyFeatures().getPassword())); + } + } + return ResWebDataUtils.buildSuccess(this.sshConfigService.probeKnownHosts(fo)); + } + + private void validateRequest(SshConfigSaveFO fo) { + if (fo == null) { + return; + } + if (fo.getPort() == null || fo.getPort() <= 0 || fo.getPort() > 65535) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_PORT_REQUIRED_ERROR.name())); + } + if (fo.getProxyType() == null || fo.getProxyType() == SshProxyType.NO_PROXY) { + return; + } + if (fo.getProxyFeatures() == null || fo.getProxyFeatures().getSecurityType() == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_PROXY_AUTH_TYPE_REQUIRED_ERROR.name())); + } + SecurityType securityType = fo.getProxyFeatures().getSecurityType(); + if (securityType != SecurityType.NONE && securityType != SecurityType.USER_PASSWD) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_PROXY_AUTH_TYPE_UNSUPPORTED_ERROR.name())); + } + } +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/editor/query/QueryEditorController.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/editor/query/QueryEditorController.java index 0b29afb50..260024ec9 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/editor/query/QueryEditorController.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/controller/editor/query/QueryEditorController.java @@ -18,10 +18,6 @@ import static com.clougence.clouddm.sdk.security.auth.def.SecRoleAuthLabel.DM_QUERY_CONSOLE; import java.net.URI; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -43,9 +39,7 @@ import com.clougence.clouddm.console.web.model.vo.editor.query.DsStatusConfVO; import com.clougence.clouddm.console.web.model.vo.editor.query.DsStatusSupportConfVO; import com.clougence.clouddm.console.web.model.vo.editor.query.OperationSessionVO; -import com.clougence.clouddm.console.web.model.vo.editor.query.SessionVO; import com.clougence.clouddm.console.web.service.auth.RdpUserService; -import com.clougence.clouddm.console.web.service.browse.model.rdb.BrowseColumnMO; import com.clougence.clouddm.console.web.service.editor.DsQueryEditorService; import com.clougence.clouddm.console.web.service.editor.model.DataResultDataVO; import com.clougence.clouddm.console.web.service.editor.model.DataResultPageVO; @@ -62,11 +56,7 @@ import com.clougence.clouddm.sdk.execute.session.rdb.RdbIsolation; import com.clougence.clouddm.sdk.execute.session.rdb.RdbSupportLevel; import com.clougence.clouddm.sdk.execute.session.rdb.RdbSupportSpi; -import com.clougence.clouddm.sdk.model.analysis.resource.DsResPath; -import com.clougence.clouddm.sdk.security.auth.AuthKind; -import com.clougence.clouddm.sdk.security.auth.def.SecDataAuthLabel; import com.clougence.clouddm.sdk.security.auth.def.SecRoleAuthLabel; -import com.clougence.schema.umi.struts.UmiTypes; import com.clougence.utils.JsonUtils; import com.clougence.utils.StringUtils; import com.clougence.utils.i18n.I18nUtils; @@ -152,7 +142,7 @@ public ResWebData fetchDsStatusConf(@Valid @RequestBody Availabl } I18nUtils dsI18n = PluginManager.findDsI18nUtil(entry.getDsType()); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(entry.getDsNumId(), entry.getDsType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(entry.getDsNumId()); if (supportSpi != null) { vo.setCatalog(convertToSupportedInfoMap(RdbSupportSpi.HINT_FOR_CHANGE_CATALOG, this.dmSupportSpiWrapper.supportChangeCatalog(supportSpi, dsConfig), dsI18n)); vo.setSchema(convertToSupportedInfoMap(RdbSupportSpi.HINT_FOR_CHANGE_SCHEMA, this.dmSupportSpiWrapper.supportChangeSchema(supportSpi, dsConfig), dsI18n)); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/config/DmConsoleConfig.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/config/DmConsoleConfig.java index 70f057345..283780a99 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/config/DmConsoleConfig.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/config/DmConsoleConfig.java @@ -67,10 +67,8 @@ public class DmConsoleConfig { // for Product @Value("${clouddm.features.auto_upgrade_sec_rules:true}") private boolean autoUpdateInnerRules; - @Value("${clougence.clouddm.console.openapi.timeout:120}") private Integer openApiTimeout; - @Value("${clougence.rdp.console.csrf:false}") private Boolean activeCsrfCheck; @Value("${clougence.rdp.login.retry.max-count:5}") diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/i18n/I18nDmMsgKeys.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/i18n/I18nDmMsgKeys.java index 9f48efb8b..bed169d7f 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/i18n/I18nDmMsgKeys.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/i18n/I18nDmMsgKeys.java @@ -60,6 +60,19 @@ public enum I18nDmMsgKeys { DS_DEVOPS_NEED_DISABLE, DS_DEVOPS_NEED_ENABLE, + // -- for SSH + SSH_CONFIG_REQUIRED_ERROR, + SSH_CONFIG_NAME_BLANK_ERROR, + SSH_HOST_BLANK_ERROR, + SSH_PORT_REQUIRED_ERROR, + SSH_USERNAME_BLANK_ERROR, + SSH_AUTH_TYPE_REQUIRED_ERROR, + SSH_CONFIG_ID_REQUIRED_ERROR, + SSH_CONFIG_NOT_EXIST_ERROR, + SSH_TEST_REQUEST_REQUIRED_ERROR, + SSH_PROXY_AUTH_TYPE_REQUIRED_ERROR, + SSH_PROXY_AUTH_TYPE_UNSUPPORTED_ERROR, + // -- for DevOps DEVOPS_REQUIRE_ENABLE_QUERY, DEVOPS_DISABLE_IN_USE, diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/init/DmInitUtils.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/init/DmInitUtils.java index f90441ea7..9da3c94ce 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/init/DmInitUtils.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/global/init/DmInitUtils.java @@ -47,6 +47,7 @@ public void init() throws Exception { RdpWebUtils.initUtils(this.rdpConfig); MessageUtils.initUtils(this.applicationContext); + CallUtils.initUtils(this.applicationContext); DmDsUtils.initUtils(this.applicationContext); DmTeamUtils.initUtils(this.applicationContext); FetchRangeUtils.initUtils(this.applicationContext); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigIdFO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigIdFO.java new file mode 100644 index 000000000..70f8d88c4 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigIdFO.java @@ -0,0 +1,28 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.fo.ssh; + +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshConfigIdFO { + + @NotNull(message = "{ssh.config.id.notnull}") + private Long id; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigListFO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigListFO.java new file mode 100644 index 000000000..1f66d75ba --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigListFO.java @@ -0,0 +1,26 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.fo.ssh; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshConfigListFO { + + private String search; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigSaveFO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigSaveFO.java new file mode 100644 index 000000000..70aa43716 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshConfigSaveFO.java @@ -0,0 +1,42 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.fo.ssh; + +import com.clougence.clouddm.base.metadata.ds.SshAuthType; +import com.clougence.clouddm.base.metadata.ds.SshConFeatures; +import com.clougence.clouddm.base.metadata.ds.SshProxyType; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshConfigSaveFO { + + private Long id; + private String name; + private String host; + private Integer port; + private String username; + private SshAuthType authType; + private String password; + private String privateKeyData; + private String privateKeyPassphrase; + private SshConFeatures conFeatures; + private SshProxyType proxyType; + private SshProxyFeaturesFO proxyFeatures; + private String workerSeqNumber; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshProxyFeaturesFO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshProxyFeaturesFO.java new file mode 100644 index 000000000..0400435a4 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/SshProxyFeaturesFO.java @@ -0,0 +1,32 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.fo.ssh; + +import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshProxyFeaturesFO { + + private String host; + private Integer port; + private SecurityType securityType; + private String username; + private String password; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/TestSshConnectionFO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/TestSshConnectionFO.java new file mode 100644 index 000000000..1eb26605c --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/fo/ssh/TestSshConnectionFO.java @@ -0,0 +1,28 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.fo.ssh; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class TestSshConnectionFO { + + private Long sshConfigId; + private SshConfigSaveFO config; + private String workerSeqNumber; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigDetailVO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigDetailVO.java new file mode 100644 index 000000000..10e635d8d --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigDetailVO.java @@ -0,0 +1,34 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.vo.ssh; + +import com.clougence.clouddm.base.metadata.ds.SshConFeatures; +import com.clougence.clouddm.base.metadata.ds.SshProxyFeatures; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshConfigDetailVO extends SshConfigListVO { + + private Boolean passwordConfigured; + private Boolean privateKeyDataConfigured; + private Boolean privateKeyPassphraseConfigured; + private Boolean proxyPasswordConfigured; + private SshConFeatures conFeatures; + private SshProxyFeatures proxyFeatures; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigListVO.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigListVO.java new file mode 100644 index 000000000..b62782827 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/model/vo/ssh/SshConfigListVO.java @@ -0,0 +1,39 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.model.vo.ssh; + +import java.util.Date; + +import com.clougence.clouddm.base.metadata.ds.SshAuthType; +import com.clougence.clouddm.base.metadata.ds.SshProxyType; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class SshConfigListVO { + + private Long id; + private Date gmtCreate; + private Date gmtModified; + private String name; + private String host; + private Integer port; + private String username; + private SshAuthType authType; + private SshProxyType proxyType; +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ConfigRServiceProvider.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ConfigRServiceProvider.java index 062c43dc5..f315e8654 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ConfigRServiceProvider.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ConfigRServiceProvider.java @@ -21,7 +21,7 @@ import com.clougence.clouddm.api.console.configs.ConfigRService; import com.clougence.clouddm.base.metadata.ds.DataSourceConfig; -import com.clougence.clouddm.base.metadata.ds.DataSourceType; +import com.clougence.clouddm.base.metadata.ds.SshConfig; import com.clougence.clouddm.base.metadata.ds.ToolConfig; import com.clougence.clouddm.base.metadata.rdp.enumeration.ResourceType; import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityFileType; @@ -30,6 +30,7 @@ import com.clougence.clouddm.console.web.component.detectrule.SecRulesService; import com.clougence.clouddm.console.web.component.dsconfig.DmDsConfigService; import com.clougence.clouddm.console.web.component.dsconfig.DmToolConfigService; +import com.clougence.clouddm.console.web.service.ssh.SshConfigService; import com.clougence.clouddm.platform.dal.access.DataSourceDal; import com.clougence.clouddm.platform.dal.access.entry.EnvCacheEntry; import com.clougence.clouddm.platform.dal.model.datasource.DmDsBlobResourceDO; @@ -59,15 +60,22 @@ public class ConfigRServiceProvider extends AbstractBasicProvider implements Con private SecRulesService secRulesService; @Resource private ConsoleConfigService consoleConfigService; + @Resource + private SshConfigService sshConfigService; + + @Override + public List fetchSettings(List names) { + return this.consoleConfigService.fetchSettings(names); + } @Override - public List fetchSettings(String ownerUid, List names) { - return this.consoleConfigService.fetchSettings(ownerUid, names); + public DataSourceConfig fetchDsConfig(long dsId) { + return this.dsConfigService.fetchDsConfigFromDM(dsId); } @Override - public DataSourceConfig fetchDsConfig(long dsId, DataSourceType dsType) { - return this.dsConfigService.fetchDsConfigFromDM(dsId, dsType); + public SshConfig fetchSshConfig(long sshConfigId) { + return this.sshConfigService.fetchSshConfig(sshConfigId); } @Override diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ExecJobRServiceProvider.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ExecJobRServiceProvider.java index b2ab1c4b4..5fdf0b407 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ExecJobRServiceProvider.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/provider/ExecJobRServiceProvider.java @@ -99,7 +99,7 @@ public AutoExecJobDTO fetchJobInfo(WorkerIdentity identity, Long jobId) { jobDTO.setRetryWaitTime(dmAutoExecJobDO.getConfig().getRetryWaitTime()); jobDTO.setEnableTransactional(dmAutoExecJobDO.getConfig().isEnableTransactional()); DmDsDO dsDO = dsDal.dsMapper().queryDsIdentityById(dmAutoExecJobDO.getDataSourceId()); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); ArrayList levels = new ArrayList<>(); levels.add(dsDO.getDsEnvId().toString()); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/approval/ApprovalControlServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/approval/ApprovalControlServiceImpl.java index 7303dd71a..0634c752e 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/approval/ApprovalControlServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/approval/ApprovalControlServiceImpl.java @@ -251,8 +251,7 @@ public DmTicketResultVO createSqlTicket(String puid, String uid, DmAddTicketFO f public void createAuthTicket(String ownerUid, String uid, RdpAddAuthTicketFO fo) { DmAuthUserDO user = this.authDal.userMapper().queryByUid(uid); if (user != null && user.getAccountType() == AccountType.PRIMARY_ACCOUNT) { - throw new ErrorMessageException( - DmI18nUtils.getMessage(I18nRdpMsgKeys.TICKET_AUTH_TICKET_ROOT_ACCOUNT_UNSUPPORTED.name())); + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nRdpMsgKeys.TICKET_AUTH_TICKET_ROOT_ACCOUNT_UNSUPPORTED.name())); } List dsIds = fo.getApplyAuths().stream().map(ApplyAuth::getResId).sorted().collect(Collectors.toList()); @@ -388,7 +387,7 @@ private int analysisSqlAndCheckResource(DmAddTicketFO fo, DataSourceType dsType, break; } }); - DataSourceConfig dataSourceConfig = dmDsConfigService.fetchDsConfigFromDM(dsLevels.dsDO().getId(), dsLevels.dsDO().getDataSourceType()); + DataSourceConfig dataSourceConfig = dmDsConfigService.fetchDsConfigFromDM(dsLevels.dsDO().getId()); Map> ruleDomainListMap = this.queryAnalysisService.analysisResourceV2(dataSourceConfig, fo.getRawSql(), params); List resObjects = ruleDomainListMap.values().stream().flatMap(List::stream).collect(Collectors.toList()); String path = dsLevels.asResPath().getResPath(); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/ActionServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/ActionServiceImpl.java index b44062f6a..995cf3c05 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/ActionServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/ActionServiceImpl.java @@ -386,7 +386,7 @@ public ActionInfo parseAction(DsLevels levels, ActionTargetMO mo) { private List executeSql(String puid, String uid, String clientIp, ActionInfo info, Map levelsParam, List generateSql, ActionTargetMO mo) { DmDsDO dsDO = info.getDsDO(); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); DsConfig dsSetting = this.dmDsConfigService.dsConstantSettings(dsDO.getDataSourceType()); SessionSpi sessionSpi = PluginManager.findSessionSpi(dsDO.getDataSourceType()); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/BrowseServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/BrowseServiceImpl.java index dd8ccff2c..6c1d8ae0c 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/BrowseServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/browse/BrowseServiceImpl.java @@ -99,7 +99,7 @@ public List listDs(String puid, String uid, String envId) { dsRdbSupportMap.put(dsDO.getDataSourceType(), supportSpi); } - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); String dsHost = this.dmDsConfigService.fetchDsConfig(dsDO.getId(), ConfigKeys.DM_DS_KEY_HOST); dsConfigMap.put(dsDO.getId(), dsConfig); dsHostMap.put(dsDO.getId(), dsHost); @@ -187,7 +187,7 @@ public BrowseLevelsVO detailDs(String uid, DsLevels dsLevels) { DmDsDO detailDO = dsList.get(0); DmDsTagDO dsTags = this.dsDal.tagMapper().getByDsAndUser(detailDO.getId(), uid); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(detailDO.getId(), detailDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(detailDO.getId()); RdbSupportSpi supportSpi = PluginManager.findRdbSupportSpi(dsConfig.getDataSourceType()); String dsHost = this.dmDsConfigService.fetchDsConfig(detailDO.getId(), ConfigKeys.DM_DS_KEY_HOST); DmDsConfigDO dmDsConfigDO = dsDal.configMapper().queryByDataSourceId(dsLevels.dsDO().getId()); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsDataEditorServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsDataEditorServiceImpl.java index 885d6b33a..0a4ad3845 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsDataEditorServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsDataEditorServiceImpl.java @@ -93,7 +93,7 @@ public DataEditorResultVO fetchData(String puid, String uid, String clientIp, Ds // create session/request String sessionId = null; try { - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); SessionContextDTO sessionCtx = DmDsUtils.createSessionCtx(dsConfig, levelsParam); sessionId = this.queryService.createSession(uid, levels, sessionCtx); @@ -162,7 +162,7 @@ public long fetchCount(String puid, String uid, DsLevels levels, SelectCountFO s // create session/request String sessionId = null; try { - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); SessionContextDTO sessionCtx = DmDsUtils.createSessionCtx(dsConfig, levelsParam); sessionId = this.queryService.createSession(uid, levels, sessionCtx); @@ -234,7 +234,7 @@ public DataEditorExecuteResultDTO saveData(String puid, String uid, DsLevels lev // create session/request String sessionId = null; try { - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); SessionContextDTO sessionCtx = DmDsUtils.createSessionCtx(dsConfig, levelsParam); sessionId = this.queryService.createSession(uid, levels, sessionCtx); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsQueryEditorServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsQueryEditorServiceImpl.java index 6079281bb..9e46e11da 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsQueryEditorServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsQueryEditorServiceImpl.java @@ -154,7 +154,7 @@ public String createSession(String curUid, List levels, boolean autoComm } DmDsDO dsDO = dsLevels.dsDO(); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); SessionContextDTO sessionCtx = this.createSessionCtx(levels); sessionCtx.setSessionId(usingSessionId); @@ -397,7 +397,7 @@ private SessionContextDTO createSessionCtx(List levels) { DmDsDO dsDO = parsed.dsDO(); SessionSpi sessionSpi = PluginManager.findSessionSpi(dsDO.getDataSourceType()); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); Map params = new HashMap<>(); params.put(SessionSpi.PARAMS_DEFAULT_DB, StringUtils.toString(parsed.levelsParam().get(UmiTypes.Catalog))); diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsTableEditorServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsTableEditorServiceImpl.java index 64bea0d4c..39ff619eb 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsTableEditorServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/DsTableEditorServiceImpl.java @@ -218,7 +218,7 @@ public List tableEditorSave(String puid, String uid, DsLevels leve // execute sql Map levelsParam = levels.levelsParam(); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); String sessionId = ""; try { @@ -289,7 +289,7 @@ private TableEditor restoreEditor(String uid, DmDsDO dsDO, Map private void triggerToUiDataPlugins(EditorViewMode viewMode, ETable source, TableEditorUiData target, DmDsDO dataSourceDO) { TableEditorUiDataSpi spi = PluginManager.findTableEditorSpi(dataSourceDO.getDataSourceType()); if (spi != null) { - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId(), dataSourceDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId()); spi.fillUiData(viewMode, source, target, dsConfig.getVersion()); } } @@ -297,7 +297,7 @@ private void triggerToUiDataPlugins(EditorViewMode viewMode, ETable source, Tabl private void triggerToETablePlugins(EditorViewMode viewMode, TableEditorUiData source, ETable target, DmDsDO dataSourceDO) { TableEditorUiDataSpi spi = PluginManager.findTableEditorSpi(dataSourceDO.getDataSourceType()); if (spi != null) { - DataSourceConfig dsConfig = dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId(), dataSourceDO.getDataSourceType()); + DataSourceConfig dsConfig = dmDsConfigService.fetchDsConfigFromDM(dataSourceDO.getId()); spi.fillETable(viewMode, source, target, dsConfig.getVersion()); } } diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/language/ConsoleLanguageService.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/language/ConsoleLanguageService.java index 763ca83ee..bc48cbfba 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/language/ConsoleLanguageService.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/language/ConsoleLanguageService.java @@ -148,7 +148,7 @@ private LanguageCtx createLanguageCtx(WsLanguageFO fo) { } }); - return new LanguageCtx(levels, this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()), ctxDTO, params); + return new LanguageCtx(levels, this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()), ctxDTO, params); } private static AbstractRequest parseRequest(WsLanguageFO fo, LanguageCtx ctx, JSONObject json) { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/query/ConsoleQueryService.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/query/ConsoleQueryService.java index 02de86b57..1cf3d7c2c 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/query/ConsoleQueryService.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/editor/query/ConsoleQueryService.java @@ -992,7 +992,7 @@ public QueryCtx createQueryCtx(WsQueryFO queryDTO) { String sessionId = queryDTO.getSessionId(); DsLevels levels = this.dmDsConfigService.parseLevels(queryDTO.getLevels()); DmDsDO dsDO = levels.dsDO(); - DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId(), dsDO.getDataSourceType()); + DataSourceConfig dsConfig = this.dmDsConfigService.fetchDsConfigFromDM(dsDO.getId()); Map params = new HashMap<>(); levels.levelsParam().forEach((umiType, value) -> { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/sdk/ConsolePluginConfigServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/sdk/ConsolePluginConfigServiceImpl.java index 94cd284bb..b0b551644 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/sdk/ConsolePluginConfigServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/sdk/ConsolePluginConfigServiceImpl.java @@ -39,12 +39,12 @@ public class ConsolePluginConfigServiceImpl implements ConfigService { private ConsoleConfigService consoleConfigService; @Override - public List fetchSettings(String ownerUid, List names) { - return this.consoleConfigService.fetchSettings(ownerUid, names); + public List fetchSettings(List names) { + return this.consoleConfigService.fetchSettings(names); } @Override - public DataSourceConfig fetchDsConfig(long dsId, DataSourceType dsType) { + public DataSourceConfig fetchDsConfig(long dsId) { throw new UnsupportedOperationException("Console plugin config service does not support datasource config."); } diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/security/AuditServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/security/AuditServiceImpl.java index 2d71d988a..c30b78eaf 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/security/AuditServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/security/AuditServiceImpl.java @@ -140,7 +140,7 @@ private List recodeSql(List list, String wsn) { } } try { - DataSourceConfig dataSourceConfig = dmDsConfigService.fetchDsConfigFromDM(rdpDataSourceDO.getId(), rdpDataSourceDO.getDataSourceType()); + DataSourceConfig dataSourceConfig = dmDsConfigService.fetchDsConfigFromDM(rdpDataSourceDO.getId()); Map> objs = queryAnalysisService.analysisResourceV2(dataSourceConfig, dto.getSql(), map); List collect = objs.values().stream().flatMap(List::stream).map(obj -> { diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigService.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigService.java new file mode 100644 index 000000000..89614bc75 --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigService.java @@ -0,0 +1,45 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.service.ssh; + +import java.util.List; + +import com.clougence.clouddm.api.sidecar.session.ssh.TestResultDTO; +import com.clougence.clouddm.base.metadata.ds.SshConfig; +import com.clougence.clouddm.base.metadata.ds.SshKnownHost; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigSaveFO; +import com.clougence.clouddm.console.web.model.fo.ssh.TestSshConnectionFO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigDetailVO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigListVO; + +public interface SshConfigService { + + List list(String search); + + SshConfigDetailVO detail(long id); + + Long create(String uid, SshConfigSaveFO fo); + + void update(String uid, SshConfigSaveFO fo); + + void delete(String uid, Long id); + + TestResultDTO testConnection(TestSshConnectionFO fo); + + List probeKnownHosts(TestSshConnectionFO fo); + + SshConfig fetchSshConfig(Long id); +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigServiceImpl.java new file mode 100644 index 000000000..a14188d9c --- /dev/null +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/service/ssh/SshConfigServiceImpl.java @@ -0,0 +1,326 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.console.web.service.ssh; + +import java.util.Date; +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.stereotype.Service; + +import com.clougence.clouddm.api.common.exception.ErrorMessageException; +import com.clougence.clouddm.api.sidecar.session.ssh.SshRService; +import com.clougence.clouddm.api.sidecar.session.ssh.TestResultDTO; +import com.clougence.clouddm.base.metadata.ds.*; +import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; +import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; +import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigSaveFO; +import com.clougence.clouddm.console.web.model.fo.ssh.SshProxyFeaturesFO; +import com.clougence.clouddm.console.web.model.fo.ssh.TestSshConnectionFO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigDetailVO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigListVO; +import com.clougence.clouddm.console.web.util.CallUtils; +import com.clougence.clouddm.console.web.util.DmConvertUtils; +import com.clougence.clouddm.platform.dal.access.SystemDal; +import com.clougence.clouddm.platform.dal.model.datasource.DmSshConfigDO; +import com.clougence.utils.StringUtils; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class SshConfigServiceImpl implements SshConfigService { + + private record TestSshConfigDTO(String workerSeqNumber, SshConfig sshConfig, boolean strictHostKeyChecking) { + } + + @Resource + private SystemDal systemDal; + @Resource + private SshRService sshRService; + + @Override + public List list(String search) { + return this.systemDal.sshConfigMapper()// + .queryList(search) + .stream() + .map(DmConvertUtils::convertToSshConfigListVO) + .collect(Collectors.toList()); + } + + @Override + public SshConfigDetailVO detail(long id) { + DmSshConfigDO configDO = this.requireConfig(id); + return DmConvertUtils.convertToSshConfigDetailVO(configDO); + } + + @Override + public Long create(String uid, SshConfigSaveFO fo) { + validate(fo); + + DmSshConfigDO configDO = buildStorageConfig(null, fo); + configDO.setGmtCreate(new Date()); + configDO.setGmtModified(configDO.getGmtCreate()); + this.systemDal.sshConfigMapper().insert(configDO); + return configDO.getId(); + } + + @Override + public void update(String uid, SshConfigSaveFO fo) { + if (fo.getId() == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_ID_REQUIRED_ERROR.name())); + } + + validate(fo); + DmSshConfigDO exists = requireConfig(fo.getId()); + DmSshConfigDO configDO = buildStorageConfig(exists, fo); + configDO.setId(exists.getId()); + configDO.setGmtModified(new Date()); + this.systemDal.sshConfigMapper().updateById(configDO); + } + + private void validate(SshConfigSaveFO fo) { + if (fo == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_REQUIRED_ERROR.name())); + } + if (StringUtils.isBlank(fo.getName())) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_NAME_BLANK_ERROR.name())); + } + if (StringUtils.isBlank(fo.getHost())) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_HOST_BLANK_ERROR.name())); + } + if (StringUtils.isBlank(fo.getUsername())) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_USERNAME_BLANK_ERROR.name())); + } + if (fo.getAuthType() == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_AUTH_TYPE_REQUIRED_ERROR.name())); + } + } + + @Override + public void delete(String uid, Long id) { + if (id == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_ID_REQUIRED_ERROR.name())); + } + + this.systemDal.sshConfigMapper().deleteById(id); + } + + @Override + public TestResultDTO testConnection(TestSshConnectionFO fo) { + if (fo == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_TEST_REQUEST_REQUIRED_ERROR.name())); + } + + TestSshConfigDTO testConfig = prepareTestConfig(fo); + String workerSeqNumber = testConfig.workerSeqNumber(); + SshConfig sshConfig = testConfig.sshConfig(); + boolean strictHostKeyChecking = testConfig.strictHostKeyChecking(); + + // test connection + long start = System.currentTimeMillis(); + log.info("start test ssh connection, sshConfigId={}, workerSeqNumber={}, host={}, port={}, username={}, authType={}, proxyType={}, strictHostKeyChecking={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort(), sshConfig.getUsername(),// + sshConfig.getAuthType(), sshConfig.getProxyType(), strictHostKeyChecking); + try { + TestResultDTO result = this.sshRService.testConnection(CallUtils.buildSendDTO(workerSeqNumber), sshConfig); + if (Boolean.TRUE.equals(result.getSuccess())) { + log.info("finish test ssh connection, sshConfigId={}, workerSeqNumber={}, host={}, port={}, success=true, costMs={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort(), result.getCostMs()); + } else { + log.warn("finish test ssh connection, sshConfigId={}, workerSeqNumber={}, host={}, port={}, success=false, costMs={}, message={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort(), result.getCostMs(), result.getMessage()); + } + return result; + } catch (RuntimeException e) { + log.warn("test ssh connection request failed, sshConfigId={}, workerSeqNumber={}, host={}, port={}, costMs={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort(), System.currentTimeMillis() - start, e); + throw e; + } + } + + private TestSshConfigDTO prepareTestConfig(TestSshConnectionFO fo) { + String workerSeqNumber; + if (StringUtils.isNotBlank(fo.getWorkerSeqNumber())) { + workerSeqNumber = fo.getWorkerSeqNumber(); + } else if (fo.getConfig() != null) { + workerSeqNumber = fo.getConfig().getWorkerSeqNumber(); + } else { + workerSeqNumber = null; + } + + DmSshConfigDO exists = requireConfig(fo.getSshConfigId()); + if (fo.getConfig() == null && exists == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_REQUIRED_ERROR.name())); + } + + SshConfig sshConfig = fo.getConfig() == null ? DmConvertUtils.convertToSshConfig(exists) : DmConvertUtils.convertToSshConfigForTest(exists, fo.getConfig()); + SshConFeatures conFeatures = sshConfig.getConFeatures(); + boolean strictHostKeyChecking = false; + if (conFeatures != null && conFeatures.getHostKey() != null) { + strictHostKeyChecking = conFeatures.getHostKey().isStrictChecking(); + } else if (conFeatures != null) { + strictHostKeyChecking = conFeatures.isStrictHostKeyChecking(); + } + + if (strictHostKeyChecking && (conFeatures == null || conFeatures.getKnownHosts() == null || conFeatures.getKnownHosts().isEmpty())) { + if (conFeatures == null) { + conFeatures = new SshConFeatures(); + sshConfig.setConFeatures(conFeatures); + } + log.info("auto probe missing ssh known hosts before test, sshConfigId={}, workerSeqNumber={}, host={}, port={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort()); + conFeatures.setKnownHosts(this.sshRService.probeKnownHosts(CallUtils.buildSendDTO(workerSeqNumber), sshConfig)); + if (fo.getConfig() == null) { + exists.setConFeatures(conFeatures); + exists.setGmtModified(new Date()); + this.systemDal.sshConfigMapper().updateById(exists); + } + } + + return new TestSshConfigDTO(workerSeqNumber, sshConfig, strictHostKeyChecking); + } + + @Override + public List probeKnownHosts(TestSshConnectionFO fo) { + if (fo == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_TEST_REQUEST_REQUIRED_ERROR.name())); + } + + String workerSeqNumber; + if (StringUtils.isNotBlank(fo.getWorkerSeqNumber())) { + workerSeqNumber = fo.getWorkerSeqNumber(); + } else if (fo.getConfig() != null) { + workerSeqNumber = fo.getConfig().getWorkerSeqNumber(); + } else { + workerSeqNumber = null; + } + + DmSshConfigDO exists = requireConfig(fo.getSshConfigId()); + if (fo.getConfig() == null && exists == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_REQUIRED_ERROR.name())); + } + + SshConfig sshConfig = fo.getConfig() == null ? DmConvertUtils.convertToSshConfig(exists) : DmConvertUtils.convertToSshConfigForTest(exists, fo.getConfig()); + log.info("probe ssh known hosts, sshConfigId={}, workerSeqNumber={}, host={}, port={}",// + fo.getSshConfigId(), workerSeqNumber, sshConfig.getHost(), sshConfig.getPort()); + return this.sshRService.probeKnownHosts(CallUtils.buildSendDTO(workerSeqNumber), sshConfig); + } + + // + + private DmSshConfigDO requireConfig(Long id) { + if (id == null) { + return null; + } + + DmSshConfigDO configDO = this.systemDal.sshConfigMapper().queryById(id); + if (configDO == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_NOT_EXIST_ERROR.name(), id)); + } + return configDO; + } + + @Override + public SshConfig fetchSshConfig(Long id) { + if (id == null) { + throw new ErrorMessageException(DmI18nUtils.getMessage(I18nDmMsgKeys.SSH_CONFIG_ID_REQUIRED_ERROR.name())); + } else { + return DmConvertUtils.convertToSshConfig(requireConfig(id)); + } + } + + private DmSshConfigDO buildStorageConfig(DmSshConfigDO exists, SshConfigSaveFO fo) { + DmSshConfigDO configDO = new DmSshConfigDO(); + configDO.setName(fo.getName()); + configDO.setHost(fo.getHost()); + configDO.setPort(fo.getPort()); + configDO.setUsername(fo.getUsername()); + configDO.setAuthType(fo.getAuthType()); + if (fo.getPassword() == null && exists != null) { + configDO.setPassword(exists.getPassword()); + } else { + configDO.setPassword(fo.getPassword()); + } + if (fo.getPrivateKeyData() == null && exists != null) { + configDO.setPrivateKeyData(exists.getPrivateKeyData()); + } else { + configDO.setPrivateKeyData(fo.getPrivateKeyData()); + } + if (fo.getPrivateKeyPassphrase() == null && exists != null) { + configDO.setPrivateKeyPassphrase(exists.getPrivateKeyPassphrase()); + } else { + configDO.setPrivateKeyPassphrase(fo.getPrivateKeyPassphrase()); + } + + // SshConFeatures + SshConFeatures existsConFeatures = exists == null ? null : exists.getConFeatures(); + SshConFeatures conFeatures = fo.getConFeatures() == null ? existsConFeatures : fo.getConFeatures(); + if (conFeatures == null) { + conFeatures = new SshConFeatures(); + } + if ((conFeatures.getKnownHosts() == null || conFeatures.getKnownHosts().isEmpty()) && existsConFeatures != null) { + conFeatures.setKnownHosts(existsConFeatures.getKnownHosts()); + } + configDO.setConFeatures(conFeatures); + + // SshProxyFeatures + SshProxyType proxyType = fo.getProxyType() == null ? SshProxyType.NO_PROXY : fo.getProxyType(); + SshProxyFeatures proxyFeatures; + if (proxyType == SshProxyType.NO_PROXY) { + proxyFeatures = new SshProxyFeatures(); + } else { + proxyFeatures = buildStorageProxyFeatures(fo.getProxyFeatures(), exists == null ? null : exists.getProxyFeatures()); + } + configDO.setProxyType(proxyType); + configDO.setProxyFeatures(proxyFeatures); + boolean strictHostKeyChecking = conFeatures.isStrictHostKeyChecking(); + if (conFeatures.getHostKey() != null) { + strictHostKeyChecking = conFeatures.getHostKey().isStrictChecking(); + } + if (strictHostKeyChecking && (conFeatures.getKnownHosts() == null || conFeatures.getKnownHosts().isEmpty())) { + SshConfig runtime = DmConvertUtils.convertToSshConfig(configDO); + log.info("auto probe missing ssh known hosts before save, sshConfigId={}, workerSeqNumber={}, host={}, port={}",// + fo.getId(), fo.getWorkerSeqNumber(), runtime.getHost(), runtime.getPort()); + conFeatures.setKnownHosts(this.sshRService.probeKnownHosts(CallUtils.buildSendDTO(fo.getWorkerSeqNumber()), runtime)); + } + + return configDO; + } + + private SshProxyFeatures buildStorageProxyFeatures(SshProxyFeaturesFO submitted, SshProxyFeatures exists) { + if (submitted == null) { + return exists == null ? new SshProxyFeatures() : exists; + } + + SshProxyFeatures features = new SshProxyFeatures(); + features.setHost(submitted.getHost()); + features.setPort(submitted.getPort()); + features.setSecurityType(submitted.getSecurityType()); + if (submitted.getSecurityType() == SecurityType.USER_PASSWD) { + features.setUsername(submitted.getUsername()); + if (submitted.getPassword() == null && exists != null) { + features.setPassword(exists.getPassword()); + } else { + features.setPassword(submitted.getPassword()); + } + } + return features; + } + +} diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/HttpUtils.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/CallUtils.java similarity index 50% rename from backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/HttpUtils.java rename to backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/CallUtils.java index 37831ea4b..0026bf797 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/HttpUtils.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/CallUtils.java @@ -17,9 +17,22 @@ import java.io.IOException; import java.net.URLEncoder; +import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; +import org.springframework.context.ApplicationContext; + +import com.clougence.clouddm.api.common.exception.ErrorMessageException; +import com.clougence.clouddm.comm.constants.worker.WorkerConnStatus; +import com.clougence.clouddm.comm.model.RSocketSendDTO; +import com.clougence.clouddm.comm.model.RSocketSendType; +import com.clougence.clouddm.console.web.global.i18n.DmI18nUtils; +import com.clougence.clouddm.console.web.global.i18n.I18nDmMsgKeys; +import com.clougence.clouddm.platform.dal.access.SystemDal; +import com.clougence.clouddm.platform.dal.model.system.DmSysWorkerDO; +import com.clougence.utils.StringUtils; + import lombok.extern.slf4j.Slf4j; import okhttp3.FormBody; import okhttp3.OkHttpClient; @@ -31,9 +44,14 @@ * @since 1.1.3 */ @Slf4j -public class HttpUtils { +public class CallUtils { private static final OkHttpClient client = new OkHttpClient.Builder().readTimeout(6, TimeUnit.SECONDS).build(); + private static SystemDal systemDal; + + public static void initUtils(ApplicationContext spring) { + systemDal = spring.getBean(SystemDal.class); + } public static Response get(String callbackUrl) throws IOException { Request request = new Request.Builder().url(callbackUrl).build(); @@ -52,4 +70,27 @@ public static Response post(String callbackUrl, Map formBody) th .build(); return client.newCall(request).execute(); } + + public static RSocketSendDTO buildSendDTO(String workerSeqNumber) { + DmSysWorkerDO worker; + if (StringUtils.isNotBlank(workerSeqNumber)) { + worker = systemDal.workerMapper().queryConnectedByWsn(workerSeqNumber); + } else { + List workers = systemDal.workerMapper().queryByConnStatus(WorkerConnStatus.CONNECTED); + worker = workers == null || workers.isEmpty() ? null : workers.get(0); + } + + if (worker == null) { + String msg = DmI18nUtils.getMessage(I18nDmMsgKeys.WORKER_STATUS_OFFLINE_ERROR.name(), workerSeqNumber); + throw new ErrorMessageException(msg); + } + + RSocketSendDTO sendDTO = new RSocketSendDTO(); + sendDTO.setClusterId(worker.getClusterId()); + sendDTO.setWorkerSeqNumber(worker.getWorkerSeqNumber()); + sendDTO.setWorkerIP(worker.getWorkerIp()); + sendDTO.setUid(worker.getUid()); + sendDTO.setRSocketSendType(RSocketSendType.SPECIFIED); + return sendDTO; + } } diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/DmConvertUtils.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/DmConvertUtils.java index de373c1f2..244f7a365 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/DmConvertUtils.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/DmConvertUtils.java @@ -28,8 +28,7 @@ import com.clougence.clouddm.api.common.exception.ErrorMessageException; import com.clougence.clouddm.api.sidecar.session.execute.ResultPageDTO; -import com.clougence.clouddm.base.metadata.ds.DataSourceConfig; -import com.clougence.clouddm.base.metadata.ds.DataSourceType; +import com.clougence.clouddm.base.metadata.ds.*; import com.clougence.clouddm.base.metadata.rdp.enumeration.ResultEnum; import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; import com.clougence.clouddm.console.web.component.detectrule.SecHintInfo; @@ -47,6 +46,8 @@ import com.clougence.clouddm.console.web.model.fo.editor.query.WsQueryFO; import com.clougence.clouddm.console.web.model.fo.openapi.DmApiDsListFO; import com.clougence.clouddm.console.web.model.fo.openapi.DmApiDsQueryFO; +import com.clougence.clouddm.console.web.model.fo.ssh.SshConfigSaveFO; +import com.clougence.clouddm.console.web.model.fo.ssh.SshProxyFeaturesFO; import com.clougence.clouddm.console.web.model.vo.DsKvConfigVO; import com.clougence.clouddm.console.web.model.vo.audit.OperateUserVO; import com.clougence.clouddm.console.web.model.vo.browse.BrowseLevelsVO; @@ -61,7 +62,8 @@ import com.clougence.clouddm.console.web.model.vo.faker.DmAsyncTaskVO; import com.clougence.clouddm.console.web.model.vo.openapi.DmApiDataSourceVO; import com.clougence.clouddm.console.web.model.vo.project.*; -import com.clougence.clouddm.console.web.model.vo.system.CloudOrIdcNameVO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigDetailVO; +import com.clougence.clouddm.console.web.model.vo.ssh.SshConfigListVO; import com.clougence.clouddm.console.web.service.browse.model.ActionInfo; import com.clougence.clouddm.console.web.service.browse.model.ActionTargetMO; import com.clougence.clouddm.console.web.service.browse.model.GenerateSqlDataAuthEnum; @@ -963,14 +965,6 @@ public static WorkerVO convertToWorkerVO(DmSysWorkerDO workerDO, WorkerDetector return vo; } - public static CloudOrIdcNameVO convertToCloudOrIdcNameVO(CloudOrIdcName cloudOrIdcName, CloudOrIdcName defaultOption) { - CloudOrIdcNameVO vo = new CloudOrIdcNameVO(); - vo.setCloudOrIdcName(cloudOrIdcName); - vo.setDefaultCheck(cloudOrIdcName == defaultOption); - vo.setI18nName(DmI18nUtils.getMessage(cloudOrIdcName.name())); - return vo; - } - public static DmSimpleDsVO convertToDmSimpleDsVO(DmDsDO dsDO, Map confMap) { DmSimpleDsVO vo = new DmSimpleDsVO(); vo.setId(dsDO.getId()); @@ -1007,6 +1001,187 @@ public static DmSimpleDsVO convertToDmSimpleDsVO(DmDsDO dsDO, Map queryList, long dsId, UserCacheEntry userCache = ownerCacheService.queryByUid(curUser); DsCacheEntry dsCache = ownerCacheService.queryByDsId(dsId); EnvCacheEntry envCache = ownerCacheService.queryByEnvId(dsCache.getEnvId()); - Map configMap = consoleService.fetchSettingsMap(dsCache.getOwnerUid(), Arrays.asList(// + Map configMap = consoleService.fetchSettingsMap(Arrays.asList(// UserDefinedConfig.Fields.defaultColumnDisplayChars, // UserDefinedConfig.Fields.onlineMaxRecordCount, // UserDefinedConfig.Fields.onlineMaxResultSetMegaByte,// diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/Sm2Utils.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/Sm2Utils.java index aa543f61e..d2d9fc339 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/Sm2Utils.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/clouddm/console/web/util/Sm2Utils.java @@ -62,7 +62,10 @@ public static String encrypt(String publicKey, String data) { } public static String decrypt(String privateKey, String cipherData) { - if (StringUtils.isEmpty(cipherData)) { + if (cipherData == null) { + return null; + } + if (StringUtils.isBlank(cipherData) || isSm2EncryptedEmptyText(cipherData)) { return ""; } @@ -87,4 +90,18 @@ public static String decrypt(String privateKey, String cipherData) { throw new ErrorMessageException(DmI18nUtils.getMessage(I18nRdpMsgKeys.COMM_SM2_ENCOUNTERED_ERROR.name(), e.getMessage())); } } + + private static boolean isSm2EncryptedEmptyText(String value) { + String cipherText = value.startsWith("04") ? value.substring(2) : value; + if (cipherText.length() != 192) { + return false; + } + for (int i = 0; i < cipherText.length(); i++) { + char c = cipherText.charAt(i); + if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f') || (c >= 'A' && c <= 'F'))) { + return false; + } + } + return true; + } } diff --git a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/rdp/service/impl/ConfigServiceImpl.java b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/rdp/service/impl/ConfigServiceImpl.java index 5a3ebfd67..536b0d597 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/rdp/service/impl/ConfigServiceImpl.java +++ b/backend/clouddm-platform/cgdm-console/src/main/java/com/clougence/rdp/service/impl/ConfigServiceImpl.java @@ -15,7 +15,10 @@ */ package com.clougence.clouddm.console.web.component.config.impl; -import java.util.*; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import org.springframework.stereotype.Service; @@ -30,7 +33,6 @@ import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; import com.clougence.clouddm.sdk.service.config.RoleData; import com.clougence.clouddm.sdk.service.config.UserData; -import com.clougence.rdp.global.config.user.UserDefinedConfig; import com.clougence.utils.CollectionUtils; import jakarta.annotation.Resource; @@ -49,8 +51,8 @@ public class ConfigServiceImpl implements ConsoleConfigService { private UserConfigService userConfigService; @Override - public List fetchSettings(String ownerUid, List names) { - List configList = this.userConfigService.getSpecifiedConfigs(ownerUid, names); + public List fetchSettings(List names) { + List configList = this.userConfigService.getSpecifiedConfigs(AuthDal.ROOT_USER_UID, names); if (CollectionUtils.isEmpty(configList)) { return Collections.emptyList(); } else { @@ -59,14 +61,8 @@ public List fetchSettings(String ownerUid, List names) { } @Override - public Map fetchSettingsMap(String ownerUid, List names) { - List configList = this.fetchSettings(ownerUid, Arrays.asList(// - UserDefinedConfig.Fields.defaultColumnDisplayChars, // - UserDefinedConfig.Fields.onlineMaxRecordCount, // - UserDefinedConfig.Fields.onlineMaxResultSetMegaByte,// - UserDefinedConfig.Fields.onlineMaxColumnMegaByte, // - UserDefinedConfig.Fields.onlineMaxElementMegaByte) // - ); + public Map fetchSettingsMap(List names) { + List configList = this.fetchSettings(names); Map configMap = new HashMap<>(); for (ConfigData c : configList) { configMap.put(c.getConfigName(), c.getConfigValue()); @@ -85,8 +81,8 @@ public UserData findUserByUID(String uid) { } @Override - public List findRoleByName(String ownerUid, String roleName) { - List roles = this.authDal.roleMapper().queryByRoleName(ownerUid, roleName); + public List findRoleByName(String roleName) { + List roles = this.authDal.roleMapper().queryByRoleName(AuthDal.ROOT_USER_UID, roleName); if (CollectionUtils.isEmpty(roles)) { return Collections.emptyList(); } else { diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig.properties index 9516b1afe..a95c93b7d 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig.properties @@ -15,6 +15,8 @@ CONFIG_DS_ONLINE_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=在线查询中,查询执 CONFIG_DS_EXPORT_MAX_CONCURRENT_DESCRIPTION=后台查询任务中,数据源最大可用连接数。 CONFIG_DS_EXPORT_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=后台查询任务中,查询执行超时时间。 CONFIG_DS_READONLY_DESCRIPTION=只读模式 +CONFIG_DS_SSH_PROXY_ENABLED=启用 SSH 通道 +CONFIG_DS_SSH_CONFIG_ID=SSH 通道配置 ID CONFIG_DS_DEPLOY_ALIYUN_INSTANCE_ID_DESCRIPTION=数据源为阿里云类型,所对应的阿里云实例 ID CONFIG_RDB_CONFIG_VERSION_DESCRIPTION=配置版本号 # diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_en_US.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_en_US.properties index 9516b1afe..92eb3eb6b 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_en_US.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_en_US.properties @@ -15,6 +15,8 @@ CONFIG_DS_ONLINE_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=在线查询中,查询执 CONFIG_DS_EXPORT_MAX_CONCURRENT_DESCRIPTION=后台查询任务中,数据源最大可用连接数。 CONFIG_DS_EXPORT_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=后台查询任务中,查询执行超时时间。 CONFIG_DS_READONLY_DESCRIPTION=只读模式 +CONFIG_DS_SSH_PROXY_ENABLED=Enable SSH Channel +CONFIG_DS_SSH_CONFIG_ID=SSH Channel Config ID CONFIG_DS_DEPLOY_ALIYUN_INSTANCE_ID_DESCRIPTION=数据源为阿里云类型,所对应的阿里云实例 ID CONFIG_RDB_CONFIG_VERSION_DESCRIPTION=配置版本号 # diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_zh_CN.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_zh_CN.properties index fd532b380..dfeaea02f 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_zh_CN.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/dsconfig_zh_CN.properties @@ -15,6 +15,8 @@ CONFIG_DS_ONLINE_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=在线查询中,查询执 CONFIG_DS_EXPORT_MAX_CONCURRENT_DESCRIPTION=后台查询任务中,数据源最大可用连接数。 CONFIG_DS_EXPORT_MAX_QUERY_TIMEOUT_SEC_DESCRIPTION=后台查询任务中,查询执行超时时间。 CONFIG_DS_READONLY_DESCRIPTION=只读模式 +CONFIG_DS_SSH_PROXY_ENABLED=启用 SSH 通道 +CONFIG_DS_SSH_CONFIG_ID=SSH 通道配置 ID CONFIG_DS_DEPLOY_ALIYUN_INSTANCE_ID_DESCRIPTION=数据源为阿里云类型,所对应的阿里云实例 ID CONFIG_RDB_CONFIG_VERSION_DESCRIPTION=配置版本号 # diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg.properties index 398d46103..bce7dd238 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg.properties @@ -32,6 +32,18 @@ DS_OBJECT_NOT_EXIST=数据库对象 {0} 不存在! DS_QUERY_NEED_ENABLE=数据源没有启用查询。 DS_DEVOPS_NEED_DISABLE=请先禁用数据源的 CI/CD! DS_DEVOPS_NEED_ENABLE=请先开启数据源的 CI/CD! +# -- for SSH +SSH_CONFIG_REQUIRED_ERROR=SSH channel config can not be null. +SSH_CONFIG_NAME_BLANK_ERROR=SSH channel name can not be blank. +SSH_HOST_BLANK_ERROR=SSH host can not be blank. +SSH_PORT_REQUIRED_ERROR=SSH port must be between 1 and 65535. +SSH_USERNAME_BLANK_ERROR=SSH username can not be blank. +SSH_AUTH_TYPE_REQUIRED_ERROR=SSH authentication type can not be null. +SSH_CONFIG_ID_REQUIRED_ERROR=SSH channel ID can not be null. +SSH_CONFIG_NOT_EXIST_ERROR=SSH channel config does not exist: {0} +SSH_TEST_REQUEST_REQUIRED_ERROR=SSH test connection request can not be null. +SSH_PROXY_AUTH_TYPE_REQUIRED_ERROR=SSH proxy authentication type can not be null. +SSH_PROXY_AUTH_TYPE_UNSUPPORTED_ERROR=SSH proxy authentication only supports none or username/password. # -- for DevOps DEVOPS_REQUIRE_ENABLE_QUERY=请先启用数据管理。 DEVOPS_DISABLE_IN_USE=有 {0} 个发布流正在使用它, 请到 {1} 项目关闭后在尝试! diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_en_US.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_en_US.properties index 1227f58e9..c0b3f2c08 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_en_US.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_en_US.properties @@ -32,6 +32,18 @@ DS_OBJECT_NOT_EXIST=数据库对象 {0} 不存在! DS_QUERY_NEED_ENABLE=数据源没有启用查询。 DS_DEVOPS_NEED_DISABLE=请先禁用数据源的 CI/CD! DS_DEVOPS_NEED_ENABLE=请先开启数据源的 CI/CD! +# -- for SSH +SSH_CONFIG_REQUIRED_ERROR=SSH channel config can not be null. +SSH_CONFIG_NAME_BLANK_ERROR=SSH channel name can not be blank. +SSH_HOST_BLANK_ERROR=SSH host can not be blank. +SSH_PORT_REQUIRED_ERROR=SSH port must be between 1 and 65535. +SSH_USERNAME_BLANK_ERROR=SSH username can not be blank. +SSH_AUTH_TYPE_REQUIRED_ERROR=SSH authentication type can not be null. +SSH_CONFIG_ID_REQUIRED_ERROR=SSH channel ID can not be null. +SSH_CONFIG_NOT_EXIST_ERROR=SSH channel config does not exist: {0} +SSH_TEST_REQUEST_REQUIRED_ERROR=SSH test connection request can not be null. +SSH_PROXY_AUTH_TYPE_REQUIRED_ERROR=SSH proxy authentication type can not be null. +SSH_PROXY_AUTH_TYPE_UNSUPPORTED_ERROR=SSH proxy authentication only supports none or username/password. # -- for DevOps DEVOPS_REQUIRE_ENABLE_QUERY=请先启用数据管理。 DEVOPS_DISABLE_IN_USE=有 {0} 个发布流正在使用它, 请到 {1} 项目关闭后在尝试! diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_zh_CN.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_zh_CN.properties index 56ca6291a..67a1f2e6e 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_zh_CN.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/msg_zh_CN.properties @@ -32,6 +32,18 @@ DS_OBJECT_NOT_EXIST=数据库对象 {0} 不存在! DS_QUERY_NEED_ENABLE=数据源没有启用查询。 DS_DEVOPS_NEED_DISABLE=请先禁用数据源的 CI/CD! DS_DEVOPS_NEED_ENABLE=请先开启数据源的 CI/CD! +# -- for SSH +SSH_CONFIG_REQUIRED_ERROR=SSH 通道配置不能为空 +SSH_CONFIG_NAME_BLANK_ERROR=SSH 通道名称不能为空 +SSH_HOST_BLANK_ERROR=SSH 主机地址不能为空 +SSH_PORT_REQUIRED_ERROR=SSH 端口必须在 1 到 65535 之间 +SSH_USERNAME_BLANK_ERROR=SSH 用户名不能为空 +SSH_AUTH_TYPE_REQUIRED_ERROR=SSH 认证方式不能为空 +SSH_CONFIG_ID_REQUIRED_ERROR=SSH 通道 ID 不能为空 +SSH_CONFIG_NOT_EXIST_ERROR=SSH 通道配置不存在:{0} +SSH_TEST_REQUEST_REQUIRED_ERROR=SSH 测试连接请求不能为空 +SSH_PROXY_AUTH_TYPE_REQUIRED_ERROR=SSH 代理认证方式不能为空 +SSH_PROXY_AUTH_TYPE_UNSUPPORTED_ERROR=SSH 代理认证仅支持无认证或用户名密码。 # -- for DevOps DEVOPS_REQUIRE_ENABLE_QUERY=请先启用数据管理。 DEVOPS_DISABLE_IN_USE=有 {0} 个发布流正在使用它, 请到 {1} 项目关闭后在尝试! diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation.properties index 745705171..48bc120a8 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation.properties @@ -26,4 +26,6 @@ checkrules.content.notblank=规则内容不能为空! # ticket.sql.notnull=执行 SQL 不能为空! ticket.dbLevels.notblank=目标数据源信息不能为空! -ticket.title.notblank=工单标题不能为空! \ No newline at end of file +ticket.title.notblank=工单标题不能为空! +# +ssh.config.id.notnull=SSH 通道 ID 不能为空! \ No newline at end of file diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_en_US.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_en_US.properties index 745705171..8b8ddf32a 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_en_US.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_en_US.properties @@ -26,4 +26,6 @@ checkrules.content.notblank=规则内容不能为空! # ticket.sql.notnull=执行 SQL 不能为空! ticket.dbLevels.notblank=目标数据源信息不能为空! -ticket.title.notblank=工单标题不能为空! \ No newline at end of file +ticket.title.notblank=工单标题不能为空! +# +ssh.config.id.notnull=SSH channel ID can not be null. \ No newline at end of file diff --git a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_zh_CN.properties b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_zh_CN.properties index 745705171..48bc120a8 100644 --- a/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_zh_CN.properties +++ b/backend/clouddm-platform/cgdm-console/src/main/resources/i18n/validation_zh_CN.properties @@ -26,4 +26,6 @@ checkrules.content.notblank=规则内容不能为空! # ticket.sql.notnull=执行 SQL 不能为空! ticket.dbLevels.notblank=目标数据源信息不能为空! -ticket.title.notblank=工单标题不能为空! \ No newline at end of file +ticket.title.notblank=工单标题不能为空! +# +ssh.config.id.notnull=SSH 通道 ID 不能为空! \ No newline at end of file diff --git a/backend/clouddm-platform/cgdm-dao/build.gradle b/backend/clouddm-platform/cgdm-dao/build.gradle index 44616ee9d..f3f0116aa 100644 --- a/backend/clouddm-platform/cgdm-dao/build.gradle +++ b/backend/clouddm-platform/cgdm-dao/build.gradle @@ -32,6 +32,9 @@ dependencies { api "com.baomidou:mybatis-plus-spring-boot4-starter:${MYBATISPLUS_VERSION}" api "com.baomidou:mybatis-plus-jsqlparser:${MYBATISPLUS_VERSION}" api "com.zaxxer:HikariCP:${HIKARICP_VERSION}" + + testImplementation "com.fasterxml.jackson.core:jackson-databind:${JACKSON_VERSION}" + testImplementation "com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.4" } description = 'cgdm-dao' diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/SystemDal.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/SystemDal.java index c08978775..90e90229e 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/SystemDal.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/SystemDal.java @@ -18,6 +18,8 @@ public interface SystemDal { DmSysWorkerMapper workerMapper(); + DmSshConfigMapper sshConfigMapper(); + // ---------- dal service methods ---------- String fetchSystemConf(String configName); diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/impl/SystemDalImpl.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/impl/SystemDalImpl.java index 6140672da..d9b0ef733 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/impl/SystemDalImpl.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/access/impl/SystemDalImpl.java @@ -35,6 +35,8 @@ public class SystemDalImpl implements SystemDal { @Resource private DmSysWorkerMapper workerMapper; @Resource + private DmSshConfigMapper sshConfigMapper; + @Resource private AuthDal authDal; @Override @@ -72,6 +74,11 @@ public DmSysWorkerMapper workerMapper() { return workerMapper; } + @Override + public DmSshConfigMapper sshConfigMapper() { + return sshConfigMapper; + } + // ---------- dal service methods ---------- private DmSysUserConfDO querySpecifiedConfig(String uid, String configName) { diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/EncryptedJsonTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/EncryptedJsonTypeHandler.java new file mode 100644 index 000000000..44f71830d --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/EncryptedJsonTypeHandler.java @@ -0,0 +1,115 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler; + +import java.lang.reflect.Field; +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Collection; +import java.util.IdentityHashMap; +import java.util.Map; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import com.clougence.clouddm.api.common.crypt.CryptService; +import com.clougence.clouddm.base.metadata.ds.SecretField; +import com.clougence.utils.JsonUtils; +import com.clougence.utils.StringUtils; +import com.fasterxml.jackson.databind.JavaType; + +public class EncryptedJsonTypeHandler extends BaseTypeHandler { + + private final Class type; + private final JavaType javaType; + + public EncryptedJsonTypeHandler(Class type){ + this.type = type; + this.javaType = JsonUtils.defaultObjectMapper().getTypeFactory().constructType(type); + } + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, T parameter, JdbcType jdbcType) throws SQLException { + T storage = JsonUtils.toObj(JsonUtils.toJson(parameter), this.javaType); + process(storage, true, new IdentityHashMap<>()); + ps.setString(i, JsonUtils.toJson(storage)); + } + + @Override + public T getNullableResult(ResultSet rs, String columnName) throws SQLException { + return read(rs.getString(columnName)); + } + + @Override + public T getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return read(rs.getString(columnIndex)); + } + + @Override + public T getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return read(cs.getString(columnIndex)); + } + + private T read(String value) { + T result = JsonUtils.toObj(value, this.javaType); + process(result, false, new IdentityHashMap<>()); + return result; + } + + private void process(Object value, boolean encrypt, IdentityHashMap visited) { + if (value == null || isSimpleValue(value.getClass()) || visited.containsKey(value)) { + return; + } + visited.put(value, Boolean.TRUE); + + if (value instanceof Collection collection) { + collection.forEach(item -> process(item, encrypt, visited)); + return; + } + if (value instanceof Map map) { + map.values().forEach(item -> process(item, encrypt, visited)); + return; + } + for (Field field : value.getClass().getDeclaredFields()) { + processField(value, field, encrypt, visited); + } + } + + private void processField(Object owner, Field field, boolean encrypt, IdentityHashMap visited) { + try { + field.setAccessible(true); + Object value = field.get(owner); + if (field.isAnnotationPresent(SecretField.class) && value instanceof String text && StringUtils.isNotBlank(text)) { + field.set(owner, encrypt ? CryptService.INSTANCE.encryptUseDefaultKeyAndSalt(text) : CryptService.INSTANCE.decryptUseDefaultKeyAndSalt(text)); + return; + } + process(value, encrypt, visited); + } catch (IllegalAccessException e) { + throw new IllegalStateException("Failed to process encrypted json field: " + this.type.getName() + "." + field.getName(), e); + } + } + + private boolean isSimpleValue(Class clazz) { + return clazz.isPrimitive() || // + clazz.isEnum() || // + CharSequence.class.isAssignableFrom(clazz) ||// + Number.class.isAssignableFrom(clazz) || // + Boolean.class == clazz || // + Character.class == clazz; + } +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/SshProxyFeaturesTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/SshProxyFeaturesTypeHandler.java new file mode 100644 index 000000000..53bfcbd39 --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/SshProxyFeaturesTypeHandler.java @@ -0,0 +1,26 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler.encrypt; + +import com.clougence.clouddm.base.metadata.ds.SshProxyFeatures; +import com.clougence.clouddm.platform.dal.handler.EncryptedJsonTypeHandler; + +public class SshProxyFeaturesTypeHandler extends EncryptedJsonTypeHandler { + + public SshProxyFeaturesTypeHandler(){ + super(SshProxyFeatures.class); + } +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/StrSecretTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/StrSecretTypeHandler.java new file mode 100644 index 000000000..6a37bf4fd --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/encrypt/StrSecretTypeHandler.java @@ -0,0 +1,54 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler.encrypt; + +import java.sql.CallableStatement; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import org.apache.ibatis.type.BaseTypeHandler; +import org.apache.ibatis.type.JdbcType; + +import com.clougence.clouddm.api.common.crypt.CryptService; +import com.clougence.utils.StringUtils; + +public class StrSecretTypeHandler extends BaseTypeHandler { + + @Override + public void setNonNullParameter(PreparedStatement ps, int i, String parameter, JdbcType jdbcType) throws SQLException { + ps.setString(i, CryptService.INSTANCE.encryptUseDefaultKeyAndSalt(parameter)); + } + + @Override + public String getNullableResult(ResultSet rs, String columnName) throws SQLException { + return decrypt(rs.getString(columnName)); + } + + @Override + public String getNullableResult(ResultSet rs, int columnIndex) throws SQLException { + return decrypt(rs.getString(columnIndex)); + } + + @Override + public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { + return decrypt(cs.getString(columnIndex)); + } + + private String decrypt(String value) { + return StringUtils.isBlank(value) ? null : CryptService.INSTANCE.decryptUseDefaultKeyAndSalt(value); + } +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/AccountBindTypeTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/AccountBindTypeTypeHandler.java similarity index 87% rename from backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/AccountBindTypeTypeHandler.java rename to backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/AccountBindTypeTypeHandler.java index aab5e6fe7..aea0e1c12 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/AccountBindTypeTypeHandler.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/AccountBindTypeTypeHandler.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.clougence.clouddm.platform.dal.handler; +package com.clougence.clouddm.platform.dal.handler.enums; +import com.clougence.clouddm.platform.dal.handler.EnumTypeHandler; import com.clougence.clouddm.platform.dal.model.auth.AccountBindType; public class AccountBindTypeTypeHandler extends EnumTypeHandler { diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/RdpApprovalTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/RdpApprovalTypeHandler.java similarity index 87% rename from backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/RdpApprovalTypeHandler.java rename to backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/RdpApprovalTypeHandler.java index 1e121cdcd..e237a9aa3 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/RdpApprovalTypeHandler.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/RdpApprovalTypeHandler.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.clougence.clouddm.platform.dal.handler; +package com.clougence.clouddm.platform.dal.handler.enums; +import com.clougence.clouddm.platform.dal.handler.EnumTypeHandler; import com.clougence.clouddm.platform.dal.model.approval.ApprovalType; public class RdpApprovalTypeHandler extends EnumTypeHandler { diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/SecRangeTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SecRangeTypeHandler.java similarity index 87% rename from backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/SecRangeTypeHandler.java rename to backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SecRangeTypeHandler.java index dbe043a87..6e932f196 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/SecRangeTypeHandler.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SecRangeTypeHandler.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.clougence.clouddm.platform.dal.handler; +package com.clougence.clouddm.platform.dal.handler.enums; +import com.clougence.clouddm.platform.dal.handler.EnumTypeHandler; import com.clougence.clouddm.platform.dal.model.secrule.SecRangeType; public class SecRangeTypeHandler extends EnumTypeHandler { diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshAuthTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshAuthTypeHandler.java new file mode 100644 index 000000000..842db7150 --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshAuthTypeHandler.java @@ -0,0 +1,26 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler.enums; + +import com.clougence.clouddm.platform.dal.handler.EnumTypeHandler; +import com.clougence.clouddm.base.metadata.ds.SshAuthType; + +public class SshAuthTypeHandler extends EnumTypeHandler { + + public SshAuthTypeHandler(){ + super(SshAuthType.class); + } +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshProxyTypeHandler.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshProxyTypeHandler.java new file mode 100644 index 000000000..e643a9b2b --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/handler/enums/SshProxyTypeHandler.java @@ -0,0 +1,26 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler.enums; + +import com.clougence.clouddm.platform.dal.handler.EnumTypeHandler; +import com.clougence.clouddm.base.metadata.ds.SshProxyType; + +public class SshProxyTypeHandler extends EnumTypeHandler { + + public SshProxyTypeHandler(){ + super(SshProxyType.class); + } +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/mapper/system/DmSshConfigMapper.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/mapper/system/DmSshConfigMapper.java new file mode 100644 index 000000000..9101368dd --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/mapper/system/DmSshConfigMapper.java @@ -0,0 +1,32 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.mapper.system; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.clougence.clouddm.platform.dal.model.datasource.DmSshConfigDO; + +public interface DmSshConfigMapper extends BaseMapper { + + List queryList(@Param("search") String search); + + DmSshConfigDO queryById(@Param("id") Long id); + + int deleteById(@Param("id") Long id); +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalDO.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalDO.java index 6379c2739..4d2376be9 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalDO.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalDO.java @@ -23,7 +23,7 @@ import com.clougence.clouddm.platform.dal.model.approval.ApprovalBiz; import com.clougence.clouddm.platform.dal.model.approval.ApprovalType; import com.clougence.clouddm.platform.dal.model.approval.ApprovalStatus; -import com.clougence.clouddm.platform.dal.handler.RdpApprovalTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.RdpApprovalTypeHandler; import com.clougence.utils.CollectionUtils; import lombok.Data; diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalTemplateDO.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalTemplateDO.java index 2935c9372..503b09efe 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalTemplateDO.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/approval/DmApprovalTemplateDO.java @@ -19,7 +19,7 @@ import com.baomidou.mybatisplus.annotation.*; import com.clougence.clouddm.platform.dal.model.approval.ApprovalType; -import com.clougence.clouddm.platform.dal.handler.RdpApprovalTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.RdpApprovalTypeHandler; import lombok.Getter; import lombok.Setter; diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/auth/DmAuthUserDO.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/auth/DmAuthUserDO.java index 0b9530272..e6e3525a4 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/auth/DmAuthUserDO.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/auth/DmAuthUserDO.java @@ -19,7 +19,7 @@ import java.util.Objects; import com.baomidou.mybatisplus.annotation.*; -import com.clougence.clouddm.platform.dal.handler.AccountBindTypeTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.AccountBindTypeTypeHandler; import lombok.Getter; import lombok.Setter; diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/datasource/DmSshConfigDO.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/datasource/DmSshConfigDO.java new file mode 100644 index 000000000..308510880 --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/datasource/DmSshConfigDO.java @@ -0,0 +1,63 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.model.datasource; + +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.*; +import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; +import com.clougence.clouddm.base.metadata.ds.SshAuthType; +import com.clougence.clouddm.base.metadata.ds.SshConFeatures; +import com.clougence.clouddm.base.metadata.ds.SshProxyFeatures; +import com.clougence.clouddm.base.metadata.ds.SshProxyType; +import com.clougence.clouddm.platform.dal.handler.encrypt.SshProxyFeaturesTypeHandler; +import com.clougence.clouddm.platform.dal.handler.encrypt.StrSecretTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.SshAuthTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.SshProxyTypeHandler; + +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +@TableName(value = "dm_ssh_config", autoResultMap = true) +public class DmSshConfigDO { + + @TableId(type = IdType.AUTO) + private Long id; + @TableField(insertStrategy = FieldStrategy.NOT_NULL, updateStrategy = FieldStrategy.NOT_NULL) + private Date gmtCreate; + @TableField(insertStrategy = FieldStrategy.NOT_NULL, updateStrategy = FieldStrategy.NOT_NULL) + private Date gmtModified; + private String name; + private String host; + private Integer port; + private String username; + @TableField(typeHandler = SshAuthTypeHandler.class) + private SshAuthType authType; + @TableField(updateStrategy = FieldStrategy.ALWAYS, typeHandler = StrSecretTypeHandler.class) + private String password; + @TableField(updateStrategy = FieldStrategy.ALWAYS, typeHandler = StrSecretTypeHandler.class) + private String privateKeyData; + @TableField(updateStrategy = FieldStrategy.ALWAYS, typeHandler = StrSecretTypeHandler.class) + private String privateKeyPassphrase; + @TableField(updateStrategy = FieldStrategy.ALWAYS, typeHandler = JacksonTypeHandler.class) + private SshConFeatures conFeatures; + @TableField(typeHandler = SshProxyTypeHandler.class) + private SshProxyType proxyType; + @TableField(updateStrategy = FieldStrategy.ALWAYS, typeHandler = SshProxyFeaturesTypeHandler.class) + private SshProxyFeatures proxyFeatures; +} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/secrule/DmSecRangeDO.java b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/secrule/DmSecRangeDO.java index ebcd404da..b30b1d1a0 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/secrule/DmSecRangeDO.java +++ b/backend/clouddm-platform/cgdm-dao/src/main/java/com/clougence/clouddm/platform/dal/model/secrule/DmSecRangeDO.java @@ -23,7 +23,7 @@ import com.clougence.clouddm.base.metadata.ds.DataSourceType; import com.clougence.clouddm.platform.dal.model.secrule.SecMatchMode; import com.clougence.clouddm.platform.dal.model.secrule.SecRangeType; -import com.clougence.clouddm.platform.dal.handler.SecRangeTypeHandler; +import com.clougence.clouddm.platform.dal.handler.enums.SecRangeTypeHandler; import com.clougence.clouddm.sdk.model.analysis.TargetType; import lombok.Getter; diff --git a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalMapper.xml b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalMapper.xml index d66bd4fd6..c92d38209 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalMapper.xml +++ b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalMapper.xml @@ -11,7 +11,7 @@ - + diff --git a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalTemplateMapper.xml b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalTemplateMapper.xml index e0485f8c9..2d25d48f8 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalTemplateMapper.xml +++ b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmApprovalTemplateMapper.xml @@ -7,7 +7,7 @@ - + @@ -71,14 +71,14 @@ dm_approval_template WHERE primary_uid = #{primaryUid} - and approval_type = #{type, typeHandler=com.clougence.clouddm.platform.dal.handler.RdpApprovalTypeHandler} + and approval_type = #{type, typeHandler=com.clougence.clouddm.platform.dal.handler.enums.RdpApprovalTypeHandler} DELETE FROM dm_approval_template WHERE primary_uid = #{primaryUid} - AND approval_type = #{approvalType, typeHandler=com.clougence.clouddm.platform.dal.handler.RdpApprovalTypeHandler} + AND approval_type = #{approvalType, typeHandler=com.clougence.clouddm.platform.dal.handler.enums.RdpApprovalTypeHandler} @@ -88,7 +88,7 @@ ( #{item.primaryUid}, - #{item.approvalType, typeHandler=com.clougence.clouddm.platform.dal.handler.RdpApprovalTypeHandler}, + #{item.approvalType, typeHandler=com.clougence.clouddm.platform.dal.handler.enums.RdpApprovalTypeHandler}, #{item.templateName}, #{item.templateIdentity}, #{item.approUrl} diff --git a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmAuthUserMapper.xml b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmAuthUserMapper.xml index d344db354..462829d4f 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmAuthUserMapper.xml +++ b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmAuthUserMapper.xml @@ -24,7 +24,7 @@ - + diff --git a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSecRangeMapper.xml b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSecRangeMapper.xml index c2ff39606..2b004e08b 100644 --- a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSecRangeMapper.xml +++ b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSecRangeMapper.xml @@ -9,7 +9,7 @@ - + diff --git a/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSshConfigMapper.xml b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSshConfigMapper.xml new file mode 100644 index 000000000..f3ee3103e --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/main/resources/mybatis/mapper/DmSshConfigMapper.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + + + + + id, + gmt_create, + gmt_modified, + name, + host, + port, + username, + auth_type, + password, + private_key_data, + private_key_passphrase, + con_features, + proxy_type, + proxy_features + + + + + + + + DELETE FROM dm_ssh_config + WHERE id = #{id} + LIMIT 1 + + diff --git a/backend/clouddm-platform/cgdm-dao/src/test/java/com/clougence/clouddm/platform/dal/handler/SecretTypeHandlerTest.java b/backend/clouddm-platform/cgdm-dao/src/test/java/com/clougence/clouddm/platform/dal/handler/SecretTypeHandlerTest.java new file mode 100644 index 000000000..306615d1f --- /dev/null +++ b/backend/clouddm-platform/cgdm-dao/src/test/java/com/clougence/clouddm/platform/dal/handler/SecretTypeHandlerTest.java @@ -0,0 +1,77 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.platform.dal.handler; + +import static org.junit.Assert.*; + +import java.lang.reflect.Proxy; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.concurrent.atomic.AtomicReference; + +import org.junit.Test; + +import com.clougence.clouddm.base.metadata.ds.SshProxyFeatures; +import com.clougence.clouddm.platform.dal.handler.encrypt.SshProxyFeaturesTypeHandler; +import com.clougence.clouddm.platform.dal.handler.encrypt.StrSecretTypeHandler; + +public class SecretTypeHandlerTest { + + @Test + public void shouldEncryptAndDecryptStringSecret() throws Exception { + AtomicReference storage = new AtomicReference<>(); + PreparedStatement ps = preparedStatement(storage); + + new StrSecretTypeHandler().setNonNullParameter(ps, 1, "plain-password", null); + + assertNotEquals("plain-password", storage.get()); + assertEquals("plain-password", new StrSecretTypeHandler().getNullableResult(resultSet(storage.get()), "password")); + } + + @Test + public void shouldEncryptAndDecryptSecretFieldInJson() throws Exception { + AtomicReference storage = new AtomicReference<>(); + PreparedStatement ps = preparedStatement(storage); + SshProxyFeatures features = new SshProxyFeatures(); + features.setHost("proxy.example.com"); + features.setPassword("proxy-password"); + + SshProxyFeaturesTypeHandler handler = new SshProxyFeaturesTypeHandler(); + handler.setNonNullParameter(ps, 1, features, null); + + assertFalse(storage.get().contains("proxy-password")); + assertEquals("proxy-password", handler.getNullableResult(resultSet(storage.get()), "proxy_features").getPassword()); + } + + private PreparedStatement preparedStatement(AtomicReference storage) { + return (PreparedStatement) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] { PreparedStatement.class }, (proxy, method, args) -> { + if ("setString".equals(method.getName())) { + storage.set((String) args[1]); + return null; + } + return null; + }); + } + + private ResultSet resultSet(String value) { + return (ResultSet) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] { ResultSet.class }, (proxy, method, args) -> { + if ("getString".equals(method.getName())) { + return value; + } + return null; + }); + } +} diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecAuthI18nKeys.java b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecAuthI18nKeys.java index e8ade0f76..aee237205 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecAuthI18nKeys.java +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecAuthI18nKeys.java @@ -59,6 +59,8 @@ public interface SecAuthI18nKeys { String AUTH_KEY_DM_DATA_MANAGE = "AUTH_KEY_DM_DATA_MANAGE"; String AUTH_KEY_DM_DS_READ = "AUTH_KEY_DM_DS_READ"; String AUTH_KEY_DM_DS_MANAGE = "AUTH_KEY_DM_DS_MANAGE"; + String AUTH_KEY_DM_SSH_CHANNEL_READ = "AUTH_KEY_DM_SSH_CHANNEL_READ"; + String AUTH_KEY_DM_SSH_CHANNEL_WRITE = "AUTH_KEY_DM_SSH_CHANNEL_WRITE"; String AUTH_KEY_DM_WORKER_READ = "AUTH_KEY_DM_WORKER_READ"; String AUTH_KEY_DM_WORKER_MANAGE = "AUTH_KEY_DM_WORKER_MANAGE"; String AUTH_KEY_DM_SECRULES_READ = "AUTH_KEY_DM_SECRULES_READ"; diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecRoleAuthLabel.java b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecRoleAuthLabel.java index d7998a7a7..503898cad 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecRoleAuthLabel.java +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/security/auth/def/SecRoleAuthLabel.java @@ -158,6 +158,10 @@ public interface SecRoleAuthLabel { String DM_DS_READ = "DM_DS_READ"; @AuthLabel(order = 2, category = SecAuthCategory.CAT_DM_DS, i18nKey = SecAuthI18nKeys.AUTH_KEY_DM_DS_MANAGE, tag = SecSysRole.DBA_ROLE_NAME, include = DM_DS_READ) String DM_DS_MANAGE = "DM_DS_MANAGE"; + @AuthLabel(order = 3, category = SecAuthCategory.CAT_DM_DS, i18nKey = SecAuthI18nKeys.AUTH_KEY_DM_SSH_CHANNEL_READ, tag = SecSysRole.DBA_ROLE_NAME) + String DM_SSH_CHANNEL_READ = "DM_SSH_CHANNEL_READ"; + @AuthLabel(order = 4, category = SecAuthCategory.CAT_DM_DS, i18nKey = SecAuthI18nKeys.AUTH_KEY_DM_SSH_CHANNEL_WRITE, tag = SecSysRole.DBA_ROLE_NAME, include = DM_SSH_CHANNEL_READ) + String DM_SSH_CHANNEL_WRITE = "DM_SSH_CHANNEL_WRITE"; //@AuthLabel(order = 1, category = SecAuthCategory.CAT_DM_DATA, i18nKey = SecAuthI18nKeys.AUTH_KEY_DM_DATA_READ, tag = SecSysRole.DBA_ROLE_NAME) //String DM_DATA_READ = "DM_DATA_READ"; diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConfigService.java b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConfigService.java index fa7071cd6..a7b9df1ee 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConfigService.java +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConfigService.java @@ -27,9 +27,9 @@ public interface ConfigService extends Service { - List fetchSettings(String ownerUid, List names); + List fetchSettings(List names); - DataSourceConfig fetchDsConfig(long dsId, DataSourceType dsType); + DataSourceConfig fetchDsConfig(long dsId); ToolConfig fetchToolConfig(String toolName); diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConsoleConfigService.java b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConsoleConfigService.java index 9914ec3bd..66325f65f 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConsoleConfigService.java +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/java/com/clougence/clouddm/sdk/service/config/ConsoleConfigService.java @@ -22,11 +22,11 @@ public interface ConsoleConfigService extends Service { - List fetchSettings(String ownerUid, List names); + List fetchSettings(List names); - Map fetchSettingsMap(String ownerUid, List names); + Map fetchSettingsMap(List names); UserData findUserByUID(String userUid); - List findRoleByName(String ownerUid, String roleName); + List findRoleByName(String roleName); } diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label.properties b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label.properties index 4de9ca048..1682ba981 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label.properties +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label.properties @@ -22,6 +22,8 @@ AUTH_KEY_DM_DATA_READ=Data Protection Read AUTH_KEY_DM_DATA_MANAGE=Data Protection Manage(Include: Read) AUTH_KEY_DM_DS_READ=Query Settings Read AUTH_KEY_DM_DS_MANAGE=Query Settings Manage(Include: Read) +AUTH_KEY_DM_SSH_CHANNEL_READ=SSH Channel Read +AUTH_KEY_DM_SSH_CHANNEL_WRITE=SSH Channel Manage(Include: Read) AUTH_KEY_DM_WORKER_READ=Worker Read AUTH_KEY_DM_WORKER_MANAGE=Worker Manage(Include: Read) AUTH_KEY_DM_SECRULES_READ=Security Rules/Spec Read @@ -51,4 +53,4 @@ AUTH_DATA_DM_TICKET=Process Ticket(Include: Approve and Execute) AUTH_DATA_DM_REDIS_READ=Read commands (Read) AUTH_DATA_DM_REDIS_WRITE=Write commands (Include: Read) AUTH_DATA_DM_REDIS_ADMIN=Admin commands (Include: Read,Write) -AUTH_DATA_DM_REDIS_OTHER=Other commands \ No newline at end of file +AUTH_DATA_DM_REDIS_OTHER=Other commands diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_en_US.properties b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_en_US.properties index 4de9ca048..1682ba981 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_en_US.properties +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_en_US.properties @@ -22,6 +22,8 @@ AUTH_KEY_DM_DATA_READ=Data Protection Read AUTH_KEY_DM_DATA_MANAGE=Data Protection Manage(Include: Read) AUTH_KEY_DM_DS_READ=Query Settings Read AUTH_KEY_DM_DS_MANAGE=Query Settings Manage(Include: Read) +AUTH_KEY_DM_SSH_CHANNEL_READ=SSH Channel Read +AUTH_KEY_DM_SSH_CHANNEL_WRITE=SSH Channel Manage(Include: Read) AUTH_KEY_DM_WORKER_READ=Worker Read AUTH_KEY_DM_WORKER_MANAGE=Worker Manage(Include: Read) AUTH_KEY_DM_SECRULES_READ=Security Rules/Spec Read @@ -51,4 +53,4 @@ AUTH_DATA_DM_TICKET=Process Ticket(Include: Approve and Execute) AUTH_DATA_DM_REDIS_READ=Read commands (Read) AUTH_DATA_DM_REDIS_WRITE=Write commands (Include: Read) AUTH_DATA_DM_REDIS_ADMIN=Admin commands (Include: Read,Write) -AUTH_DATA_DM_REDIS_OTHER=Other commands \ No newline at end of file +AUTH_DATA_DM_REDIS_OTHER=Other commands diff --git a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_zh_CN.properties b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_zh_CN.properties index 7369fd9d2..8a5a02303 100644 --- a/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_zh_CN.properties +++ b/backend/clouddm-platform/cgdm-plugin-sdk/src/main/resources/META-INF/rdp/sdk/i18n/dm-auth-label_zh_CN.properties @@ -22,6 +22,8 @@ AUTH_KEY_DM_DATA_READ=数据保护配置查看 AUTH_KEY_DM_DATA_MANAGE=数据保护配置管理(包含:查看权限) AUTH_KEY_DM_DS_READ=查询配置查看 AUTH_KEY_DM_DS_MANAGE=查询配置管理(包含:查看权限) +AUTH_KEY_DM_SSH_CHANNEL_READ=SSH 通道查看 +AUTH_KEY_DM_SSH_CHANNEL_WRITE=SSH 通道管理(包含:查看权限) AUTH_KEY_DM_WORKER_READ=查询机器查看 AUTH_KEY_DM_WORKER_MANAGE=查询机器管理(包含:查看权限) AUTH_KEY_DM_SECRULES_READ=安全规则/规范查看 @@ -51,4 +53,4 @@ AUTH_DATA_DM_TICKET=处理工单权限(包含:审批和执行 权限) AUTH_DATA_DM_REDIS_READ=读取命令 Read 权限 AUTH_DATA_DM_REDIS_WRITE=写入命令 Write 权限(包含:Read 权限) AUTH_DATA_DM_REDIS_ADMIN=管理命令 Admin 权限(包含:Read、Write 权限) -AUTH_DATA_DM_REDIS_OTHER=其它类型命令 \ No newline at end of file +AUTH_DATA_DM_REDIS_OTHER=其它类型命令 diff --git a/backend/clouddm-platform/cgdm-sidecar/build.gradle b/backend/clouddm-platform/cgdm-sidecar/build.gradle index a916b3d3a..50754816a 100644 --- a/backend/clouddm-platform/cgdm-sidecar/build.gradle +++ b/backend/clouddm-platform/cgdm-sidecar/build.gradle @@ -25,6 +25,7 @@ dependencies { implementation project(':cg-com-results-file') implementation project(':cgdm-share-libs') implementation('com.github.oshi:oshi-core:6.6.2') { exclude group: 'org.slf4j', module: 'slf4j-api' } + implementation 'com.github.mwiede:jsch:0.2.20' implementation 'com.opencsv:opencsv:5.4' implementation 'org.codehaus.plexus:plexus-classworlds:2.6.0' diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/autoexec/AutoExecJob.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/autoexec/AutoExecJob.java index b763546bb..10843ff32 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/autoexec/AutoExecJob.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/autoexec/AutoExecJob.java @@ -22,8 +22,6 @@ import java.util.List; import java.util.concurrent.atomic.AtomicInteger; -import jakarta.annotation.Resource; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Scope; @@ -46,6 +44,8 @@ import com.clougence.clouddm.worker.component.session.SessionManager; import com.clougence.utils.ThreadUtils; +import jakarta.annotation.Resource; + @Service @Scope("prototype") public class AutoExecJob implements Runnable { @@ -100,9 +100,9 @@ public void run() { return; } - DataSourceConfig dataSourceConfig = configRService.fetchDsConfig(job.getDsId(), job.getDsType()); + DataSourceConfig dataSourceConfig = configRService.fetchDsConfig(job.getDsId()); try { - this.sessionAgent = (SessionAgent) sessionManager.createSession(backgroundRM, dataSourceConfig, job.getContextDTO()); + this.sessionAgent = sessionManager.createSession(backgroundRM, dataSourceConfig, job.getContextDTO()); String currentQueryId = this.sessionAgent.getCurrentQueryId(); sendMessage(AutoExecMessageDTO.createQueryIdMessage(job.getJobId(), currentQueryId), true); log.info("create session success,query id: " + currentQueryId); diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/ds/AbstractDsResourceManager.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/ds/AbstractDsResourceManager.java index c17e7822a..032634cad 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/ds/AbstractDsResourceManager.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/ds/AbstractDsResourceManager.java @@ -31,10 +31,9 @@ import com.clougence.clouddm.platform.plugin.PluginManager; import com.clougence.clouddm.platform.plugin.info.LeasedDsFactory; import com.clougence.clouddm.sdk.execute.resource.DsResourceManager; -import com.clougence.clouddm.worker.component.resource.file.FileResourceManagerImpl; +import com.clougence.clouddm.worker.component.resource.file.FileResourceManager; import com.clougence.drivers.DriverLoader; import com.clougence.drivers.DsConfigKeys; -import com.clougence.drivers.DsFactory; import com.clougence.drivers.DsObject; import lombok.extern.slf4j.Slf4j; @@ -43,7 +42,7 @@ public abstract class AbstractDsResourceManager implements DsResourceManager { @Resource - private FileResourceManagerImpl resourceManager; + private FileResourceManager resourceManager; private final Map resourceCounter = new ConcurrentHashMap<>(); private final Map resourceLimited = new ConcurrentHashMap<>(); diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/EncryptedFileCacheManager.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/EncryptedFileCacheManager.java new file mode 100644 index 000000000..3e3fdac75 --- /dev/null +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/EncryptedFileCacheManager.java @@ -0,0 +1,100 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.worker.component.resource.file; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.Base64; + +import org.springframework.stereotype.Service; + +import com.clougence.clouddm.api.common.GlobalConfUtils; +import com.clougence.clouddm.api.common.crypt.CryptService; +import com.clougence.clouddm.api.common.crypt.PasswordInfo; +import com.clougence.utils.HexadecimalUtils; +import com.clougence.utils.JsonUtils; +import com.clougence.utils.RandomUtils; +import com.clougence.utils.StringUtils; + +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class EncryptedFileCacheManager { + + private static final String ROOT_DIR = "encrypted-cache"; + private final String cacheKey = HexadecimalUtils.bytes2bit(RandomUtils.nextBytes(32)); + private final String cacheSalt = HexadecimalUtils.bytes2bit(RandomUtils.nextBytes(32)); + + public T read(String namespace, String key, Class valueType) { + Path path = cachePath(namespace, key); + if (!Files.isRegularFile(path)) { + return null; + } + + try { + PasswordInfo passwordInfo = new PasswordInfo(); + passwordInfo.setKey(this.cacheKey); + passwordInfo.setSalt(this.cacheSalt); + passwordInfo.setEncryptPassword(Files.readString(path, StandardCharsets.UTF_8)); + CryptService.INSTANCE.decrypt(passwordInfo); + return JsonUtils.toObj(passwordInfo.getPlainPassword(), valueType); + } catch (Exception e) { + log.warn("read encrypted file cache failed, namespace={}, key={}, delete and refetch. message={}", namespace, key, e.getMessage()); + delete(path); + return null; + } + } + + public void write(String namespace, String key, Object value) { + try { + Files.createDirectories(cacheDir(namespace)); + PasswordInfo passwordInfo = new PasswordInfo(); + passwordInfo.setKey(this.cacheKey); + passwordInfo.setSalt(this.cacheSalt); + passwordInfo.setPlainPassword(JsonUtils.toJson(value)); + CryptService.INSTANCE.encrypt(passwordInfo); + Files.writeString(cachePath(namespace, key), passwordInfo.getEncryptPassword(), StandardCharsets.UTF_8); + } catch (Exception e) { + log.warn("write encrypted file cache failed, namespace={}, key={}, message={}", namespace, key, e.getMessage()); + } + } + + private void delete(Path path) { + try { + Files.deleteIfExists(path); + } catch (IOException ignored) { + } + } + + private Path cachePath(String namespace, String key) { + return cacheDir(namespace).resolve(safeName(key) + ".cache"); + } + + private Path cacheDir(String namespace) { + return Paths.get(GlobalConfUtils.getTempDataHome(), ROOT_DIR, safeName(namespace)); + } + + private String safeName(String value) { + if (StringUtils.isBlank(value)) { + return "_"; + } + return Base64.getUrlEncoder().withoutPadding().encodeToString(value.getBytes(StandardCharsets.UTF_8)); + } +} diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManagerImpl.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManager.java similarity index 98% rename from backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManagerImpl.java rename to backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManager.java index 3a01599a7..3d6cb7ca0 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManagerImpl.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/resource/file/FileResourceManager.java @@ -39,7 +39,7 @@ @Service @Slf4j -public class FileResourceManagerImpl { +public class FileResourceManager { @Resource private ConfigRService statusRService; diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/SessionManagerImpl.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/SessionManagerImpl.java index 2845ae183..1b29e8f68 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/SessionManagerImpl.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/SessionManagerImpl.java @@ -40,9 +40,12 @@ import com.clougence.clouddm.sdk.execute.session.result.ValueProcessService; import com.clougence.clouddm.sdk.service.file.FileService; import com.clougence.clouddm.worker.component.notify.SidecarSqlNotifyService; +import com.clougence.clouddm.worker.component.session.ssh.SshTunnelHandle; +import com.clougence.clouddm.worker.component.session.ssh.SshTunnelManager; import com.clougence.clouddm.worker.global.config.DmSidecarConfig; import com.clougence.utils.ExceptionUtils; import com.clougence.utils.StringUtils; +import com.clougence.utils.io.IOUtils; import jakarta.annotation.Resource; import lombok.SneakyThrows; @@ -58,7 +61,9 @@ public class SessionManagerImpl implements SessionManager, UnifiedPostConstruct @Resource private DmSidecarConfig dmConfig; @Resource - private SidecarSqlNotifyService sidecarSqlNotifyService; + private SidecarSqlNotifyService notifyService; + @Resource + private SshTunnelManager sshTunnelManager; @Resource private FileService fileService = null; private Thread sessionManagerThread; @@ -139,27 +144,42 @@ public SessionAgent createSession(DsResourceManager rm, DataSourceConfig dsConfi throw new RuntimeException(newSessionId + " newSessionId is exist."); } + SshTunnelHandle tunnel = null; + boolean sshEnabled = false; try { int configMaxSessionCount = this.dmConfig.getMaxSessionCount(); if (counter.incrementAndGet() > configMaxSessionCount) { throw new IllegalStateException("exceed session max pool size: " + configMaxSessionCount); } - DsPluginInfo pluginInfo = PluginManager.findDsPlugin(dsConfig.getDataSourceType()); if (pluginInfo == null) { throw new UnsupportedOperationException("no plugin found for dsType '" + dsConfig.getDataSourceType() + "'."); } + // driver DriverRef driverRef = DriverUtils.parseDriverRef(dsConfig.getDriverVersion()); + + // tunnel + sshEnabled = this.sshTunnelManager.isEnabled(dsConfig); + if (sshEnabled) { + tunnel = this.sshTunnelManager.open(dsConfig); + dsConfig = tunnel.getDsConfig(); + } + + // session SessionFactory factory = pluginInfo.createSessionFactory(driverRef.getDriverFamily(), driverRef.getDriverVersion()); Session session = factory.createSession(rm, dsConfig, contextDTO); + log.info("finish create datasource session, sessionId={}, dsType={}, runtimeHost={}, sshEnabled={}, sshConfigId={}",// + newSessionId, dsConfig.getDataSourceType(), dsConfig.getHost(), sshEnabled, dsConfig.getSshConfigId()); + SshTunnelHandle sessionTunnel = tunnel; + session.addCloseListener(sessionId -> IOUtils.closeQuietly(sessionTunnel)); session.addCloseListener(this::closeSessionById); SessionSupport ss = new SessionSupport(); ss.setSessionId(newSessionId); ss.setLocalWsn(this.localWsn); ss.setFileService(this.fileService); - ss.setNotifyService(this.sidecarSqlNotifyService); + ss.setNotifyService(this.notifyService); ss.setResultProcessSpi(this.findValueProcessSpi()); SessionAgent agent = new SessionAgent(session, ss, rm, maxIdleTimeSec); @@ -167,10 +187,13 @@ public SessionAgent createSession(DsResourceManager rm, DataSourceConfig dsConfi return agent; } catch (Throwable e) { counter.decrementAndGet(); + IOUtils.closeQuietly(tunnel); + log.warn("failed create datasource session, sessionId={}, dsType={}, driverVersion={}, host={}, sshEnabled={}, sshConfigId={}",// + newSessionId, dsConfig.getDataSourceType(), dsConfig.getDriverVersion(), dsConfig.getHost(), sshEnabled, dsConfig.getSshConfigId(), e); + if (isPluginPackageCorrupted(e)) { String message = "Datasource plugin is damaged, failed to load plugin resource. dsType='" + dsConfig.getDataSourceType() + "', driverVersion='" + dsConfig.getDriverVersion() + "'."; - log.error(message, e); throw new ErrorMessageException(DmErrorCode.PLUGIN_DAMAGED_ERROR.code(), message); } throw e; diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshConnectionManager.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshConnectionManager.java new file mode 100644 index 000000000..484e10186 --- /dev/null +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshConnectionManager.java @@ -0,0 +1,309 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.worker.component.session.ssh; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.*; + +import org.springframework.stereotype.Service; + +import com.clougence.clouddm.api.console.configs.ConfigRService; +import com.clougence.clouddm.base.metadata.ds.*; +import com.clougence.clouddm.base.metadata.rdp.enumeration.SecurityType; +import com.clougence.clouddm.worker.component.resource.file.EncryptedFileCacheManager; +import com.clougence.utils.StringUtils; +import com.jcraft.jsch.*; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class SshConnectionManager { + + private static final String SSH_CONFIG_CACHE_NAMESPACE = "ssh-config"; + @Resource + private ConfigRService configRService; + @Resource + private EncryptedFileCacheManager encryptedFileCacheManager; + + public Session openTunnelSession(Long sshConfigId) throws Exception { + SshConfig config = resolveConfig(sshConfigId, null); + + log.info("open ssh tunnel session, sshConfigId={}, sshHost={}, sshPort={}, username={}, authType={}, proxyType={}, strictHostKeyChecking={}",// + sshConfigId, config.getHost(), config.getPort(), config.getUsername(), config.getAuthType(), config.getProxyType(), strictHostKeyChecking(config)); + return this.openSession(config, true, false); + } + + public Session openSession(SshConfig config, boolean useKnownHosts, boolean forceNoStrictChecking) throws Exception { + validate(config); + JSch jsch = new JSch(); + byte[] privateKey = resolvePrivateKey(config.getPrivateKeyData()); + if (privateKey != null) { + byte[] passphrase = StringUtils.isBlank(config.getPrivateKeyPassphrase()) ? null : config.getPrivateKeyPassphrase().getBytes(StandardCharsets.UTF_8); + jsch.addIdentity(config.getName() == null ? "ssh-config" : config.getName(), privateKey, null, passphrase); + } + + Path knownHostsFile = null; + if (useKnownHosts) { + knownHostsFile = writeKnownHosts(config); + if (knownHostsFile != null) { + jsch.setKnownHosts(knownHostsFile.toString()); + } + } + + Session session = jsch.getSession(config.getUsername(), config.getHost(), config.getPort()); + if (StringUtils.isNotBlank(config.getPassword())) { + session.setPassword(config.getPassword()); + session.setUserInfo(new StaticUserInfo(config.getPassword(), config.getPrivateKeyPassphrase())); + } + + configureProxy(session, config); + Properties properties = new Properties(); + properties.setProperty("StrictHostKeyChecking", forceNoStrictChecking || !strictHostKeyChecking(config) ? "no" : "yes"); + session.setConfig(properties); + + int timeoutMs = intFeature(config, "connectTimeoutMs", 30000); + int serverAliveIntervalMs = intFeature(config, "serverAliveIntervalMs", 0); + if (serverAliveIntervalMs > 0) { + session.setServerAliveInterval(serverAliveIntervalMs); + } + session.connect(timeoutMs); + if (knownHostsFile != null) { + Files.deleteIfExists(knownHostsFile); + } + return session; + } + + private SshConfig resolveConfig(Long sshConfigId, SshConfig sshConfig) { + if (sshConfig != null) { + return sshConfig; + } + if (sshConfigId == null) { + throw new IllegalArgumentException("sshConfigId or sshConfig is required."); + } + + SshConfig cached = this.encryptedFileCacheManager.read(SSH_CONFIG_CACHE_NAMESPACE, sshConfigId.toString(), SshConfig.class); + if (cached != null) { + return cached; + } + + SshConfig fetched = this.configRService.fetchSshConfig(sshConfigId); + this.encryptedFileCacheManager.write(SSH_CONFIG_CACHE_NAMESPACE, sshConfigId.toString(), fetched); + return fetched; + } + + private void configureProxy(Session session, SshConfig config) { + SshProxyType proxyType = config.getProxyType() == null ? SshProxyType.NO_PROXY : config.getProxyType(); + if (proxyType == SshProxyType.NO_PROXY) { + return; + } + + SshProxyFeatures features = config.getProxyFeatures(); + if (features == null) { + throw new IllegalArgumentException("proxyFeatures is required when proxyType is " + proxyType); + } + + String host = features.getHost(); + int port = features.getPort() == null ? 0 : features.getPort(); + String user = features.getUsername(); + String password = features.getPassword(); + boolean useUserPassword = features.getSecurityType() == SecurityType.USER_PASSWD; + if (StringUtils.isBlank(host) || port <= 0) { + throw new IllegalArgumentException("proxy host and port are required."); + } + + Proxy proxy; + switch (proxyType) { + case HTTP -> { + ProxyHTTP http = new ProxyHTTP(host, port); + if (useUserPassword) { + http.setUserPasswd(user, password); + } + proxy = http; + } + case SOCKS4 -> { + ProxySOCKS4 socks4 = new ProxySOCKS4(host, port); + if (useUserPassword) { + socks4.setUserPasswd(user, password); + } + proxy = socks4; + } + case SOCKS5 -> { + ProxySOCKS5 socks5 = new ProxySOCKS5(host, port); + if (useUserPassword) { + socks5.setUserPasswd(user, password); + } + proxy = socks5; + } + default -> throw new IllegalArgumentException("unsupported proxyType: " + proxyType); + } + session.setProxy(proxy); + } + + private Path writeKnownHosts(SshConfig config) throws IOException { + List knownHosts = knownHosts(config); + if (knownHosts.isEmpty()) { + return null; + } + StringBuilder builder = new StringBuilder(); + for (SshKnownHost item : knownHosts) { + if (item == null) { + continue; + } + String host = item.getHost(); + int port = item.getPort(); + String type = item.getType(); + String key = item.getKey(); + if (StringUtils.isBlank(host) || StringUtils.isBlank(type) || StringUtils.isBlank(key)) { + continue; + } + builder.append(port == 22 ? host : "[" + host + "]:" + port).append(' ').append(type).append(' ').append(key).append('\n'); + } + if (builder.length() == 0) { + return null; + } + Path file = Files.createTempFile("clouddm-ssh-known-hosts-", ".txt"); + Files.writeString(file, builder.toString(), StandardCharsets.UTF_8); + return file; + } + + private List knownHosts(SshConfig config) { + SshConFeatures features = config.getConFeatures(); + if (features == null || features.getKnownHosts() == null) { + return Collections.emptyList(); + } + return features.getKnownHosts(); + } + + private boolean strictHostKeyChecking(SshConfig config) { + SshConFeatures features = config.getConFeatures(); + if (features == null) { + return false; + } + if (features.getHostKey() != null) { + return features.getHostKey().isStrictChecking(); + } + return features.isStrictHostKeyChecking(); + } + + private int intFeature(SshConfig config, String key, int defaultValue) { + if (config.getConFeatures() == null) { + return defaultValue; + } + if ("connectTimeoutMs".equals(key)) { + return config.getConFeatures().getConnectTimeoutMs() == null ? defaultValue : config.getConFeatures().getConnectTimeoutMs(); + } + if ("serverAliveIntervalMs".equals(key)) { + return config.getConFeatures().getServerAliveIntervalMs() == null ? defaultValue : config.getConFeatures().getServerAliveIntervalMs(); + } + return defaultValue; + } + + private byte[] resolvePrivateKey(String data) throws IOException { + if (StringUtils.isBlank(data)) { + return null; + } + if (data.startsWith("base64://")) { + return Base64.getDecoder().decode(data.substring("base64://".length())); + } + if (data.startsWith("base64:")) { + return Base64.getDecoder().decode(data.substring("base64:".length())); + } + if (data.startsWith("http://") || data.startsWith("https://")) { + try (InputStream in = new URL(data).openStream()) { + return in.readAllBytes(); + } + } + if (data.startsWith("resource://")) { + String path = data.substring("resource://".length()); + try (InputStream in = Thread.currentThread().getContextClassLoader().getResourceAsStream(path)) { + if (in == null) { + throw new FileNotFoundException("resource not found: " + path); + } + return in.readAllBytes(); + } + } + return data.getBytes(StandardCharsets.UTF_8); + } + + private void validate(SshConfig config) { + if (config == null) { + throw new IllegalArgumentException("ssh config can not be null."); + } + if (StringUtils.isBlank(config.getHost())) { + throw new IllegalArgumentException("ssh host can not be blank."); + } + if (StringUtils.isBlank(config.getUsername())) { + throw new IllegalArgumentException("ssh username can not be blank."); + } + if (config.getAuthType() == null) { + throw new IllegalArgumentException("ssh authType can not be null."); + } + } + + private static class StaticUserInfo implements UserInfo, UIKeyboardInteractive { + + private final String password; + private final String passphrase; + + private StaticUserInfo(String password, String passphrase){ + this.password = password; + this.passphrase = passphrase; + } + + @Override + public String getPassphrase() { return this.passphrase; } + + @Override + public String getPassword() { return this.password; } + + @Override + public boolean promptPassword(String message) { + return StringUtils.isNotBlank(this.password); + } + + @Override + public boolean promptPassphrase(String message) { + return StringUtils.isNotBlank(this.passphrase); + } + + @Override + public boolean promptYesNo(String message) { + return false; + } + + @Override + public void showMessage(String message) { + } + + @Override + public String[] promptKeyboardInteractive(String destination, String name, String instruction, String[] prompt, boolean[] echo) { + if (prompt == null || prompt.length == 0 || StringUtils.isBlank(this.password)) { + return new String[0]; + } + String[] response = new String[prompt.length]; + Arrays.fill(response, this.password); + return response; + } + } +} diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelHandle.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelHandle.java new file mode 100644 index 000000000..d4abd3cb4 --- /dev/null +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelHandle.java @@ -0,0 +1,38 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.worker.component.session.ssh; + +import com.clougence.clouddm.base.metadata.ds.DataSourceConfig; +import lombok.Getter; + +@Getter +public class SshTunnelHandle implements AutoCloseable { + + private final DataSourceConfig dsConfig; + private final com.jcraft.jsch.Session session; + + SshTunnelHandle(DataSourceConfig dsConfig, com.jcraft.jsch.Session session){ + this.dsConfig = dsConfig; + this.session = session; + } + + @Override + public void close() { + if (this.session != null && this.session.isConnected()) { + this.session.disconnect(); + } + } +} diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelManager.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelManager.java new file mode 100644 index 000000000..53e66f472 --- /dev/null +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/component/session/ssh/SshTunnelManager.java @@ -0,0 +1,94 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.worker.component.session.ssh; + +import org.springframework.stereotype.Service; + +import com.clougence.clouddm.base.metadata.ds.DataSourceConfig; +import com.clougence.utils.StringUtils; +import com.jcraft.jsch.JSchException; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +public class SshTunnelManager { + + @Resource + private SshConnectionManager sshConnectionManager; + + public SshTunnelHandle open(DataSourceConfig dsConfig) throws Exception { + HostAndPort target = parseHostAndPort(dsConfig.getHost()); + com.jcraft.jsch.Session sshSession = this.sshConnectionManager.openTunnelSession(dsConfig.getSshConfigId()); + + try { + int localPort = sshSession.setPortForwardingL(0, target.getHost(), target.getPort()); + dsConfig.setHost(rewriteHost(dsConfig.getHost(), localPort)); + log.info("finish open ssh tunnel for datasource, dsType={}, sshConfigId={}, targetHost={}, targetPort={}, localHost=127.0.0.1, localPort={}",// + dsConfig.getDataSourceType(), dsConfig.getSshConfigId(), target.getHost(), target.getPort(), localPort); + return new SshTunnelHandle(dsConfig, sshSession); + } catch (JSchException | RuntimeException e) { + log.warn("open ssh tunnel for datasource failed, dsType={}, sshConfigId={}, targetHost={}, targetPort={}",// + dsConfig.getDataSourceType(), dsConfig.getSshConfigId(), target.getHost(), target.getPort(), e); + if (sshSession.isConnected()) { + sshSession.disconnect(); + } + throw e; + } + } + + public boolean isEnabled(DataSourceConfig dsConfig) { + return Boolean.TRUE.equals(dsConfig.getSshProxyEnabled()) && dsConfig.getSshConfigId() != null; + } + + private HostAndPort parseHostAndPort(String host) { + if (StringUtils.isBlank(host)) { + throw new IllegalArgumentException("datasource host is required when SSH proxy is enabled."); + } + + String[] parts = host.split(":"); + if (parts.length < 2 || StringUtils.isBlank(parts[0]) || StringUtils.isBlank(parts[1])) { + throw new IllegalArgumentException("datasource host must include target host and port when SSH proxy is enabled."); + } + + return new HostAndPort(parts[0], Integer.parseInt(parts[1])); + } + + private String rewriteHost(String originalHost, int localPort) { + String[] parts = originalHost.split(":"); + StringBuilder builder = new StringBuilder("127.0.0.1:").append(localPort); + for (int i = 2; i < parts.length; i++) { + builder.append(':').append(parts[i]); + } + return builder.toString(); + } + + private static class HostAndPort { + + private final String host; + private final int port; + + private HostAndPort(String host, int port){ + this.host = host; + this.port = port; + } + + private String getHost() { return this.host; } + + private int getPort() { return this.port; } + } +} diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/MetaRServiceProvider.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/MetaRServiceProvider.java index 3d2a737d1..a0c66b898 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/MetaRServiceProvider.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/MetaRServiceProvider.java @@ -12,15 +12,14 @@ * 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 com.clougence.clouddm.worker.provider; + */ +package com.clougence.clouddm.worker.provider; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; -import jakarta.annotation.Resource; - import org.springframework.stereotype.Service; import com.clougence.clouddm.api.sidecar.session.execute.MetaRService; @@ -43,6 +42,7 @@ import com.clougence.utils.ExceptionUtils; import com.clougence.utils.StringUtils; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -97,11 +97,15 @@ public TestConnectResultDO testConnect(RSocketSendDTO sendDTO, DataSourceConfig public String getVersion(RSocketSendDTO sendDTO, DataSourceConfig dbConfig, Map levelsParam) { try { try (Session rdbSession = metaSession(dbConfig, levelsParam)) { - return rdbSession.getMetaService().getVersion(); + String version = rdbSession.getMetaService().getVersion(); + log.info("finish get datasource version, dsType={}, host={}, sshEnabled={}, sshConfigId={}, version={}",// + dbConfig.getDataSourceType(), dbConfig.getHost(), dbConfig.getSshProxyEnabled(), dbConfig.getSshConfigId(), version); + return version; } } catch (Exception e) { String msg = "getVersion error.msg:" + ExceptionUtils.getRootCauseMessage(e); - log.error(msg, e); + log.error("get datasource version failed, dsType={}, host={}, sshEnabled={}, sshConfigId={}, msg={}",// + dbConfig.getDataSourceType(), dbConfig.getHost(), dbConfig.getSshProxyEnabled(), dbConfig.getSshConfigId(), msg, e); throw new RuntimeException(msg, e); } } diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SessionRServiceProvider.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SessionRServiceProvider.java index bcc19ce7e..ad05025a8 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SessionRServiceProvider.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SessionRServiceProvider.java @@ -12,15 +12,15 @@ * 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 com.clougence.clouddm.worker.provider; + */ +package com.clougence.clouddm.worker.provider; import java.util.Collections; import java.util.List; -import jakarta.annotation.Resource; - import org.springframework.stereotype.Service; +import com.clougence.clouddm.api.common.boot.UnifiedPostConstruct; import com.clougence.clouddm.api.sidecar.session.execute.AsyncWaitResult; import com.clougence.clouddm.api.sidecar.session.execute.ExecuteRService; import com.clougence.clouddm.api.sidecar.session.execute.ResultList; @@ -35,10 +35,10 @@ import com.clougence.clouddm.worker.component.resource.OnlineDsResourceManager; import com.clougence.clouddm.worker.component.session.SessionAgent; import com.clougence.clouddm.worker.component.session.SessionManager; -import com.clougence.clouddm.api.common.boot.UnifiedPostConstruct; import com.clougence.utils.ExceptionUtils; import com.clougence.utils.StringUtils; +import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; @Slf4j @@ -80,6 +80,12 @@ public boolean createSession(RSocketSendDTO sendDTO, DataSourceConfig dsConfig, throw new RuntimeException(newSessionId + " session is exist."); } try { + if (dsConfig == null) { + log.info("receive create datasource session request, sessionId={}, configClass=null", newSessionId); + } else { + log.info("receive create datasource session request, sessionId={}, configClass={}, dsType={}, host={}, sshProxyEnabled={}, sshConfigId={}",// + newSessionId, dsConfig.getClass().getName(), dsConfig.getDataSourceType(), dsConfig.getHost(), dsConfig.getSshProxyEnabled(), dsConfig.getSshConfigId()); + } Session agent = this.sessionManager.createSession(this.onlineRM, dsConfig, context); return agent != null; } catch (Exception e) { diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SshRServiceProvider.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SshRServiceProvider.java new file mode 100644 index 000000000..5d0833ecd --- /dev/null +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/provider/SshRServiceProvider.java @@ -0,0 +1,98 @@ +/* + * Copyright 2026 杭州开云集致科技有限公司 + * + * Licensed 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 com.clougence.clouddm.worker.provider; + +import java.util.Collections; +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.clougence.clouddm.api.sidecar.session.ssh.SshRService; +import com.clougence.clouddm.api.sidecar.session.ssh.TestResultDTO; +import com.clougence.clouddm.base.metadata.ds.SshConfig; +import com.clougence.clouddm.base.metadata.ds.SshKnownHost; +import com.clougence.clouddm.comm.RSocketApiClass; +import com.clougence.clouddm.comm.model.RSocketSendDTO; +import com.clougence.clouddm.worker.component.session.ssh.SshConnectionManager; +import com.jcraft.jsch.HostKey; +import com.jcraft.jsch.Session; + +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; + +@Slf4j +@Service +@RSocketApiClass +public class SshRServiceProvider implements SshRService { + + @Resource + private SshConnectionManager connectionManager; + + private void disconnect(Session session) { + if (session != null && session.isConnected()) { + session.disconnect(); + } + } + + @Override + public List probeKnownHosts(RSocketSendDTO sendDTO, SshConfig config) { + Session session = null; + try { + session = this.connectionManager.openSession(config, false, true); + HostKey hostKey = session.getHostKey(); + + SshKnownHost item = new SshKnownHost(); + item.setHost(config.getHost()); + item.setPort(config.getPort()); + item.setType(hostKey.getType()); + item.setKey(hostKey.getKey()); + return Collections.singletonList(item); + } catch (Exception e) { + throw new IllegalStateException("probe ssh known hosts failed: " + e.getMessage(), e); + } finally { + disconnect(session); + } + } + + @Override + public TestResultDTO testConnection(RSocketSendDTO sendDTO, SshConfig config) { + long start = System.currentTimeMillis(); + String wsnString = (sendDTO == null) ? null : sendDTO.getWorkerSeqNumber(); + Session session = null; + + try { + session = this.connectionManager.openSession(config, true, false); + TestResultDTO result = new TestResultDTO(); + result.setSuccess(true); + result.setMessage("connection successful"); + result.setCostMs(System.currentTimeMillis() - start); + log.info("finish test ssh connection in sidecar, workerSeqNumber={}, host={}, port={}, success=true, costMs={}",// + wsnString, config.getHost(), config.getPort(), result.getCostMs()); + return result; + } catch (Exception e) { + long costMs = System.currentTimeMillis() - start; + log.warn("test ssh connection failed in sidecar, workerSeqNumber={}, host={}, port={}, costMs={}",// + wsnString, config.getHost(), config.getPort(), costMs, e); + TestResultDTO result = new TestResultDTO(); + result.setSuccess(false); + result.setMessage(e.getMessage()); + result.setCostMs(costMs); + return result; + } finally { + disconnect(session); + } + } +} diff --git a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/services/SidecarConfigServiceImpl.java b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/services/SidecarConfigServiceImpl.java index c126e4d84..5dbfc763b 100644 --- a/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/services/SidecarConfigServiceImpl.java +++ b/backend/clouddm-platform/cgdm-sidecar/src/main/java/com/clougence/clouddm/worker/services/SidecarConfigServiceImpl.java @@ -12,12 +12,11 @@ * 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 com.clougence.clouddm.worker.services; + */ +package com.clougence.clouddm.worker.services; import java.util.List; -import jakarta.annotation.Resource; - import org.springframework.stereotype.Service; import com.clougence.clouddm.api.console.configs.ConfigRService; @@ -25,13 +24,15 @@ import com.clougence.clouddm.base.metadata.ds.DataSourceType; import com.clougence.clouddm.base.metadata.ds.ToolConfig; import com.clougence.clouddm.platform.plugin.PluginManager; -import com.clougence.clouddm.sdk.service.config.ConfigService; import com.clougence.clouddm.sdk.service.config.ConfigData; +import com.clougence.clouddm.sdk.service.config.ConfigService; import com.clougence.clouddm.sdk.service.secrules.SensitiveConfig; import com.clougence.clouddm.sdk.ui.browser.DsBrowseSpi; import com.clougence.schema.dialect.Dialect; import com.clougence.schema.umi.struts.UmiTypes; +import jakarta.annotation.Resource; + @Service public class SidecarConfigServiceImpl implements ConfigService { @@ -39,13 +40,13 @@ public class SidecarConfigServiceImpl implements ConfigService { private ConfigRService configRService; @Override - public List fetchSettings(String ownerUid, List names) { - return this.configRService.fetchSettings(ownerUid, names); + public List fetchSettings(List names) { + return this.configRService.fetchSettings(names); } @Override - public DataSourceConfig fetchDsConfig(long dsId, DataSourceType dsType) { - return this.configRService.fetchDsConfig(dsId, dsType); + public DataSourceConfig fetchDsConfig(long dsId) { + return this.configRService.fetchDsConfig(dsId); } @Override diff --git a/backend/clouddm-plugins/clouddm-features/plus-faker/src/main/java/com/clougence/clouddm/faker/FakerTools.java b/backend/clouddm-plugins/clouddm-features/plus-faker/src/main/java/com/clougence/clouddm/faker/FakerTools.java index a03be6220..7af4acdb3 100644 --- a/backend/clouddm-plugins/clouddm-features/plus-faker/src/main/java/com/clougence/clouddm/faker/FakerTools.java +++ b/backend/clouddm-plugins/clouddm-features/plus-faker/src/main/java/com/clougence/clouddm/faker/FakerTools.java @@ -76,7 +76,7 @@ public void init(ToolSessionContextDTO contextDTO) throws Exception { this.fakerConfig = fakerConfig; // session - DataSourceConfig dsConfig = this.configService.fetchDsConfig(fakerConfig.getDsId(), fakerConfig.getDsType()); + DataSourceConfig dsConfig = this.configService.fetchDsConfig(fakerConfig.getDsId()); SessionFactory sessionFactory = this.createSessionFactory(dsConfig, fakerConfig.getCatalog(), fakerConfig.getSchema()); // engineConfig diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/approval/DingApprovalProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/approval/DingApprovalProviderSpi.java index 9cde9318e..2a3ee997c 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/approval/DingApprovalProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/approval/DingApprovalProviderSpi.java @@ -69,7 +69,7 @@ public DingApprovalProviderSpi(ConsoleConfigService configService, ApprovalRefre @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) throws Exception { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// DingConfigKey.ApprovalEnable.getConfigKey(),// DingConfigKey.ApprovalClientId.getConfigKey(),// DingConfigKey.ApprovalClientSecret.getConfigKey())); diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/auth/DingLoginProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/auth/DingLoginProviderSpi.java index ab1968eda..f3aab7bff 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/auth/DingLoginProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-dingtalk/src/main/java/com/clougence/clouddm/team/provider/dingtalk/auth/DingLoginProviderSpi.java @@ -67,7 +67,7 @@ public int order() { @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// DingConfigKey.LoginEnable.getConfigKey(),// DingConfigKey.LoginClientId.getConfigKey(),// DingConfigKey.LoginClientSecret.getConfigKey(),// @@ -181,7 +181,7 @@ public LoginResponse authLogin(String primaryUID, LoginRequest request) { // mapping role String roleName = dingApi.getClient().getRoleMapping(); roleName = StringUtils.isEmpty(roleName) ? SecSysRole.DEV_ROLE_NAME : roleName; - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); RoleData role = CollectionUtils.isEmpty(roles) ? null : roles.get(0); if (role == null) { log.info("Ding: user(" + dingUser.getAccount() + ") not found any role, memberOf=" + roleName); diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/approval/FeishuApprovalProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/approval/FeishuApprovalProviderSpi.java index df13353cc..a499727bc 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/approval/FeishuApprovalProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/approval/FeishuApprovalProviderSpi.java @@ -61,7 +61,7 @@ public FeishuApprovalProviderSpi(ConsoleConfigService configService, ApprovalRef @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// FeishuConfigKey.ApprovalEnable.getConfigKey(),// FeishuConfigKey.ApprovalAppID.getConfigKey(),// FeishuConfigKey.ApprovalAppSecret.getConfigKey(),// @@ -221,7 +221,7 @@ public ApprovalInstanceInfo getLastInfo(String ownerUid, String identity) throws @Override public List getTemplates(String ownerUid) throws ThirdPartyApiException { FeishuApi approvalApi = this.approvalApi(ownerUid); - List configList = this.configService.fetchSettings(ownerUid, Collections.singletonList(FeishuConfigKey.ApprovalTemplateList.getConfigKey())); + List configList = this.configService.fetchSettings(Collections.singletonList(FeishuConfigKey.ApprovalTemplateList.getConfigKey())); if (configList.isEmpty()) { return Collections.emptyList(); } else { diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/auth/FeishuLoginProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/auth/FeishuLoginProviderSpi.java index 9e691c5d4..d4814288d 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/auth/FeishuLoginProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-feishu/src/main/java/com/clougence/clouddm/team/provider/feishu/auth/FeishuLoginProviderSpi.java @@ -67,7 +67,7 @@ public int order() { @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// FeishuConfigKey.LoginEnable.getConfigKey(),// FeishuConfigKey.LoginAppID.getConfigKey(),// FeishuConfigKey.LoginAppSecret.getConfigKey(),// @@ -183,7 +183,7 @@ public LoginResponse authLogin(String primaryUID, LoginRequest request) { // mapping role String roleName = feishuApi.getRoleMap(); roleName = StringUtils.isEmpty(roleName) ? SecSysRole.DEV_ROLE_NAME : roleName; - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); RoleData role = CollectionUtils.isEmpty(roles) ? null : roles.get(0); if (role == null) { log.info("Feishu: user(" + dingUser.getAccount() + ") not found any role, memberOf=" + roleName); diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/BaseLoginProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/BaseLoginProviderSpi.java index a67376722..bcb276f36 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/BaseLoginProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/BaseLoginProviderSpi.java @@ -24,22 +24,15 @@ import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; -import javax.naming.directory.Attribute; -import javax.naming.directory.Attributes; -import javax.naming.directory.DirContext; -import javax.naming.directory.InitialDirContext; -import javax.naming.directory.SearchControls; -import javax.naming.directory.SearchResult; +import javax.naming.directory.*; import com.clougence.clouddm.sdk.model.exception.ThirdPartyApiException; import com.clougence.clouddm.sdk.security.login.LoginProviderSpi; import com.clougence.clouddm.sdk.security.login.LoginRequest; import com.clougence.clouddm.sdk.security.login.LoginResponse; import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; -import com.clougence.clouddm.sdk.service.config.RoleData; import com.clougence.clouddm.sdk.service.config.UserData; import com.clougence.clouddm.team.provider.ldap.constants.LdapI18nKey; -import com.clougence.utils.CollectionUtils; import com.clougence.utils.ExceptionUtils; import lombok.extern.slf4j.Slf4j; @@ -268,9 +261,4 @@ protected List getAttributeList(String name, Attributes attributes) { protected abstract UserData mapUser(BaseCtx ldapCtx, UserData primaryUser, String ldapAccount, Attributes attributes) throws NamingException; protected abstract void checkThrowError(Exception e); - - protected RoleData findRole(String primaryUID, String roleName) { - List roles = this.configService.findRoleByName(primaryUID, roleName); - return CollectionUtils.isEmpty(roles) ? null : roles.get(0); - } } diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/ConfigHelper.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/ConfigHelper.java index 637bb3649..2f1fb4509 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/ConfigHelper.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/ConfigHelper.java @@ -20,11 +20,11 @@ import java.util.List; import java.util.Map; -import com.clougence.clouddm.team.provider.ldap.constants.LdapConfigKey; -import com.clougence.clouddm.team.provider.ldap.constants.LdapI18nKey; import com.clougence.clouddm.sdk.model.exception.ThirdPartyApiException; -import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; import com.clougence.clouddm.sdk.service.config.ConfigData; +import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; +import com.clougence.clouddm.team.provider.ldap.constants.LdapConfigKey; +import com.clougence.clouddm.team.provider.ldap.constants.LdapI18nKey; import com.clougence.utils.StringUtils; import lombok.extern.slf4j.Slf4j; @@ -37,7 +37,7 @@ public class ConfigHelper { public static BaseConfig fetchConfig(ConsoleConfigService configService, final String primaryUID) { - List configList = configService.fetchSettings(primaryUID, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// LdapConfigKey.AuthType.getConfigKey(), // LdapConfigKey.LdapHost.getConfigKey(), // LdapConfigKey.LdapPort.getConfigKey(), // diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForAd.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForAd.java index 4d445fc2c..eec2147cc 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForAd.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForAd.java @@ -295,7 +295,7 @@ private RoleData searchRole(String primaryUID, BaseCtx ldapCtx) { BaseConfig ldapConfig = ldapCtx.getLdapConfig(); String roleName = ldapConfig.getLdapRoleMap(); roleName = StringUtils.isEmpty(roleName) ? SecSysRole.DEV_ROLE_NAME : roleName; - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); return CollectionUtils.isEmpty(roles) ? null : roles.get(0); } diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForLdap.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForLdap.java index 015368fee..fbe52f013 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForLdap.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-ldap/src/main/java/com/clougence/clouddm/team/provider/ldap/auth/LoginProviderSpiForLdap.java @@ -216,7 +216,7 @@ private RoleData searchRole(String primaryUID, BaseCtx ldapCtx) { BaseConfig ldapConfig = ldapCtx.getLdapConfig(); String roleName = ldapConfig.getLdapRoleMap(); roleName = StringUtils.isEmpty(roleName) ? SecSysRole.DEV_ROLE_NAME : roleName; - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); return CollectionUtils.isEmpty(roles) ? null : roles.get(0); } diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/auth/OidcLoginProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/auth/OidcLoginProviderSpi.java index 493e69d8a..c7a8651f6 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/auth/OidcLoginProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/auth/OidcLoginProviderSpi.java @@ -167,7 +167,7 @@ public LoginResponse authLogin(String primaryUID, LoginRequest request) { // mapping role String roleName = StringUtils.isEmpty(oidcApi.getConf().getRoleMap()) ? SecSysRole.DEV_ROLE_NAME : oidcApi.getConf().getRoleMap(); - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); RoleData role = CollectionUtils.isEmpty(roles) ? null : roles.get(0); if (role == null) { log.info("OIDC: user(" + oidcUser.getAccount() + ") not found any role, memberOf=" + roleName); diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/client/OidcCfg.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/client/OidcCfg.java index 33524ae44..47e1d3560 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/client/OidcCfg.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-oidc/src/main/java/com/clougence/clouddm/team/provider/oidc/client/OidcCfg.java @@ -20,10 +20,10 @@ import java.util.List; import java.util.Map; -import com.clougence.clouddm.team.provider.oidc.constants.OidcConfigKey; import com.clougence.clouddm.sdk.security.login.LoginProvider; -import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; import com.clougence.clouddm.sdk.service.config.ConfigData; +import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; +import com.clougence.clouddm.team.provider.oidc.constants.OidcConfigKey; import lombok.Getter; import lombok.Setter; @@ -40,7 +40,7 @@ public class OidcCfg { private String roleMap; public static OidcCfg fetchConfig(ConsoleConfigService configService, String ownerUid) { - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// OidcConfigKey.AuthType.getConfigKey(), // OidcConfigKey.WellKnownUrl.getConfigKey(),// OidcConfigKey.ClientId.getConfigKey(), // diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/approval/WechatApprovalProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/approval/WechatApprovalProviderSpi.java index 4cef353c4..d98e528c1 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/approval/WechatApprovalProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/approval/WechatApprovalProviderSpi.java @@ -59,7 +59,7 @@ public WechatApprovalProviderSpi(ConsoleConfigService configService){ @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// WechatConfigKey.ApprovalEnable.getConfigKey(),// WechatConfigKey.ApprovalCorpId.getConfigKey(),// WechatConfigKey.ApprovalSecret.getConfigKey(),// @@ -296,7 +296,7 @@ public List getTemplates(String ownerUid) throws ThirdPartyApi String templateListConfigKey = WechatConfigKey.ApprovalTemplateList.getConfigKey(); String templateLangConfigKey = WechatConfigKey.ApprovalTemplateLang.getConfigKey(); - List configList = this.configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = this.configService.fetchSettings(Arrays.asList(// templateListConfigKey,// templateLangConfigKey // )); diff --git a/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/auth/WechatLoginProviderSpi.java b/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/auth/WechatLoginProviderSpi.java index 8e297f860..30714b2ba 100644 --- a/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/auth/WechatLoginProviderSpi.java +++ b/backend/clouddm-plugins/clouddm-provider/plus-provider-wechat/src/main/java/com/clougence/clouddm/team/provider/wechat/auth/WechatLoginProviderSpi.java @@ -21,20 +21,23 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import com.clougence.clouddm.sdk.security.login.*; -import com.clougence.clouddm.team.provider.wechat.client.WechatApi; -import com.clougence.clouddm.team.provider.wechat.client.WechatClient; -import com.clougence.clouddm.team.provider.wechat.constants.WechatConfigKey; -import com.clougence.clouddm.team.provider.wechat.constants.WechatI18nKey2; -import com.clougence.clouddm.sdk.security.auth.def.SecSysRole; +import com.clougence.clouddm.sdk.LifeSpiRequest; +import com.clougence.clouddm.sdk.LifeSpiResponse; +import com.clougence.clouddm.sdk.LifeSpiStatus; import com.clougence.clouddm.sdk.model.exception.ThirdPartyApiException; -import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; +import com.clougence.clouddm.sdk.security.auth.def.SecSysRole; +import com.clougence.clouddm.sdk.security.login.LoginProvider; +import com.clougence.clouddm.sdk.security.login.LoginProviderSpi; +import com.clougence.clouddm.sdk.security.login.LoginRequest; +import com.clougence.clouddm.sdk.security.login.LoginResponse; import com.clougence.clouddm.sdk.service.config.ConfigData; +import com.clougence.clouddm.sdk.service.config.ConsoleConfigService; import com.clougence.clouddm.sdk.service.config.RoleData; import com.clougence.clouddm.sdk.service.config.UserData; -import com.clougence.clouddm.sdk.LifeSpiRequest; -import com.clougence.clouddm.sdk.LifeSpiResponse; -import com.clougence.clouddm.sdk.LifeSpiStatus; +import com.clougence.clouddm.team.provider.wechat.client.WechatApi; +import com.clougence.clouddm.team.provider.wechat.client.WechatClient; +import com.clougence.clouddm.team.provider.wechat.constants.WechatConfigKey; +import com.clougence.clouddm.team.provider.wechat.constants.WechatI18nKey2; import com.clougence.utils.CollectionUtils; import com.clougence.utils.JsonUtils; import com.clougence.utils.StringUtils; @@ -64,7 +67,7 @@ public int order() { @Override public LifeSpiResponse start(String ownerUid, LifeSpiRequest requestDTO) { // fetch config - List configList = configService.fetchSettings(ownerUid, Arrays.asList(// + List configList = configService.fetchSettings(Arrays.asList(// WechatConfigKey.LoginEnable.getConfigKey(),// WechatConfigKey.LoginCorpId.getConfigKey(),// WechatConfigKey.LoginAgentId.getConfigKey(),// @@ -181,7 +184,7 @@ public LoginResponse authLogin(String primaryUID, LoginRequest request) { // mapping role String roleName = wechatApi.getClient().getRoleMapping(); roleName = StringUtils.isEmpty(roleName) ? SecSysRole.DEV_ROLE_NAME : roleName; - List roles = this.configService.findRoleByName(primaryUID, roleName); + List roles = this.configService.findRoleByName(roleName); RoleData role = CollectionUtils.isEmpty(roles) ? null : roles.get(0); if (role == null) { log.info("Wechat: user(" + wechatUser.getAccount() + ") not found any role, memberOf=" + roleName); diff --git a/backend/clouddm-utils/cg-drivers/build.gradle b/backend/clouddm-utils/cg-drivers/build.gradle index bcfb99f10..56a3dce4d 100644 --- a/backend/clouddm-utils/cg-drivers/build.gradle +++ b/backend/clouddm-utils/cg-drivers/build.gradle @@ -22,6 +22,7 @@ dependencies { // project api project(':cg-utils') implementation "org.slf4j:slf4j-api:${SLF4J_VERSION}" + implementation 'com.github.mwiede:jsch:2.28.3' // sidecar libs (compileOnly) compileOnly "com.squareup.okhttp3:okhttp:${OKHTTP_VERSION}" diff --git a/backend/clouddm-utils/cg-rpc/src/main/java/com/clougence/clouddm/comm/model/RSocketSendDTO.java b/backend/clouddm-utils/cg-rpc/src/main/java/com/clougence/clouddm/comm/model/RSocketSendDTO.java index 5dc55aa7e..7bc598163 100644 --- a/backend/clouddm-utils/cg-rpc/src/main/java/com/clougence/clouddm/comm/model/RSocketSendDTO.java +++ b/backend/clouddm-utils/cg-rpc/src/main/java/com/clougence/clouddm/comm/model/RSocketSendDTO.java @@ -26,11 +26,8 @@ public class RSocketSendDTO { private Long clusterId; - private String uid; - private String workerSeqNumber; private String workerIP; - private RSocketSendType rSocketSendType; } diff --git a/backend/clouddm-utils/cg-utils/src/main/java/com/clougence/utils/JsonUtils.java b/backend/clouddm-utils/cg-utils/src/main/java/com/clougence/utils/JsonUtils.java index 7077fe2d9..a9726be75 100644 --- a/backend/clouddm-utils/cg-utils/src/main/java/com/clougence/utils/JsonUtils.java +++ b/backend/clouddm-utils/cg-utils/src/main/java/com/clougence/utils/JsonUtils.java @@ -57,11 +57,17 @@ public static String toJson(Object obj) { @SneakyThrows public static T toObj(String jsonStr, Class clz) { + if (StringUtils.isBlank(jsonStr)) { + return null; + } return objectMapper.readValue(jsonStr, clz); } @SneakyThrows public static T toObj(String jsonStr, JavaType clz) { + if (StringUtils.isBlank(jsonStr)) { + return null; + } return objectMapper.readValue(jsonStr, clz); } diff --git a/backend/gradle.properties b/backend/gradle.properties index 25d50b831..5489e916f 100644 --- a/backend/gradle.properties +++ b/backend/gradle.properties @@ -1,4 +1,5 @@ # +org.gradle.daemon=false org.gradle.jvmargs=-Xmx6144m -Djava.net.preferIPv4Stack=true #org.gradle.java.home=/home/zyc/jdks/jdk-21.0.2 # diff --git a/backend/settings.gradle b/backend/settings.gradle index 31ff39357..73b398681 100644 --- a/backend/settings.gradle +++ b/backend/settings.gradle @@ -83,7 +83,7 @@ include 'ds-maxcompute'; project(":ds-maxcompute").projectDir = file('clouddm-pl include 'ds-hologres'; project(":ds-hologres").projectDir = file('clouddm-plugins/clouddm-ds/ds-hologres') // test -include 's-test'; project(":s-test").projectDir = file('tests/ds-test') +include 's-test'; project(":s-test").projectDir = file('../tests/ds-test') // build def targetName = gradle.startParameter.projectProperties["target"] diff --git a/backend/tests/dbs/docker-compose.yml b/backend/tests/dbs/docker-compose.yml deleted file mode 100644 index fb06f6107..000000000 --- a/backend/tests/dbs/docker-compose.yml +++ /dev/null @@ -1,83 +0,0 @@ -version: '3.1' - -# use this yml for docker-compose up -d -services: - mysql: - image: mysql:8.0.22 - environment: - - MYSQL_DATABASE=devtester - - MYSQL_ROOT_PASSWORD=123456 - - TZ=Asia/Shanghai - ports: - - 13306:3306 - restart: always - command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone='+8:00' - # User/Password:root/123456 - - postgres: - image: postgres:12.4 - environment: - - POSTGRES_PASSWORD=123456 - ports: - - 15432:5432 - restart: always - # User/Password:postgres/123456 - - oracle_12c: - image: truevoly/oracle-12c - ports: - - 11521:1521 - - 11522:8080 - restart: always - # User/Password:system/oracle - # WebConsole:http://192.168.0.164:50102/em/login(sys/oracle) - # -- CREATE USER "TESTER" IDENTIFIED BY TESTER PROFILE "DEFAULT" ACCOUNT UNLOCK DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP"; - # -- GRANT "DBA" TO "TESTER"; - - mssql_2017: - image: mcr.microsoft.com/mssql/server:2017-latest - environment: - - SA_PASSWORD=Share123456! - - ACCEPT_EULA=Y - ports: - - 11433:1433 - restart: always - # User/Password:sa/Share123456! - # https://hub.docker.com/_/microsoft-mssql-server?tab=description - # https://mcr.microsoft.com/v2/mssql/server/tags/list - - db2: - image: ibmcom/db2 - environment: - - DB2INST1_PASSWORD=123456 - - DBNAME=devtesterdb - - LICENSE=accept - ports: - - 50000:50000 - privileged: true - restart: always - # User/Password:db2inst1/123456 - # -v /usr/local/db2:/database - # docker exec -it 85011f695773 /bin/bash - # su - db2inst1 - # db2 list database directory - # db2sampl - # Login SAMPLE Database - - clickhouse: - image: clickhouse/clickhouse-server - environment: - - CLICKHOUSE_DB=default - - CLICKHOUSE_USER=root - - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 - - TZ=Asia/Shanghai - - CLICKHOUSE_PASSWORD=password123 - ports: - - 18123:8123 - - 19000:9000 - # -v /var/local/apps/clickhouse/data:/var/lib/clickhouse - # --ulimit nofile=262144:262144 - restart: always - - # 达梦 - # https://download.dameng.com/eco/dm8/dm8_20230808_rev197096_x86_rh6_64_single.tar \ No newline at end of file diff --git a/frontend/src/locales/en.json b/frontend/src/locales/en.json index a388ea9b6..bf85f9f8c 100644 --- a/frontend/src/locales/en.json +++ b/frontend/src/locales/en.json @@ -3014,6 +3014,7 @@ "nav-shen-ji-ri-zhi": "Audit Logs", "nav-shu-ju-fang-wen": "Data Access", "nav-cha-xun-ji-qi-lie-biao": "Query Machines", + "nav-ssh-tong-dao": "SSH Channel", "nav-ji-cheng": "Integration", "nav-webhook": "IM Config", "nav-git-ops": "Git Ops", @@ -3892,5 +3893,41 @@ "initialization.jdbcPreview": "Generated JDBC URL", "initialization.advancedOptions": "Advanced Options", "initialization.editConfig": "Edit the complete configuration file here...", - "initialization.adminNote": "Admin account will be created by Flyway migration, not written to config files." + "initialization.adminNote": "Admin account will be created by Flyway migration, not written to config files.", + "lian-jie-di-zhi": "Endpoint", + "xin-jian": "Create", + "lian-jie-can-shu": "Connection Parameters", + "bao-chi-lian-jie": "Keep Alive", + "bao-huo-jian-ge-ms": "Keep Alive Interval (ms)", + "zhu-ji-mi-yao-xiao-yan": "Host Key Checking", + "lian-jie-chao-shi-ms": "Connect Timeout (ms)", + "que-ding-yao-shan-chu-gai-pei-zhi-ma": "Delete this configuration?", + "ssh-tong-dao-xiang-qing": "SSH Channel Detail", + "bian-ji-ssh-tong-dao": "Edit SSH Channel", + "xin-jian-ssh-tong-dao": "Create SSH Channel", + "bao-cun-cheng-gong": "Saved", + "yi-pei-zhi-liu-kong-bao-chi-bu-bian": "Configured. Leave blank to keep unchanged.", + "private-key": "Private Key", + "private-key-data": "Private Key Data", + "private-key-passphrase": "Passphrase", + "no-proxy": "No proxy", + "proxy-host": "Proxy Host", + "proxy-port": "Proxy Port", + "proxy-user": "Proxy User", + "proxy-password": "Proxy Password", + "none-auth": "None", + "only-user": "Username only", + "user-password": "Username and password", + "nothing-to-show": "Nothing to show", + "add-ssh-configuration": "Add SSH configuration", + "key-pair": "Key pair", + "http-socks-proxy": "Connection Proxy", + "proxy": "Proxy", + "send-keep-alive-messages-every": "Send keep-alive messages every", + "seconds": "seconds", + "milliseconds": "ms", + "strict-host-key-checking": "Strict host key checking", + "connect-timeout": "Connect timeout", + "update-host-key-cache-and-retry": "Update key cache", + "update-host-key-cache-failed": "Failed to update host key cache" } diff --git a/frontend/src/locales/zh.json b/frontend/src/locales/zh.json index 66f32357c..0c7607cae 100644 --- a/frontend/src/locales/zh.json +++ b/frontend/src/locales/zh.json @@ -3054,6 +3054,7 @@ "nav-shen-ji-ri-zhi": "审计日志", "nav-shu-ju-fang-wen": "数据访问", "nav-cha-xun-ji-qi-lie-biao": "查询机器列表", + "nav-ssh-tong-dao": "SSH 通道", "nav-ji-cheng": "集成", "nav-webhook": "IM 配置", "nav-git-ops": "Git Ops", @@ -3888,5 +3889,41 @@ "initialization.jdbcPreview": "实时生成的 JDBC URL", "initialization.advancedOptions": "高级选项", "initialization.editConfig": "在此编辑完整的配置文件内容...", - "initialization.adminNote": "管理员账号将通过 Flyway 迁移脚本创建,不会写入配置文件。" + "initialization.adminNote": "管理员账号将通过 Flyway 迁移脚本创建,不会写入配置文件。", + "lian-jie-di-zhi": "连接地址", + "xin-jian": "新建", + "lian-jie-can-shu": "连接参数", + "bao-chi-lian-jie": "保持连接", + "bao-huo-jian-ge-ms": "保活间隔(ms)", + "zhu-ji-mi-yao-xiao-yan": "主机密钥校验", + "lian-jie-chao-shi-ms": "连接超时(ms)", + "que-ding-yao-shan-chu-gai-pei-zhi-ma": "确定要删除该配置吗?", + "ssh-tong-dao-xiang-qing": "SSH 通道详情", + "bian-ji-ssh-tong-dao": "编辑 SSH 通道", + "xin-jian-ssh-tong-dao": "新建 SSH 通道", + "bao-cun-cheng-gong": "保存成功", + "yi-pei-zhi-liu-kong-bao-chi-bu-bian": "已配置,留空保持不变", + "private-key": "私钥", + "private-key-data": "私钥Key", + "private-key-passphrase": "密码短语", + "no-proxy": "无代理", + "proxy-host": "代理主机", + "proxy-port": "代理端口", + "proxy-user": "代理用户", + "proxy-password": "代理密码", + "none-auth": "无", + "only-user": "仅用户名", + "user-password": "用户名和密码", + "nothing-to-show": "暂无数据", + "add-ssh-configuration": "添加 SSH 配置", + "key-pair": "密钥对", + "http-socks-proxy": "连接代理", + "proxy": "代理", + "send-keep-alive-messages-every": "每隔", + "seconds": "秒发送 keep-alive 消息", + "milliseconds": "毫秒", + "strict-host-key-checking": "严格校验主机密钥", + "connect-timeout": "连接超时", + "update-host-key-cache-and-retry": "更新密钥缓存", + "update-host-key-cache-failed": "更新主机密钥缓存失败" } diff --git a/frontend/src/router/system.js b/frontend/src/router/system.js index 9c9e07877..f7b7f007f 100644 --- a/frontend/src/router/system.js +++ b/frontend/src/router/system.js @@ -123,6 +123,12 @@ export default [ name: 'System_Machine_List', component: () => import(/* webpackChunkName: "ccsystem-cluster-list" */ '@/views/system/cluster/workerList') }, + { + path: 'sshConfig', + name: 'System_Ssh_Config', + component: () => import(/* webpackChunkName: "system-ssh-config" */ '@/views/sshConfig/index'), + meta: { requiredAuth: 'DM_SSH_CHANNEL_READ' } + }, { path: 'dmrulelist', name: 'DMRuleList', diff --git a/frontend/src/services/http/api/index.js b/frontend/src/services/http/api/index.js index 17e31631f..2fb65adae 100644 --- a/frontend/src/services/http/api/index.js +++ b/frontend/src/services/http/api/index.js @@ -53,6 +53,7 @@ import { financeApi } from '@/services/http/api/finance'; import { taskTemplateApi } from '@/services/http/api/taskTemplate'; import { taskTemplateDetailApi } from '@/services/http/api/taskTemplateDetail'; import { metaSchemaApi } from '@/services/http/api/metaSchema'; +import { sshConfigApi } from '@/services/http/api/sshConfig'; export const api = { ...authApi, @@ -111,5 +112,6 @@ export const api = { ...taskTemplateApi, ...taskTemplateDetailApi, ...transferApi, - ...metaSchemaApi + ...metaSchemaApi, + ...sshConfigApi }; diff --git a/frontend/src/services/http/api/sshConfig.js b/frontend/src/services/http/api/sshConfig.js new file mode 100644 index 000000000..37b042bba --- /dev/null +++ b/frontend/src/services/http/api/sshConfig.js @@ -0,0 +1,9 @@ +export const sshConfigApi = { + dmSshConfigList: '/clouddm/console/api/v1/sshConfig/list', + dmSshConfigDetail: '/clouddm/console/api/v1/sshConfig/detail', + dmSshConfigCreate: '/clouddm/console/api/v1/sshConfig/create', + dmSshConfigUpdate: '/clouddm/console/api/v1/sshConfig/update', + dmSshConfigDelete: '/clouddm/console/api/v1/sshConfig/delete', + dmSshConfigTestConnection: '/clouddm/console/api/v1/sshConfig/testConnection', + dmSshConfigProbeKnownHosts: '/clouddm/console/api/v1/sshConfig/probeKnownHosts' +}; diff --git a/frontend/src/utils/buildSidebarMenu.js b/frontend/src/utils/buildSidebarMenu.js index 25aa0c8b7..70013cfd4 100644 --- a/frontend/src/utils/buildSidebarMenu.js +++ b/frontend/src/utils/buildSidebarMenu.js @@ -56,6 +56,9 @@ export function buildSidebarMenu({ myCatLog, myAuth, includesDM, isDesktop }) { if (myCatLog.includes('CAT_DM_SYS') && myCatLog.includes('CAT_DM_WORKER')) { dataAccessChildren.push(linkItem('/system/dmmachine', '/#/system/dmmachine', 'nav-cha-xun-ji-qi-lie-biao', 'icon-v2-cluster')); } + if (myAuth.includes('DM_SSH_CHANNEL_READ')) { + dataAccessChildren.push(linkItem('/system/sshConfig', '/#/system/sshConfig', 'nav-ssh-tong-dao', 'icon-v2-MyAuth')); + } if (myCatLog.includes('CAT_DM_SYS') && myCatLog.includes('CAT_DM_SECRULES')) { dataAccessChildren.push(linkItem('/system/dmrulelist', '/#/system/dmrulelist', 'an-quan-gui-ze', 'icon-v2-audit')); dataAccessChildren.push(linkItem('/system/dmspeclist', '/#/system/dmspeclist', 'an-quan-gui-fan', 'icon-v2-role')); diff --git a/frontend/src/views/dataSource/DsParams.vue b/frontend/src/views/dataSource/DsParams.vue index bf2ecc252..9a989bcca 100644 --- a/frontend/src/views/dataSource/DsParams.vue +++ b/frontend/src/views/dataSource/DsParams.vue @@ -257,7 +257,7 @@ export default { this.loading = true; try { - const res = await this.$services.rdpDataSourceQueryDsConfig({ + const res = await this.$services.dmDataSourceQueryDsConfig({ data: { dataSourceId: this.dsId } @@ -329,16 +329,16 @@ export default { }); return; } - const updateConfigs = {}; - const needCreateConfigs = {}; + const updateConfigMap = {}; + const needCreateConfigMap = {}; console.log('this.editedParams', this.editedParams); this.editedParams.forEach((config) => { if (config.needCreated) { - needCreateConfigs[config.configName] = config.currentCount || config.defaultValue; + needCreateConfigMap[config.configName] = config.currentCount || config.defaultValue; } else { - updateConfigs[config.configName] = config.currentCount; + updateConfigMap[config.configName] = config.currentCount; } }); @@ -357,11 +357,11 @@ export default { // } // }); - const res = await this.$services.rdpDataSourceUpsertDsConfig({ + const res = await this.$services.dmDataSourceUpsertDsConfig({ data: { dataSourceId: this.dsId, - needCreateConfigs, - updateConfigs + needCreateConfigMap, + updateConfigMap } }); diff --git a/frontend/src/views/sshConfig/index.vue b/frontend/src/views/sshConfig/index.vue new file mode 100644 index 000000000..0adf565e4 --- /dev/null +++ b/frontend/src/views/sshConfig/index.vue @@ -0,0 +1,864 @@ + + + + + diff --git a/tests/dbs/README.md b/tests/dbs/README.md new file mode 100644 index 000000000..99e2adeef --- /dev/null +++ b/tests/dbs/README.md @@ -0,0 +1,203 @@ +# DB 测试资源使用说明 + +`tests/dbs` 用于启动 CloudDM 本地联调和测试所需的数据源、SSH Server、HTTP/SOCKS 代理服务。 + +## 目录结构 + +```text +tests/dbs +├── dbs_x86/docker-compose.yml # x86 环境 +├── dbs_arm64/docker-compose.yml # arm64 环境 +├── proxy/3proxy.cfg # 无认证 3proxy 配置 +├── proxy-auth/3proxy.cfg # 账号密码认证 3proxy 配置 +└── ssh/ # SSH Server 使用的公私钥和初始化脚本 +``` + +`dbs_x86` 和 `dbs_arm64` 的宿主机暴露端口保持一致,只是镜像平台不同。同一台机器上不要同时启动两套 compose,除非先修改其中一套端口。 + +## 启停命令 + +在仓库根目录执行: + +```bash +cd /home/zyc/project/dm/open-cdm +``` + +x86: + +```bash +docker compose -f tests/dbs/dbs_x86/docker-compose.yml up -d +docker compose -f tests/dbs/dbs_x86/docker-compose.yml ps +docker compose -f tests/dbs/dbs_x86/docker-compose.yml down +``` + +arm64: + +```bash +docker compose -f tests/dbs/dbs_arm64/docker-compose.yml up -d +docker compose -f tests/dbs/dbs_arm64/docker-compose.yml ps +docker compose -f tests/dbs/dbs_arm64/docker-compose.yml down +``` + +如果已经启动过旧版本 SSH Server,修改端口或初始化脚本后需要重建容器: + +```bash +docker compose -f tests/dbs/dbs_x86/docker-compose.yml up -d --force-recreate ssh_server +``` + +## 数据源连接信息 + +宿主机直连时使用 `127.0.0.1` 和对外端口。 + +| 服务 | 容器内服务名 | 宿主机端口 | 容器内端口 | 用户名 | 密码 | 备注 | +| --- | --- | ---: | ---: | --- | --- | --- | +| MySQL | `mysql` | 2330 | 3306 | root | 123456 | database: `devtester` | +| Oracle | `oracle` | 2521 | 1521 | devtester | 123456 | service: `DEVTESTDB` | +| PostgreSQL | `postgres` | 2543 | 5432 | postgres | 123456 | database: `postgres` | +| Redis | `redis` | 2639 | 6379 | - | 123456 | `requirepass` | +| MongoDB | `mongo` | 2701 | 27017 | root | 123456 | admin 用户 | +| SQL Server | `mssql` | 2143 | 1433 | sa | Share123456! | 仅 x86 compose | +| DB2 | `db2` | 2500 | 50000 | db2inst1 | 123456 | 仅 x86 compose,database: `devtesterdb` | +| ClickHouse HTTP | `clickhouse` | 2812 | 8123 | root | password123 | database: `default` | +| ClickHouse Native | `clickhouse` | 2900 | 9000 | root | password123 | database: `default` | + +通过 SSH 通道访问这些数据源时,数据源 Host 使用 compose 服务名,例如 `mysql`、`postgres`、`oracle`,端口使用容器内端口。不要把数据源 Host 写成 `127.0.0.1`,因为在 SSH 转发场景下它表示 SSH Server 容器自身。 + +## SSH Server + +SSH Server 用于验证密码、私钥、私钥加密码短语,以及 SSH 端口转发。 + +| 配置项 | 值 | +| --- | --- | +| 宿主机 Host | `127.0.0.1` | +| 宿主机 Port | `2022` | +| 容器服务名 | `ssh_server` | +| 容器内 Port | `22` | +| 用户名 | `sshuser` | +| 密码 | `123456` | +| 私钥 | `ssh/id_rsa` | +| 带密码短语私钥 | `ssh/id_rsa_passphrase` | +| 密码短语 | `passphrase123` | + +本地命令验证: + +```bash +ssh -p 2022 sshuser@127.0.0.1 +ssh -i tests/dbs/ssh/id_rsa -p 2022 sshuser@127.0.0.1 +ssh -i tests/dbs/ssh/id_rsa_passphrase -p 2022 sshuser@127.0.0.1 +``` + +SSH Server 已通过 `tests/dbs/ssh/10-enable-tcp-forwarding.sh` 设置 `Port 22` 和 `AllowTcpForwarding yes`,可以验证端口转发: + +```bash +ssh -N -L 13306:mysql:3306 -p 2022 sshuser@127.0.0.1 +mysql -h 127.0.0.1 -P 13306 -uroot -p123456 +``` + +这里 `mysql:3306` 是 SSH Server 容器所在 compose 网络内的目标地址。 + +## CloudDM SSH 通道配置示例 + +密码方式: + +| 配置项 | 值 | +| --- | --- | +| SSH Host | `127.0.0.1` | +| SSH Port | `2022` | +| 用户名 | `sshuser` | +| 认证方式 | 密码 | +| 密码 | `123456` | +| 代理 | 无代理 | + +私钥方式: + +| 配置项 | 值 | +| --- | --- | +| SSH Host | `127.0.0.1` | +| SSH Port | `2022` | +| 用户名 | `sshuser` | +| 认证方式 | 密钥对 | +| 私钥Key | `tests/dbs/ssh/id_rsa` 的私钥内容 | +| 密码短语 | 留空 | + +私钥加密码短语方式: + +| 配置项 | 值 | +| --- | --- | +| SSH Host | `127.0.0.1` | +| SSH Port | `2022` | +| 用户名 | `sshuser` | +| 认证方式 | 密钥对 | +| 私钥Key | `tests/dbs/ssh/id_rsa_passphrase` 的私钥内容 | +| 密码短语 | `passphrase123` | + +使用 SSH 通道访问 MySQL 时,数据源配置为: + +| 配置项 | 值 | +| --- | --- | +| 数据源 Host | `mysql` | +| 数据源 Port | `3306` | +| 用户名 | `root` | +| 密码 | `123456` | +| Database | `devtester` | + +## 代理服务 + +代理服务使用 `3proxy/3proxy:latest` 镜像,配置文件挂载到 `/etc/3proxy/3proxy.cfg`。当前提供两组代理服务:`proxy` 无认证,`proxy_auth` 使用账号密码认证。 + +| 服务 | 认证 | 代理类型 | 宿主机地址 | 容器网络地址 | 用户名 | 密码 | +| --- | --- | --- | --- | --- | --- | --- | +| `proxy` | 无 | HTTP | `127.0.0.1:2080` | `proxy:3128` | - | - | +| `proxy` | 无 | SOCKS4/SOCKS5 | `127.0.0.1:2085` | `proxy:1080` | - | - | +| `proxy_auth` | 账号密码 | HTTP | `127.0.0.1:2081` | `proxy_auth:3128` | proxyuser | 123456 | +| `proxy_auth` | 账号密码 | SOCKS5 | `127.0.0.1:2086` | `proxy_auth:1080` | proxyuser | 123456 | + +从宿主机上的 CloudDM/Sidecar 通过代理访问 SSH Server 时,CloudDM/Sidecar 先连接宿主机暴露的代理端口,再由代理容器连接 SSH Server。链路是 `127.0.0.1:2080/2085 -> ssh_server:22 -> 数据源服务名:容器内端口`。为了明确验证是否经过代理,SSH Host 使用容器网络内的 SSH 服务地址: + +| 配置项 | 值 | +| --- | --- | +| SSH Host | `ssh_server` | +| SSH Port | `22` | +| 代理类型 | HTTP、SOCKS4 或 SOCKS5 | +| 代理主机 | `127.0.0.1` | +| 代理端口 | 无认证:HTTP 使用 `2080`,SOCKS4/SOCKS5 使用 `2085`;账号密码认证:HTTP 使用 `2081`,SOCKS5 使用 `2086` | +| 代理认证 | 按上表选择无认证或账号密码 | + +### 通过代理和 SSH 访问 MySQL + +该例子用于验证完整链路:`CloudDM/Sidecar -> proxy:1080 -> ssh_server:22 -> mysql:3306`。 + +SSH 通道配置: + +| 配置项 | 值 | +| --- | --- | +| SSH Host | `ssh_server` | +| SSH Port | `22` | +| 用户名 | `sshuser` | +| 认证方式 | 密码 | +| 密码 | `123456` | +| 代理类型 | SOCKS5 | +| 代理主机 | `127.0.0.1` | +| 代理端口 | `2085` | +| 代理认证 | 无 | + +数据源配置: + +| 配置项 | 值 | +| --- | --- | +| 数据源 Host | `mysql` | +| 数据源 Port | `3306` | +| 用户名 | `root` | +| 密码 | `123456` | +| Database | `devtester` | + +如果要验证带账号密码的代理,只需要把代理配置改为: + +| 配置项 | 值 | +| --- | --- | +| 代理类型 | SOCKS5 | +| 代理主机 | `127.0.0.1` | +| 代理端口 | `2086` | +| 代理认证 | 账号密码 | +| 代理用户名 | `proxyuser` | +| 代理密码 | `123456` | diff --git a/tests/dbs/dbs_arm64/docker-compose.yml b/tests/dbs/dbs_arm64/docker-compose.yml new file mode 100644 index 000000000..943810813 --- /dev/null +++ b/tests/dbs/dbs_arm64/docker-compose.yml @@ -0,0 +1,138 @@ +services: + mysql: + image: arm64v8/mysql:8.4 + environment: + - MYSQL_DATABASE=devtester + - MYSQL_ROOT_PASSWORD=123456 + - TZ=Asia/Shanghai + ports: + - 2330:3306 + restart: always + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone='+8:00' + # User/Password: root/123456 + + oracle: + image: gvenzl/oracle-free:23-slim + environment: + - ORACLE_PASSWORD=123456 + - ORACLE_DATABASE=DEVTESTDB + - APP_USER=devtester + - APP_USER_PASSWORD=123456 + ports: + - 2521:1521 + restart: always + entrypoint: + - bash + - -c + - | + cat > /container-entrypoint-initdb.d/01-init.sql <<'SQL' + GRANT CREATE MATERIALIZED VIEW TO devtester; + GRANT CREATE SYNONYM TO devtester; + GRANT CREATE TYPE TO devtester; + GRANT CREATE DATABASE LINK TO devtester; + SQL + exec container-entrypoint.sh + healthcheck: + test: ["CMD", "healthcheck.sh"] + interval: 30s + timeout: 10s + retries: 10 + start_period: 120s + deploy: + resources: + limits: + memory: 2g + # SYS/SYSTEM Password: 123456 + # App User/Password: devtester/123456 + # PDB Service: DEVTESTDB + # JDBC URL: jdbc:oracle:thin:@localhost:2521/DEVTESTDB + + postgres: + image: postgres:16 + environment: + - POSTGRES_DB=postgres + - POSTGRES_PASSWORD=123456 + ports: + - 2543:5432 + restart: always + # User/Password: postgres/123456 + + redis: + image: redis:7.2.3 + privileged: true + ports: + - 2639:6379 + restart: always + command: redis-server --requirepass 123456 + # Password: 123456 + + mongo: + image: mongo:6.0 + environment: + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=123456 + ports: + - 2701:27017 + restart: always + # User/Password: root/123456 + + clickhouse: + image: clickhouse/clickhouse-server + environment: + - CLICKHOUSE_DB=default + - CLICKHOUSE_USER=root + - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 + - TZ=Asia/Shanghai + - CLICKHOUSE_PASSWORD=password123 + ports: + - 2812:8123 + - 2900:9000 + restart: always + # User/Password: root/password123 + + ssh_server: + image: lscr.io/linuxserver/openssh-server:latest + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - USER_NAME=sshuser + - USER_PASSWORD=123456 + - PASSWORD_ACCESS=true + - PUBLIC_KEY_FILE=/ssh-keys/authorized_keys + volumes: + - ../ssh:/ssh-keys:ro + - ../ssh/10-enable-tcp-forwarding.sh:/custom-cont-init.d/10-enable-tcp-forwarding.sh:ro + ports: + - 2022:22 + restart: always + # Password auth: sshuser/123456 + # Private key auth: ../ssh/id_rsa + # Private key + passphrase auth: ../ssh/id_rsa_passphrase, passphrase: passphrase123 + + proxy: + image: 3proxy/3proxy:latest + volumes: + - ../proxy:/etc/3proxy:ro + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 2080:3128 + - 2085:1080 + restart: always + # HTTP proxy: 127.0.0.1:2080 + # SOCKS4/SOCKS5 proxy: 127.0.0.1:2085 + + proxy_auth: + image: 3proxy/3proxy:latest + volumes: + - ../proxy-auth:/etc/3proxy:ro + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 2081:3128 + - 2086:1080 + restart: always + # HTTP proxy: 127.0.0.1:2081 + # SOCKS5 proxy: 127.0.0.1:2086 + # User/Password: proxyuser/123456 diff --git a/tests/dbs/dbs_x86/docker-compose.yml b/tests/dbs/dbs_x86/docker-compose.yml new file mode 100644 index 000000000..ea7156750 --- /dev/null +++ b/tests/dbs/dbs_x86/docker-compose.yml @@ -0,0 +1,160 @@ +services: + mysql: + image: mysql:8.0.22 + environment: + - MYSQL_DATABASE=devtester + - MYSQL_ROOT_PASSWORD=123456 + - TZ=Asia/Shanghai + ports: + - 2330:3306 + restart: always + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --default-time_zone='+8:00' + # User/Password: root/123456 + + oracle: + image: gvenzl/oracle-xe:21-slim + environment: + - ORACLE_PASSWORD=123456 + - ORACLE_DATABASE=DEVTESTDB + - APP_USER=devtester + - APP_USER_PASSWORD=123456 + ports: + - 2521:1521 + restart: always + entrypoint: + - bash + - -c + - | + cat > /container-entrypoint-initdb.d/01-init.sql <<'SQL' + GRANT CREATE MATERIALIZED VIEW TO devtester; + GRANT CREATE SYNONYM TO devtester; + GRANT CREATE TYPE TO devtester; + GRANT CREATE DATABASE LINK TO devtester; + SQL + exec container-entrypoint.sh + healthcheck: + test: ["CMD", "healthcheck.sh"] + interval: 30s + timeout: 10s + retries: 10 + start_period: 120s + deploy: + resources: + limits: + memory: 2g + # SYS/SYSTEM Password: 123456 + # App User/Password: devtester/123456 + # PDB Service: DEVTESTDB + # JDBC URL: jdbc:oracle:thin:@localhost:2521/DEVTESTDB + + postgres: + image: postgres:16 + environment: + - POSTGRES_DB=postgres + - POSTGRES_PASSWORD=123456 + ports: + - 2543:5432 + restart: always + # User/Password: postgres/123456 + + redis: + image: redis:7.2.3 + privileged: true + ports: + - 2639:6379 + restart: always + command: redis-server --requirepass 123456 + # Password: 123456 + + mongo: + image: mongo:6.0 + environment: + - MONGO_INITDB_ROOT_USERNAME=root + - MONGO_INITDB_ROOT_PASSWORD=123456 + ports: + - 2701:27017 + restart: always + # User/Password: root/123456 + + mssql: + image: mcr.microsoft.com/mssql/server:2017-latest + environment: + - SA_PASSWORD=Share123456! + - ACCEPT_EULA=Y + ports: + - 2143:1433 + restart: always + # User/Password: sa/Share123456! + + db2: + image: ibmcom/db2 + environment: + - DB2INST1_PASSWORD=123456 + - DBNAME=devtesterdb + - LICENSE=accept + ports: + - 2500:50000 + privileged: true + restart: always + # User/Password: db2inst1/123456 + + clickhouse: + image: clickhouse/clickhouse-server + environment: + - CLICKHOUSE_DB=default + - CLICKHOUSE_USER=root + - CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT=1 + - TZ=Asia/Shanghai + - CLICKHOUSE_PASSWORD=password123 + ports: + - 2812:8123 + - 2900:9000 + restart: always + # User/Password: root/password123 + + ssh_server: + image: lscr.io/linuxserver/openssh-server:latest + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - USER_NAME=sshuser + - USER_PASSWORD=123456 + - PASSWORD_ACCESS=true + - PUBLIC_KEY_FILE=/ssh-keys/authorized_keys + volumes: + - ../ssh:/ssh-keys:ro + - ../ssh/10-enable-tcp-forwarding.sh:/custom-cont-init.d/10-enable-tcp-forwarding.sh:ro + ports: + - 2022:22 + restart: always + # Password auth: sshuser/123456 + # Private key auth: ../ssh/id_rsa + # Private key + passphrase auth: ../ssh/id_rsa_passphrase, passphrase: passphrase123 + + proxy: + image: 3proxy/3proxy:latest + volumes: + - ../proxy:/etc/3proxy:ro + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 2080:3128 + - 2085:1080 + restart: always + # HTTP proxy: 127.0.0.1:2080 + # SOCKS4/SOCKS5 proxy: 127.0.0.1:2085 + + proxy_auth: + image: 3proxy/3proxy:latest + volumes: + - ../proxy-auth:/etc/3proxy:ro + extra_hosts: + - host.docker.internal:host-gateway + ports: + - 2081:3128 + - 2086:1080 + restart: always + # HTTP proxy: 127.0.0.1:2081 + # SOCKS5 proxy: 127.0.0.1:2086 + # User/Password: proxyuser/123456 diff --git a/tests/dbs/proxy-auth/3proxy.cfg b/tests/dbs/proxy-auth/3proxy.cfg new file mode 100644 index 000000000..b482dd55c --- /dev/null +++ b/tests/dbs/proxy-auth/3proxy.cfg @@ -0,0 +1,12 @@ +nscache 65536 +timeouts 1 5 30 60 180 1800 15 60 + +log +logformat "L%t %. %N.%p %E %U %C:%c %R:%r %O %I %h %T" + +users proxyuser:CL:123456 +auth strong +allow proxyuser + +proxy -p3128 +socks -p1080 diff --git a/tests/dbs/proxy/3proxy.cfg b/tests/dbs/proxy/3proxy.cfg new file mode 100644 index 000000000..3c4b8e7b2 --- /dev/null +++ b/tests/dbs/proxy/3proxy.cfg @@ -0,0 +1,11 @@ +nscache 65536 +timeouts 1 5 30 60 180 1800 15 60 + +log +logformat "L%t %. %N.%p %E %U %C:%c %R:%r %O %I %h %T" + +auth none +allow * + +proxy -p3128 +socks -p1080 diff --git a/tests/dbs/ssh/10-enable-tcp-forwarding.sh b/tests/dbs/ssh/10-enable-tcp-forwarding.sh new file mode 100755 index 000000000..13d12d34b --- /dev/null +++ b/tests/dbs/ssh/10-enable-tcp-forwarding.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env sh +set -eu + +SSHD_CONFIG=/config/sshd/sshd_config + +if grep -q '^Port ' "$SSHD_CONFIG"; then + sed -i 's/^Port .*/Port 22/' "$SSHD_CONFIG" +else + printf '\nPort 22\n' >> "$SSHD_CONFIG" +fi + +if grep -q '^AllowTcpForwarding ' "$SSHD_CONFIG"; then + sed -i 's/^AllowTcpForwarding .*/AllowTcpForwarding yes/' "$SSHD_CONFIG" +else + printf '\nAllowTcpForwarding yes\n' >> "$SSHD_CONFIG" +fi diff --git a/tests/dbs/ssh/authorized_keys b/tests/dbs/ssh/authorized_keys new file mode 100644 index 000000000..70b1bdf4a --- /dev/null +++ b/tests/dbs/ssh/authorized_keys @@ -0,0 +1,2 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcT8KcyC9HPR+nwjd8c2aiLpUzy/F6ac0SxczEkwSuQmGBvs0KmiiOu/W2c4sTHyRGyZy3Yq0CWa/5TRD0H1ifFlaE3oSyE4bpqXOHSpOKRN0Ty0dIF2VePLr/r4smQgJ6haw+g3b57DUyX/mT8fnfoT9r86kKVnw+NauyOEVGOcfpmDpdQZBz8yrCWjGPJfhbQ9tne3SxXvoypab9adP53NbY502ralHPhgvNBoyMKQi4tohmcQTQ0sFhtbqaJdVO7R1oMUhdI40GYf5ED9WlsspJqhofuLvgnCnQGs5zCXihVuWi3QUt2OseuUlHZhXenI21bYFikmxL+AWSH/0H clouddm-ssh-test-key +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjT1oICVuq7t0uJc4AOQe59xMJfPEY/VdWsQc7GgivAN5juDM4ThTO81Dw/sm4S0APIsEHa5kxk3NJxI23cBbuPOE675s8t/w0nt5toKicV1g4y/HmoDg8I9tmjgggFr9fyxcYPTuofnoXKjCE5HfNxnqC+RdZDJ1szmlr8tEs+G66MyiKh89yK1OGBnCY9aGJClTTAvfKN5b+1Gr8h3d8mhiyih1D0BgZaCidgCMZY+D8P8c7CBbRyDOd/dJl5o29OpoCgYftD06AnO9u5fO2a+hM8n8XIO6NeWRDugFYZWPuO4IpH/2yvpuXs/QZHskv5NaWzMTy+i71AXqiQh0N clouddm-ssh-test-passphrase-key diff --git a/tests/dbs/ssh/id_rsa b/tests/dbs/ssh/id_rsa new file mode 100644 index 000000000..929ff5923 --- /dev/null +++ b/tests/dbs/ssh/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABFwAAAAdzc2gtcn +NhAAAAAwEAAQAAAQEAnE/CnMgvRz0fp8I3fHNmoi6VM8vxemnNEsXMxJMErkJhgb7NCpoo +jrv1tnOLEx8kRsmct2KtAlmv+U0Q9B9YnxZWhN6EshOG6alzh0qTikTdE8tHSBdlXjy6/6 ++LJkICeoWsPoN2+ew1Ml/5k/H536E/a/OpClZ8PjWrsjhFRjnH6Zg6XUGQc/MqwloxjyX4 +W0PbZ3t0sV76MqWm/WnT+dzW2OdNq2pRz4YLzQaMjCkIuLaIZnEE0NLBYbW6miXVTu0daD +FIXSONBmH+RA/VpbLKSaoaH7i74Jwp0BrOcwl4oVblot0FLdjrHrlJR2YV3pyNtW2BYpJs +S/gFkh/9BwAAA9DmVhgx5lYYMQAAAAdzc2gtcnNhAAABAQCcT8KcyC9HPR+nwjd8c2aiLp +Uzy/F6ac0SxczEkwSuQmGBvs0KmiiOu/W2c4sTHyRGyZy3Yq0CWa/5TRD0H1ifFlaE3oSy +E4bpqXOHSpOKRN0Ty0dIF2VePLr/r4smQgJ6haw+g3b57DUyX/mT8fnfoT9r86kKVnw+Na +uyOEVGOcfpmDpdQZBz8yrCWjGPJfhbQ9tne3SxXvoypab9adP53NbY502ralHPhgvNBoyM +KQi4tohmcQTQ0sFhtbqaJdVO7R1oMUhdI40GYf5ED9WlsspJqhofuLvgnCnQGs5zCXihVu +Wi3QUt2OseuUlHZhXenI21bYFikmxL+AWSH/0HAAAAAwEAAQAAAQBB2n6Qo+v7NN6xxCqx +NUMvn7V/SXQ2UP2zY38F8DSAH/pJebOTvGfK3phB4kLc7vlPE2CBiEKAY322Z8f1OYGSII +yZ1M+N4JkttxSzknE/Rwzm6nThA+5Sef6EexYCK7w0lz1+Zs+IsoGk8/dHY6IUm7AHEHQO +pWoZoW3xGzDgSQ0/7pHE45kOsmkFoVwu0I2l1kmpmLbD2EbN8b5oVujmUUkFupZ4QT/U+d +4K1snd46+dvTcPTkFZTKMOpA3Wz4k8jTHQcXuRQzInLmSzH8S5YUlUrDqAlTpU0SHoYLQx +LZhKmhxMTskjP2UNxzeThBmvCB0Ixd2ZSEElIe8E8a4tAAAAgQC0wGhCOozmK6ODtftGG4 +DVAEPrfm8oAXxeN9w3wQ9O3S3KI8lXW4RZvarCEuEl7uDvKOlroBToCfYUemVPsz9YvzFg +wtY+ff1ZF+wbVMVaRx6Fjz5mLgOBi60MSXkq0hx8Dq88zcX4oRKOsWQT00pH4yNN7uYbI9 +gCkd4ehMe+VgAAAIEA3EuQs1SN0QpWFnsdN7DZcMJomMWKFXuBH+JXnqpB5U0yG9WL+cjv +pWsCnrtkYVDayclAoOCJAFyXHQTyvD5E4UKctsawr2xFeguEQ87WbZOeRvuBWySmGegBqK ++0xfEtiefEzDch/NXMYeo2NCLekmTKIKmKtrrqhH74HG+fJ10AAACBALWlZvXqj4XsqElt +vsYx3lIC9GafTmEEk8A6312CUHGB2j2qw2qEyQdkwwo5fXIkGQaEWDjz6LmqunMaaCJp50 +3YUqjrJ7CQMTco562aM1up3VbCWA7+acP8AuJ3gaTkSneMKtzsQFkiPoSDEK3DoxTe9NZ3 +3wrXqrOcVMBOsOOzAAAAFGNsb3VkZG0tc3NoLXRlc3Qta2V5AQIDBAUG +-----END OPENSSH PRIVATE KEY----- diff --git a/tests/dbs/ssh/id_rsa.pub b/tests/dbs/ssh/id_rsa.pub new file mode 100644 index 000000000..51ff06cb6 --- /dev/null +++ b/tests/dbs/ssh/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCcT8KcyC9HPR+nwjd8c2aiLpUzy/F6ac0SxczEkwSuQmGBvs0KmiiOu/W2c4sTHyRGyZy3Yq0CWa/5TRD0H1ifFlaE3oSyE4bpqXOHSpOKRN0Ty0dIF2VePLr/r4smQgJ6haw+g3b57DUyX/mT8fnfoT9r86kKVnw+NauyOEVGOcfpmDpdQZBz8yrCWjGPJfhbQ9tne3SxXvoypab9adP53NbY502ralHPhgvNBoyMKQi4tohmcQTQ0sFhtbqaJdVO7R1oMUhdI40GYf5ED9WlsspJqhofuLvgnCnQGs5zCXihVuWi3QUt2OseuUlHZhXenI21bYFikmxL+AWSH/0H clouddm-ssh-test-key diff --git a/tests/dbs/ssh/id_rsa_passphrase b/tests/dbs/ssh/id_rsa_passphrase new file mode 100644 index 000000000..fe4f13f05 --- /dev/null +++ b/tests/dbs/ssh/id_rsa_passphrase @@ -0,0 +1,28 @@ +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABCAdHyAfE +/bZXnzc3h9YNeuAAAAGAAAAAEAAAEXAAAAB3NzaC1yc2EAAAADAQABAAABAQDjT1oICVuq +7t0uJc4AOQe59xMJfPEY/VdWsQc7GgivAN5juDM4ThTO81Dw/sm4S0APIsEHa5kxk3NJxI +23cBbuPOE675s8t/w0nt5toKicV1g4y/HmoDg8I9tmjgggFr9fyxcYPTuofnoXKjCE5HfN +xnqC+RdZDJ1szmlr8tEs+G66MyiKh89yK1OGBnCY9aGJClTTAvfKN5b+1Gr8h3d8mhiyih +1D0BgZaCidgCMZY+D8P8c7CBbRyDOd/dJl5o29OpoCgYftD06AnO9u5fO2a+hM8n8XIO6N +eWRDugFYZWPuO4IpH/2yvpuXs/QZHskv5NaWzMTy+i71AXqiQh0NAAAD4MHWLHesT1j0Gh +CD4vSqsI34ufRGmEEJ1Yu0xHaWuIXPeKBzAwvXSdlTjbzzogiwxInoN2KtkxaDGv0ij5JZ +jepcDLxgw03ZKJifPYZ5aSSAWm5MYFdV/zpYSKYdk8F/KiL0QrpkasDNG+21hTPhvI84OS +lRiMAYhetp/oN0TUfZ8iTsRLreXLDQRj/73w273TsRJb8PwV75bc46cxNEaIV4YXNDNsVi +mnhcYanNtmGJcoR+e8IdrclgoTZACSu0IzLkbiD982XoQwZn/eKgnjQ69RmAsk5I7NLwAe +UehZBEd8SqPBXGi3iDhOPbE+j4TOvzGnFmOFdacR3+ucwYQsObU89zg5c7aeCB0OLA9zwS +pJ+1cfKGUGS4/hknbvd+KyBs38Hw23fV/vbximkMQCiObL5sEE0vMHPDpTVuFU5m4b2rjD +DOHMNKgSW5bws/vNaYvV2bCT9hqHvLrPnB5Rt8CzsXuGhyG7+QahtRKszv08ErC/e3YW9e +eKEIMkmMcSD92QithBLT94UQc1ycvqcPyWZX0JndDgwYPTuUwZ8QXyi4aYn7ujDG1OJe1U +/1ZOAIq9LxPRqBHoB+u6CGn8DLgVFFs78d4wz/R54kREIS2z01s6McH4wfvhy8JQ0AizQT +prrmMezBOtP4j9JpS1hwiXJpDMlJEHKvmlfOoMWuHsjtD2567tkbclIxYs7iEAYMWQePa3 +8iP1y9rqyqHwt6JvCCMmDtvkfZr7gOSfD3p72UMOaeZFpv/6ml8oxVZ8iGoDNQGeVzdw9Z +aQ3eNNIdVM8mTy+TPkjKSSUmShe871d6Os3GCK5uraKnYbUw4rSmZTAKPYb3ywpIX/RlpK +UpEVTJwbm2G4hkcalhIhZAHxgv7AoH1UXsiv2KZiYwWiOp/cqjGEOsoM4dsm1jkfL0iyWH +2F8H1EKrvOFJ1PzOSfa+qITuHH4PKdJpG2c7dNIBs6nIk0g/oaldYjZy88IQkmOoSNeak9 +qacBb3t6gUw+29NZYmcXlvbEICeYEx/MV9GfG5SwtuEo/NS/dyv+sAtY/3RY5ILoC79h0Q +dkc4GU9edc+27meGIjPsdMO0dmNob5f80cCm0EmBGfzVtiJVyyfpCnssPe9kEITI5LXS2x +CgY8vO/aGNh+dey2t/AZ29XDPveOnPlKgYbar2ScsG6M88m0BrNDvoAk2fBfiy9H1/bRwu +4srabEFlbT5nUQjrRE++s+V6i5+halekQ06UDAhDhnVUXpx9pqWKP/LlbwCgcZTwxTrRw+ +riPLl60HAXjtZQt+M8Q2+K49xWYNLTaBBnIZ0j6VIbQUIv7FXf +-----END OPENSSH PRIVATE KEY----- diff --git a/tests/dbs/ssh/id_rsa_passphrase.pub b/tests/dbs/ssh/id_rsa_passphrase.pub new file mode 100644 index 000000000..e64f2243e --- /dev/null +++ b/tests/dbs/ssh/id_rsa_passphrase.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDjT1oICVuq7t0uJc4AOQe59xMJfPEY/VdWsQc7GgivAN5juDM4ThTO81Dw/sm4S0APIsEHa5kxk3NJxI23cBbuPOE675s8t/w0nt5toKicV1g4y/HmoDg8I9tmjgggFr9fyxcYPTuofnoXKjCE5HfNxnqC+RdZDJ1szmlr8tEs+G66MyiKh89yK1OGBnCY9aGJClTTAvfKN5b+1Gr8h3d8mhiyih1D0BgZaCidgCMZY+D8P8c7CBbRyDOd/dJl5o29OpoCgYftD06AnO9u5fO2a+hM8n8XIO6NeWRDugFYZWPuO4IpH/2yvpuXs/QZHskv5NaWzMTy+i71AXqiQh0N clouddm-ssh-test-passphrase-key diff --git a/backend/tests/dlap/ReadMe b/tests/dlap/ReadMe similarity index 100% rename from backend/tests/dlap/ReadMe rename to tests/dlap/ReadMe diff --git a/backend/tests/dlap/docker-compose.yml b/tests/dlap/docker-compose.yml similarity index 100% rename from backend/tests/dlap/docker-compose.yml rename to tests/dlap/docker-compose.yml diff --git a/backend/tests/ds-test/build.gradle b/tests/ds-test/build.gradle similarity index 100% rename from backend/tests/ds-test/build.gradle rename to tests/ds-test/build.gradle diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/TestUtil.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/TestUtil.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/TestUtil.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/TestUtil.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/TestMetaServiceImpl.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/TestMetaServiceImpl.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/TestMetaServiceImpl.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/TestMetaServiceImpl.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/clickhouse/ChSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/doris/DrSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/notsupportschema/McSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/maxcompute/supportschema/McSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MySelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MySelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MySelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/mysql/MySelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/oracle/OraSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/postgres/PgSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrSelectColumnTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrSelectColumnTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrSelectColumnTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/family/starrocks/SrSelectColumnTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/adsmy/MyFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/greenplum/PgFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gs/PgFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/gsog/PgFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/ob4ora/OraFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4pg/PgFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/por4x/MyFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/selectdb/DrFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnComplexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnComplexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnComplexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnComplexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnExpressionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnExpressionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnExpressionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnExpressionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSelectInColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSelectInColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSelectInColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSelectInColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSimpleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSimpleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSimpleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnSimpleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/column/special/tidb/MyFamilyParseColumnWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/AbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/AbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/AbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/AbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/ChAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/ChAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/ChAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/ChAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/column/ChRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/delete/ChRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/insert/ChRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/query/ChRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/schema/ChRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/schema/ChRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/schema/ChRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/schema/ChRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/table/ChRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ch/update/ChRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/Db2AbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/Db2AbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/Db2AbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/Db2AbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/column/Db2RuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/constraint/Db2RuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/constraint/Db2RuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/constraint/Db2RuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/constraint/Db2RuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/delete/Db2RuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/insert/Db2RuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/query/Db2RuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/schema/Db2RuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/schema/Db2RuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/schema/Db2RuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/schema/Db2RuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/table/Db2RuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_db2/update/Db2RuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/DrAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/DrAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/DrAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/DrAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/column/DrRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/delete/DrRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/insert/DrRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/query/DrRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/schema/DrRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/schema/DrRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/schema/DrRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/schema/DrRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/table/DrRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_dr/update/DrRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/McAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/McAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/McAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/McAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/column/McRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/delete/McRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/insert/McRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/query/McRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/schema/McRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/schema/McRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/schema/McRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/schema/McRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/table/McRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mc/update/McRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/MongoAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/MongoAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/MongoAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/MongoAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/command/MongoRuleCommandCheckTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/command/MongoRuleCommandCheckTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/command/MongoRuleCommandCheckTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_mongo/command/MongoRuleCommandCheckTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/MsAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/MsAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/MsAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/MsAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/catalog/MsRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/catalog/MsRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/catalog/MsRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/catalog/MsRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/column/MsRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/constraint/MsRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/constraint/MsRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/constraint/MsRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/constraint/MsRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/delete/MsRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/insert/MsRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/query/MsRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/schema/MsRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/schema/MsRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/schema/MsRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/schema/MsRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/table/MsRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ms/update/MsRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/MyAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/MyAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/MyAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/MyAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/column/MyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/constraint/MyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/constraint/MyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/constraint/MyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/constraint/MyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/delete/MyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/insert/MyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/query/MyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/schema/MyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/schema/MyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/schema/MyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/schema/MyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/table/MyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_my/update/MyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/OraAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/OraAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/OraAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/OraAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/column/OraRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/constraint/OraRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/constraint/OraRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/constraint/OraRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/constraint/OraRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/delete/OraRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/insert/OraRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/query/OraRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/table/OraRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_ora/update/OraRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/PgAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/PgAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/PgAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/PgAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/catalog/PgRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/catalog/PgRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/catalog/PgRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/catalog/PgRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/column/PgRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/constraint/PgRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/constraint/PgRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/constraint/PgRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/constraint/PgRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/delete/PgRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/insert/PgRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/query/PgRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/schema/PgRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/schema/PgRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/schema/PgRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/schema/PgRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/table/PgRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_pg/update/PgRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/RedisAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/RedisAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/RedisAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/RedisAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/command/RedisRuleCommandCheckTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/command/RedisRuleCommandCheckTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/command/RedisRuleCommandCheckTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_redis/command/RedisRuleCommandCheckTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/SrAbstractRuleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/SrAbstractRuleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/SrAbstractRuleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/SrAbstractRuleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/column/SrRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/delete/SrRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/insert/SrRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/query/SrRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/schema/SrRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/schema/SrRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/schema/SrRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/schema/SrRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/table/SrRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/rdb/using_sr/update/SrRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/Ads4MyRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/Ads4MyRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/Ads4MyRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/Ads4MyRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ads4my/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/column/Db2FamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/constraint/Db2FamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/constraint/Db2FamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/constraint/Db2FamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/constraint/Db2FamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/delete/Db2FamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/insert/Db2FamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/query/Db2FamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/schema/Db2FamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/schema/Db2FamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/schema/Db2FamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/schema/Db2FamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/table/Db2FamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/db2/update/Db2FamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/GpRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/GpRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/GpRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/GpRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/column/PgFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/constraint/PgFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/constraint/PgFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/constraint/PgFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/constraint/PgFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/delete/PgFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/insert/PgFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/query/PgFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/schema/PgFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/schema/PgFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/schema/PgFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/schema/PgFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/table/PgFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/greenplum/update/PgFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/column/PgFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/constraint/PgFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/constraint/PgFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/constraint/PgFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/constraint/PgFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/delete/PgFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/insert/PgFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/query/PgFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/schema/PgFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/schema/PgFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/schema/PgFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/schema/PgFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/table/PgFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gs/update/PgFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/column/PgFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/constraint/PgFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/constraint/PgFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/constraint/PgFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/constraint/PgFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/delete/PgFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/insert/PgFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/query/PgFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/schema/PgFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/schema/PgFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/schema/PgFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/schema/PgFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/table/PgFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/gsog/update/PgFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/MarRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/MarRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/MarRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/MarRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mariadb/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/MyRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/MyRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/MyRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/MyRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/column/MyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/delete/MyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/schema/MyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/table/MyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/mysql/update/MyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/Ob4MyRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/Ob4MyRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/Ob4MyRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/Ob4MyRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4my/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/column/OraFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/constraint/OraFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/constraint/OraFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/constraint/OraFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/constraint/OraFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/delete/OraFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/insert/OraFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/query/OraFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/table/OraFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/ob4ora/update/OraFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/Por4MyRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/Por4MyRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/Por4MyRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/Por4MyRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4my/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/Por4pgRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/Por4pgRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/Por4pgRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/Por4pgRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/column/PgFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/constraint/PgFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/constraint/PgFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/constraint/PgFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/constraint/PgFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/delete/PgFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/insert/PgFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/query/PgFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/schema/PgFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/schema/PgFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/schema/PgFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/schema/PgFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/table/PgFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4pg/update/PgFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/Por4XRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/Por4XRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/Por4XRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/Por4XRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/por4x/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/PgRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/PgRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/PgRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/PgRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/catalog/PgFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/column/PgFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/constraint/PgFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/constraint/PgFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/constraint/PgFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/constraint/PgFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/delete/PgFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/insert/PgFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/query/PgFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/schema/PgFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/schema/PgFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/schema/PgFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/schema/PgFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/table/PgFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/postgresql/update/PgFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/redis/command/RedisFamilyRuleCommandCheckTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/redis/command/RedisFamilyRuleCommandCheckTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/redis/command/RedisFamilyRuleCommandCheckTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/redis/command/RedisFamilyRuleCommandCheckTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/column/DrFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/delete/DrFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/insert/DrFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/query/DrFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/schema/DrFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/schema/DrFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/schema/DrFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/schema/DrFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/table/DrFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/selectdb/update/DrFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/catalog/MsFamilyRuleCatalogNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/catalog/MsFamilyRuleCatalogNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/catalog/MsFamilyRuleCatalogNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/catalog/MsFamilyRuleCatalogNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/column/MsFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/constraint/MsFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/constraint/MsFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/constraint/MsFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/constraint/MsFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/delete/MsFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/insert/MsFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/query/MsFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/schema/MsFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/schema/MsFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/schema/MsFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/schema/MsFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/table/MsFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/sqlserver/update/MsFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/TiRuleNameNotInKeywordsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/TiRuleNameNotInKeywordsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/TiRuleNameNotInKeywordsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/TiRuleNameNotInKeywordsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAlertNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowCharacterSetAndCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAllowDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAutoTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAutoTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAutoTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnAutoTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnCreateNeedDefaultTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotAllowZerofillTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotAllowZerofillTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotAllowZerofillTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotAllowZerofillTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotNullTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotNullTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotNullTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnNotNullTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTypesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTypesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTypesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnTypesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnVarCharLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnVarCharLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnVarCharLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/column/MyFamilyRuleColumnVarCharLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/constraint/MyFamilyRuleConstraintAllowForeignTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/constraint/MyFamilyRuleConstraintAllowForeignTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/constraint/MyFamilyRuleConstraintAllowForeignTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/constraint/MyFamilyRuleConstraintAllowForeignTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowMultiTablesTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNeedLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNeedLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNeedLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNeedLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/delete/MyFamilyRuleDeleteNotAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/insert/MyFamilyRuleInsertRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowAsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowAsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowAsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowAsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowCrossInnerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowCrossInnerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowCrossInnerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowCrossInnerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowJoinTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowJoinTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowJoinTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowJoinTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowUnionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowUnionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowUnionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowUnionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/query/MyFamilyRuleQueryEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/schema/MyFamilyRuleSchemaNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCharacterSetTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCharacterSetTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCharacterSetTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCharacterSetTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCollateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCollateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCollateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableCollateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableEngineTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableEngineTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableEngineTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableEngineTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableMaxColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableMaxColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableMaxColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableMaxColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameCaseTypeTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameCaseTypeTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameCaseTypeTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameCaseTypeTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameLengthTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameLengthTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameLengthTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNameLengthTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedCommentTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedCommentTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedCommentTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedCommentTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedPrimaryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedPrimaryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedPrimaryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableNeedPrimaryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableRequireAutoIncrementTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableRequireAutoIncrementTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableRequireAutoIncrementTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableRequireAutoIncrementTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableUseConvertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableUseConvertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableUseConvertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/table/MyFamilyRuleTableUseConvertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowIgnoreTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowIgnoreTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowIgnoreTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowIgnoreTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowMultiTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowMultiTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowMultiTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowMultiTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowSubQueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowSubQueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowSubQueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowSubQueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowWithTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowWithTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowWithTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateAllowWithTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateEmptyWhereTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateEmptyWhereTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateEmptyWhereTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateEmptyWhereTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateLimitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateLimitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateLimitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateLimitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateRequireColumnsTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateRequireColumnsTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateRequireColumnsTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/rules/special/tidb/update/MyFamilyRuleUpdateRequireColumnsTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/clickhouse/ChSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/db2/Db2SecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrNoDomainTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrNoDomainTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrNoDomainTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrNoDomainTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CatalogTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CatalogTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CatalogTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4CatalogTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/doris/DrSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/McSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/notsupportschema/McSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mc/supportschema/McSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest1.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest1.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest1.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTest1.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mongo/MongoSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/mysql/MySqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecFuncAndProcCreateAndDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecFuncAndProcCreateAndDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecFuncAndProcCreateAndDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSecFuncAndProcCreateAndDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OraSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OracleSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OracleSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OracleSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/oracle/OracleSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/postgres/PgSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/redis/RedisSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/redis/RedisSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/redis/RedisSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/redis/RedisSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/sqlserver/MsSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/DrSecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/DrSecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/DrSecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/DrSecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrNoDomainTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrNoDomainTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrNoDomainTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrNoDomainTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4CatalogTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4CatalogTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4CatalogTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4CatalogTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSecDomainTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/family/starrocks/SrSqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/AdsMySqlTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/AdsMySqlTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/AdsMySqlTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/AdsMySqlTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/adsmy/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/greenplum/PgFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gs/PgFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/gsog/PgFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/hologres/PgFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/mariadb/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4QueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4QueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4QueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4QueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4my/ObSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4CallTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4CallTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4CallTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4CallTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecFuncAndProcCreateAndDropTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecFuncAndProcCreateAndDropTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecFuncAndProcCreateAndDropTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/ob4ora/OraFamilySecFuncAndProcCreateAndDropTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4my/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4CommonTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4CommonTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4CommonTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4CommonTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4Query2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4SchemaTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4SchemaTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4SchemaTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4SchemaTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4pg/PgFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/por4x/PoXSecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/redis/RedisDomainResolve4CommandTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/redis/RedisDomainResolve4CommandTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/redis/RedisDomainResolve4CommandTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/redis/RedisDomainResolve4CommandTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilyNoDomainTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilyNoDomainTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilyNoDomainTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilyNoDomainTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4CatalogTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4CatalogTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4CatalogTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4CatalogTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4OtherTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4OtherTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4OtherTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4OtherTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/selectdb/DrFamilySecDomainResolve4UserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4AdministratorUserAndRoleTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DatabaseTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DatabaseTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DatabaseTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DatabaseTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4Query1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4Query1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4Query1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4Query1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin1Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin1Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin1Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin1Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin2Test.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin2Test.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin2Test.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4QueryJoin2Test.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4UpdateTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4UpdateTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4UpdateTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/MyFamilySecDomainResolve4UpdateTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ColumnTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ColumnTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ColumnTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ColumnTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ConstraintTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ConstraintTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ConstraintTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ConstraintTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4DeleteTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4DeleteTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4DeleteTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4DeleteTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4IndexTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4IndexTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4IndexTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4IndexTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4InsertTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4InsertTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4InsertTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4InsertTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4QueryTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4QueryTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4QueryTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4QueryTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ShowTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ShowTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ShowTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4ShowTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4TableTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4TableTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4TableTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/secdomain/special/tidb/TiSecDomainResolve4TableTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/sensitive/SensitiveRuleTestCase.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/sensitive/SensitiveRuleTestCase.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/sensitive/SensitiveRuleTestCase.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/sensitive/SensitiveRuleTestCase.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/SplitTestSupport.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/SplitTestSupport.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/SplitTestSupport.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/SplitTestSupport.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/db2/Db2SplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/db2/Db2SplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/db2/Db2SplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/db2/Db2SplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/mysql/MySplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/mysql/MySplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/mysql/MySplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/mysql/MySplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/oracle/OraSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/oracle/OraSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/oracle/OraSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/oracle/OraSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/postgres/PgSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/postgres/PgSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/postgres/PgSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/postgres/PgSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/sqlserver/MsSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/sqlserver/MsSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/sqlserver/MsSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/family/sqlserver/MsSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/GpSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/GpSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/GpSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/GpSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/ObSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/ObSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/ObSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/ObSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/PorXSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/PorXSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/PorXSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/PorXSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/TiSplitTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/TiSplitTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/TiSplitTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/split/special/TiSplitTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyProcedureTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyProcedureTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyProcedureTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyProcedureTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyTriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyTriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyTriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyTriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/mysql/MyViewTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgFunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgFunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgFunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgFunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgProcedureTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgProcedureTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgProcedureTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgProcedureTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgTriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgTriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgTriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgTriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/family/postgres/PgViewTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/FunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/FunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/FunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/FunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ProcedureTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ProcedureTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ProcedureTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ProcedureTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/TriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/TriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/TriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/TriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/dameng/ViewTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/TriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/TriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/TriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/TriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/ViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/ViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/ViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/db2/ViewTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/TriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/TriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/TriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/TriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/ViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/ViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/ViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/hana/ViewTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/FunctionTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/FunctionTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/FunctionTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/FunctionTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ProcedureTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ProcedureTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ProcedureTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ProcedureTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/TriggerTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/TriggerTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/TriggerTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/TriggerTest.java diff --git a/backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ViewTest.java b/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ViewTest.java similarity index 100% rename from backend/tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ViewTest.java rename to tests/ds-test/src/test/java/com/clougence/clouddm/ds/template/special/oracle/ViewTest.java diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog1-default-table2.json b/tests/ds-test/src/test/resources/column-test/catalog1-default-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog1-default-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog1-default-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table1.json b/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table1.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table1.json rename to tests/ds-test/src/test/resources/column-test/catalog1-schema1-table1.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table2.json b/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog1-schema1-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog1-schema1-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table1.json b/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table1.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table1.json rename to tests/ds-test/src/test/resources/column-test/catalog1-schema2-table1.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table2.json b/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog1-schema2-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog1-schema2-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog2-default-table2.json b/tests/ds-test/src/test/resources/column-test/catalog2-default-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog2-default-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog2-default-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog2-schema1-table2.json b/tests/ds-test/src/test/resources/column-test/catalog2-schema1-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog2-schema1-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog2-schema1-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/catalog2-schema2-table2.json b/tests/ds-test/src/test/resources/column-test/catalog2-schema2-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/catalog2-schema2-table2.json rename to tests/ds-test/src/test/resources/column-test/catalog2-schema2-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/schema1-table1.json b/tests/ds-test/src/test/resources/column-test/schema1-table1.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/schema1-table1.json rename to tests/ds-test/src/test/resources/column-test/schema1-table1.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/schema1-table2.json b/tests/ds-test/src/test/resources/column-test/schema1-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/schema1-table2.json rename to tests/ds-test/src/test/resources/column-test/schema1-table2.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/schema2-table1.json b/tests/ds-test/src/test/resources/column-test/schema2-table1.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/schema2-table1.json rename to tests/ds-test/src/test/resources/column-test/schema2-table1.json diff --git a/backend/tests/ds-test/src/test/resources/column-test/schema2-table2.json b/tests/ds-test/src/test/resources/column-test/schema2-table2.json similarity index 100% rename from backend/tests/ds-test/src/test/resources/column-test/schema2-table2.json rename to tests/ds-test/src/test/resources/column-test/schema2-table2.json diff --git a/backend/tests/ds-test/src/test/resources/not-support/pg/wait_support.sql b/tests/ds-test/src/test/resources/not-support/pg/wait_support.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/not-support/pg/wait_support.sql rename to tests/ds-test/src/test/resources/not-support/pg/wait_support.sql diff --git a/backend/tests/ds-test/src/test/resources/not-support/sqlserver/userFeedback.sql b/tests/ds-test/src/test/resources/not-support/sqlserver/userFeedback.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/not-support/sqlserver/userFeedback.sql rename to tests/ds-test/src/test/resources/not-support/sqlserver/userFeedback.sql diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/catalog/catalog-name-case-type.txt b/tests/ds-test/src/test/resources/rule-test/rdb/catalog/catalog-name-case-type.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/catalog/catalog-name-case-type.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/catalog/catalog-name-case-type.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-allow-drop.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-allow-drop.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-allow-drop.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-allow-drop.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-alter-need-default.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-alter-need-default.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-alter-need-default.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-alter-need-default.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-char-length.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-char-length.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-char-length.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-char-length.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-create-need-default.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-create-need-default.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-create-need-default.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-create-need-default.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-case-type.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-case-type.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-case-type.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-case-type.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-length.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-length.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-length.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-name-length.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-comment.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-comment.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-comment.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-comment.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-notnull.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-notnull.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-notnull.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-need-notnull.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-types.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-types.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-types.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-types.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-varchar-length.txt b/tests/ds-test/src/test/resources/rule-test/rdb/column/column-varchar-length.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/column/column-varchar-length.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/column/column-varchar-length.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/constraint/constraint-allow-foreign.txt b/tests/ds-test/src/test/resources/rule-test/rdb/constraint/constraint-allow-foreign.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/constraint/constraint-allow-foreign.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/constraint/constraint-allow-foreign.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-multi-tables.txt b/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-multi-tables.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-multi-tables.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-multi-tables.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-sub-query.txt b/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-sub-query.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-sub-query.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-sub-query.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-with.txt b/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-with.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-with.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-allow-with.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-empty-where.txt b/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-empty-where.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-empty-where.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/delete/delete-empty-where.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-ignore.txt b/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-ignore.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-ignore.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-ignore.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-query.txt b/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-query.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-query.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-query.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-with.txt b/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-with.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-with.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-allow-with.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-require-columns.txt b/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-require-columns.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-require-columns.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/insert/insert-require-columns.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-as.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-as.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-as.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-as.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-cross-inner.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-cross-inner.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-cross-inner.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-cross-inner.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-join.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-join.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-join.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-join.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-sub-query.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-sub-query.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-sub-query.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-sub-query.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-union.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-union.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-union.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-union.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-with.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-with.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-with.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-allow-with.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-empty-where.txt b/tests/ds-test/src/test/resources/rule-test/rdb/query/query-empty-where.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/query/query-empty-where.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/query/query-empty-where.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/schema/schema-name-case-type.txt b/tests/ds-test/src/test/resources/rule-test/rdb/schema/schema-name-case-type.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/schema/schema-name-case-type.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/schema/schema-name-case-type.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-max-columns.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-max-columns.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-max-columns.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-max-columns.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-case-type.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-case-type.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-case-type.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-case-type.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-length.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-length.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-length.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-name-length.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-columns.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-columns.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-columns.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-columns.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-comment.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-comment.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-comment.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-comment.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-primary.txt b/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-primary.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-primary.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/table/table-need-primary.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-multi.txt b/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-multi.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-multi.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-multi.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-sub-query.txt b/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-sub-query.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-sub-query.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-sub-query.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-with.txt b/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-with.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-with.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/update/update-allow-with.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-empty-where.txt b/tests/ds-test/src/test/resources/rule-test/rdb/update/update-empty-where.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-empty-where.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/update/update-empty-where.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-require-columns.txt b/tests/ds-test/src/test/resources/rule-test/rdb/update/update-require-columns.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/rdb/update/update-require-columns.txt rename to tests/ds-test/src/test/resources/rule-test/rdb/update/update-require-columns.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/ads4my/ads4my-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/ads4my/ads4my-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/ads4my/ads4my-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/ads4my/ads4my-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/greenplum/gp-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/greenplum/gp-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/greenplum/gp-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/greenplum/gp-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mariadb/mar-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/mariadb/mar-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mariadb/mar-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/mariadb/mar-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mongo/func-check.txt b/tests/ds-test/src/test/resources/rule-test/special/mongo/func-check.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mongo/func-check.txt rename to tests/ds-test/src/test/resources/rule-test/special/mongo/func-check.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-allow-characterset-and-collate.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-allow-characterset-and-collate.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-allow-characterset-and-collate.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-allow-characterset-and-collate.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-auto.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-auto.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-auto.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-auto.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-character-set.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-character-set.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-character-set.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-character-set.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-collate.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-collate.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-collate.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-collate.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-notallow-zerofill.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-notallow-zerofill.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-notallow-zerofill.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/column/column-notallow-zerofill.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-need-limit.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-need-limit.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-need-limit.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-need-limit.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-not-allow-ignore.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-not-allow-ignore.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-not-allow-ignore.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/delete/delete-not-allow-ignore.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/my-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/my-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/my-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/my-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-character-set.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-character-set.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-character-set.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-character-set.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-collate.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-collate.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-collate.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/schema/my-schema-collate.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-character-set.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-character-set.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-character-set.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-character-set.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-collate.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-collate.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-collate.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-collate.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-engine.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-engine.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-engine.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-engine.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-require-auto-increment.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-require-auto-increment.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-require-auto-increment.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-require-auto-increment.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-use-convert.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-use-convert.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-use-convert.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/table/table-use-convert.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-allow-ignore.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-allow-ignore.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-allow-ignore.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-allow-ignore.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-need-limit.txt b/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-need-limit.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-need-limit.txt rename to tests/ds-test/src/test/resources/rule-test/special/mysql/update/update-need-limit.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/ob4my/ob-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/ob4my/ob-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/ob4my/ob-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/ob4my/ob-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/por4my/por4my-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/por4my/por4my-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/por4my/por4my-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/por4my/por4my-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/por4pg/por4pg-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/por4pg/por4pg-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/por4pg/por4pg-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/por4pg/por4pg-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/por4x/por4x-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/por4x/por4x-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/por4x/por4x-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/por4x/por4x-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/postgresql/pg-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/postgresql/pg-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/postgresql/pg-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/postgresql/pg-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/redis/command-check.txt b/tests/ds-test/src/test/resources/rule-test/special/redis/command-check.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/redis/command-check.txt rename to tests/ds-test/src/test/resources/rule-test/special/redis/command-check.txt diff --git a/backend/tests/ds-test/src/test/resources/rule-test/special/tidb/ti-name-not-in-keywords.txt b/tests/ds-test/src/test/resources/rule-test/special/tidb/ti-name-not-in-keywords.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/rule-test/special/tidb/ti-name-not-in-keywords.txt rename to tests/ds-test/src/test/resources/rule-test/special/tidb/ti-name-not-in-keywords.txt diff --git a/backend/tests/ds-test/src/test/resources/sensitive-test/match-china-phone-sen.txt b/tests/ds-test/src/test/resources/sensitive-test/match-china-phone-sen.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sensitive-test/match-china-phone-sen.txt rename to tests/ds-test/src/test/resources/sensitive-test/match-china-phone-sen.txt diff --git a/backend/tests/ds-test/src/test/resources/sensitive-test/match-column-sen.txt b/tests/ds-test/src/test/resources/sensitive-test/match-column-sen.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sensitive-test/match-column-sen.txt rename to tests/ds-test/src/test/resources/sensitive-test/match-column-sen.txt diff --git a/backend/tests/ds-test/src/test/resources/sensitive-test/match-value-sen.txt b/tests/ds-test/src/test/resources/sensitive-test/match-value-sen.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sensitive-test/match-value-sen.txt rename to tests/ds-test/src/test/resources/sensitive-test/match-value-sen.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.sql b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.sql rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.txt b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.txt rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_15_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.sql b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.sql rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.txt b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.txt rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_17_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.sql b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.sql rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.txt b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.txt rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_18_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.sql b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.sql rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.txt b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.txt rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_19_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.sql b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.sql rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.txt b/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.txt rename to tests/ds-test/src/test/resources/sql-test/doris/2025_12_22_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/maxcompute/create_table.sql b/tests/ds-test/src/test/resources/sql-test/maxcompute/create_table.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/maxcompute/create_table.sql rename to tests/ds-test/src/test/resources/sql-test/maxcompute/create_table.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.sql b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.txt b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_10_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.sql b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.txt b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_12_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.sql b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.txt b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_15_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.sql b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.txt b/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/2025_12_16_ai.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.sql b/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.txt b/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/3_0_0_0_test.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/admin.sql b/tests/ds-test/src/test/resources/sql-test/mysql/admin.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/admin.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/admin.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/admin.txt b/tests/ds-test/src/test/resources/sql-test/mysql/admin.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/admin.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/admin.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.sql b/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.sql rename to tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.txt b/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.txt similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.txt rename to tests/ds-test/src/test/resources/sql-test/mysql/other_object_ddl.txt diff --git a/backend/tests/ds-test/src/test/resources/sql-test/oracle/2025_12_11_ai.sql b/tests/ds-test/src/test/resources/sql-test/oracle/2025_12_11_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/oracle/2025_12_11_ai.sql rename to tests/ds-test/src/test/resources/sql-test/oracle/2025_12_11_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/oracle/check_parser.sql b/tests/ds-test/src/test/resources/sql-test/oracle/check_parser.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/oracle/check_parser.sql rename to tests/ds-test/src/test/resources/sql-test/oracle/check_parser.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/oracle/skq.sql b/tests/ds-test/src/test/resources/sql-test/oracle/skq.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/oracle/skq.sql rename to tests/ds-test/src/test/resources/sql-test/oracle/skq.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/pg/2025_12_11_ai.sql b/tests/ds-test/src/test/resources/sql-test/pg/2025_12_11_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/pg/2025_12_11_ai.sql rename to tests/ds-test/src/test/resources/sql-test/pg/2025_12_11_ai.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/pg/test.sql b/tests/ds-test/src/test/resources/sql-test/pg/test.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/pg/test.sql rename to tests/ds-test/src/test/resources/sql-test/pg/test.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/sqlserver/3_0_0_0_test.sql b/tests/ds-test/src/test/resources/sql-test/sqlserver/3_0_0_0_test.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/sqlserver/3_0_0_0_test.sql rename to tests/ds-test/src/test/resources/sql-test/sqlserver/3_0_0_0_test.sql diff --git a/backend/tests/ds-test/src/test/resources/sql-test/starrocks/2025_12_12_ai.sql b/tests/ds-test/src/test/resources/sql-test/starrocks/2025_12_12_ai.sql similarity index 100% rename from backend/tests/ds-test/src/test/resources/sql-test/starrocks/2025_12_12_ai.sql rename to tests/ds-test/src/test/resources/sql-test/starrocks/2025_12_12_ai.sql