Преглед на файлове

feature: 测试类添加

mazq преди 1 година
родител
ревизия
cb6fa1097a

+ 24 - 0
dcuc-auth-service/pom.xml

@@ -170,6 +170,30 @@
             <version>3.5.4</version>
         </dependency>
 
+        <dependency>
+            <groupId>com.github.dreamhead</groupId>
+            <artifactId>moco-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.dreamhead</groupId>
+            <artifactId>moco-junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>it.ozimov</groupId>
+            <artifactId>embedded-redis</artifactId>
+            <scope>test</scope>
+            <exclusions>
+                <exclusion>
+                    <artifactId>slf4j-simple</artifactId>
+                    <groupId>org.slf4j</groupId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
         <!--配置第三方组件结束-->
     </dependencies>
     <packaging>${project.packaging}</packaging>

+ 207 - 0
dcuc-auth-service/src/test/java/com/dragoninfo/dcuc/auth/business/impl/zerotrust/TokenRemoteCallBusinessImplTest.java

@@ -0,0 +1,207 @@
+package com.dragoninfo.dcuc.auth.business.impl.zerotrust;
+
+import com.dragoninfo.dcuc.auth.config.zerotrust.DcucAuthZerotrustConfig;
+import com.dragoninfo.dcuc.auth.token.vo.AppTokenInfoRespVO;
+import com.dragoninfo.dcuc.auth.token.vo.UserTokenInfoRespVO;
+import com.dragoninfo.dcuc.common.http.SkipSslVerificationHttpRequestFactory;
+import com.dragonsoft.smtools.enums.SmTypeEunm;
+import com.dragonsoft.smtools.loader.SMFactory;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.github.dreamhead.moco.HttpServer;
+import com.github.dreamhead.moco.Runner;
+import lombok.SneakyThrows;
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Locale;
+
+import static com.github.dreamhead.moco.Moco.*;
+
+/**
+ * @author mazq
+ * @date 2023/7/14
+ */
+public class TokenRemoteCallBusinessImplTest {
+//    public static void main(String[] args) {
+////        try {
+////            TokenRemoteCallBusinessImplTest.before();
+////        } catch (Exception e) {
+////            e.printStackTrace();
+////        }
+////    }
+
+    public static Runner runner;
+
+
+    static String identityUrl = "http://127.0.0.1:19000";
+    static String appInfoUrl = "/idp/rest/getAppTokenInfo";
+    static String userInfoUrl = "/idp/rest/getUserTokenInfo";
+
+    static TokenRemoteCallBusinessImpl tokenRemoteCallBusiness;
+
+    @BeforeClass
+    public static void before() throws Exception {
+        HttpServer httpServer = httpServer(19000, log());
+
+        httpServer.request(by(uri(appInfoUrl)))
+                .response(pathResource("bim/getAppTokenInfo.json"));
+
+
+        httpServer.request(by(uri(userInfoUrl)))
+                .response(pathResource("bim/getUserTokenInfo.json"));
+
+
+        runner = Runner.runner(httpServer);
+
+        runner.start();
+
+        SkipSslVerificationHttpRequestFactory skipSslVerificationHttpRequestFactory
+                = new SkipSslVerificationHttpRequestFactory();
+        skipSslVerificationHttpRequestFactory.setReadTimeout(5000);
+        skipSslVerificationHttpRequestFactory.setConnectTimeout(5000);
+        RestTemplate restTemplate = new RestTemplate(skipSslVerificationHttpRequestFactory);
+        DcucAuthZerotrustConfig config = new DcucAuthZerotrustConfig();
+
+        String appTokenUrl = identityUrl + appInfoUrl;
+        String userTokenUrl = identityUrl + userInfoUrl;
+        config.setAppTokenQueryUrl(appTokenUrl);
+        config.setUserTokenQueryUrl(userTokenUrl);
+
+        ObjectMapper objectMapper = new ObjectMapper();
+        // 忽略不对应的字段
+        objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+
+        SMFactory smFactory = SMFactory.init(SmTypeEunm.Local);
+
+        tokenRemoteCallBusiness = new TokenRemoteCallBusinessImpl();
+        tokenRemoteCallBusiness.setRestTemplate(restTemplate);
+        tokenRemoteCallBusiness.setZerotrustConfig(config);
+        tokenRemoteCallBusiness.setObjectMapper(objectMapper);
+        tokenRemoteCallBusiness.setSmFactory(smFactory);
+    }
+
+    @AfterClass
+    public static void stop() {
+        runner.stop();
+    }
+
+    @Test
+    public void getUserTokenInfo() {
+        String appTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ";
+        UserTokenInfoRespVO userTokenInfo = tokenRemoteCallBusiness.getUserTokenInfo(appTokenId);
+
+        Assert.assertNotNull(userTokenInfo);
+        Assert.assertEquals("zhanpeng", userTokenInfo.getName());
+        Assert.assertEquals("zhanpeng", userTokenInfo.getPid());
+    }
+
+    @Test
+    public void getAppTokenInfo() {
+
+        String appTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ";
+        AppTokenInfoRespVO appTokenInfo = tokenRemoteCallBusiness.getAppTokenInfo(appTokenId);
+
+        Assert.assertNotNull(appTokenInfo);
+        Assert.assertEquals("demo1", appTokenInfo.getAppId());
+
+        Assert.assertEquals(appTokenId, appTokenInfo.getAppTokenId());
+        UserTokenInfoRespVO userToken = appTokenInfo.getUserToken();
+        String userTokenId = "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwODU4LCJleHAiOjE2ODk0MDI4NTgsInR5cGUiOiJ1c2VyIiwiSUQiOiJiM2ViMzNkMi1iMjQzLTRhZDgtODlmMS05MmQ3OWMxY2M1MTciLCJyZW1vdGVJcCI6IjEyNy4wLjAuMSIsInNlc3Npb25JZCI6IjYwMDM3YjdiZGI4YjU0NjFhYmJhZjkzYTljNWQ2YjUzIiwidWlkIjoiMjAyMjExMjkxNjExMjQyNzUtNTUwQi1DQ0E3QUQ0QTQiLCJvcmdhbml6YXRpb25Db2RlIjoiYmFtYm9vY2xvdWQiLCJkZXZPbmx5SWQiOiIiLCJlcXVpcG1lbnRUeXBlIjoicGMifQ.opQczo6NVMuafO2ruKCCpT1YdrsKLP2vlUnETyPR8Al-CijmIgqE0oW_BkOJaCP_UX-BYLLhoPBDFriI5IrLMg";
+
+        Assert.assertEquals(userTokenId, userToken.getUserTokenId());
+        Assert.assertEquals("", userToken.getMid());
+        Assert.assertEquals("362428199108047711", userToken.getPid());
+
+    }
+
+    @Test
+    public void checkUserTokenSign() {
+        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
+        stringObjectHashMap.put("userTokenId", "1111111111111111");
+        stringObjectHashMap.put("createTime", "2023-05-30 17:32:45");
+        stringObjectHashMap.put("expireAt", "2023-05-30 19:32:45");
+        stringObjectHashMap.put("pid", "test");
+        stringObjectHashMap.put("orgCode", "1111");
+        stringObjectHashMap.put("ip", "127.0.0.1");
+        stringObjectHashMap.put("mid", "2222");
+        stringObjectHashMap.put("env", "pc");
+        stringObjectHashMap.put("sign", "4023c48d904bb2f908d5be02c867d5bbc1fe8ec590f583c76f970d3feff309a7");
+
+        boolean checkUserTokenSign = tokenRemoteCallBusiness.checkUserTokenSign(stringObjectHashMap);
+        Assert.assertTrue(checkUserTokenSign);
+
+        stringObjectHashMap.put("env", "1222");
+        boolean checkUserTokenSign1 = tokenRemoteCallBusiness.checkUserTokenSign(stringObjectHashMap);
+        Assert.assertFalse(checkUserTokenSign1);
+
+    }
+
+    @Test
+    public void checkAppTokenSign() {
+        HashMap<String, Object> stringObjectHashMap = new HashMap<>();
+        stringObjectHashMap.put("appTokenId", "9999999999999999");
+        stringObjectHashMap.put("createTime", "2023-05-30 17:32:45");
+        stringObjectHashMap.put("expireAt", "2023-05-30 19:32:45");
+        stringObjectHashMap.put("appId", "demo");
+        stringObjectHashMap.put("userToken", "{createTime=2023-05-30 17:32:45, orgCode=1111, ip=127.0.0.1, name=test, " +
+                "mid=2222, pid=test, userTokenId=1111111111111111, expireAt=2023-05-30 19:32:45, env=pc}");
+        stringObjectHashMap.put("sign", "d5ff15ed7fed7fcd2d7c1bb826c2e6e44d58d6c2aaf134f8398259f5a58b62ee");
+
+        boolean checkUserTokenSign = tokenRemoteCallBusiness.checkAppTokenSign(stringObjectHashMap);
+        Assert.assertTrue(checkUserTokenSign);
+
+        stringObjectHashMap.put("appId", "1222");
+        boolean checkUserTokenSign1 = tokenRemoteCallBusiness.checkAppTokenSign(stringObjectHashMap);
+        Assert.assertFalse(checkUserTokenSign1);
+
+    }
+
+    @Test
+    public void generalAppTokenCheckUserTokenString() {
+        LinkedHashMap<String, Object> stringStringLinkedHashMap = new LinkedHashMap<>();
+        stringStringLinkedHashMap.put("createTime", "2023-05-30 17:32:45");
+        stringStringLinkedHashMap.put("orgCode", "1111");
+        stringStringLinkedHashMap.put("ip", "127.0.0.1");
+        stringStringLinkedHashMap.put("name", "test");
+        stringStringLinkedHashMap.put("mid", "2222");
+        stringStringLinkedHashMap.put("pid", "test");
+        stringStringLinkedHashMap.put("userTokenId", "1111111111111111");
+        stringStringLinkedHashMap.put("expireAt", "2023-05-30 19:32:45");
+        stringStringLinkedHashMap.put("env", "pc");
+
+        String checkUserTokenString = tokenRemoteCallBusiness.generalAppTokenCheckUserTokenString(stringStringLinkedHashMap);
+        String truString = "{createTime=2023-05-30 17:32:45, orgCode=1111, ip=127.0.0.1, name=test, mid=2222, pid=test, userTokenId=1111111111111111, expireAt=2023-05-30 19:32:45, env=pc}";
+        Assert.assertEquals(truString, checkUserTokenString);
+    }
+
+    @SneakyThrows
+    @Test
+    public void userTokenSign() {
+        String userTokenId = "userTokenId-1";
+        String createTime = "2023-07-14 00:00:00";
+        String expireAt = "2023-07-15 00:00:00";
+        String pid = "420321196906089886";
+        String orgCode = "440100000000";
+        String ip = "127.0.0.1";
+        String mid = "1";
+        String env = "pc";
+        SMFactory smFactory = SMFactory.init(SmTypeEunm.Local);
+        String origin = "userTokenId=" + userTokenId +
+                "&createTime=" + createTime + "&expireAt=" + expireAt + "&pid=" + pid + "&orgCode=" + orgCode
+                + "&ip=" + ip + "&mid=" + mid + "&env=" + env;
+        System.out.println("用户令牌校验签名签名原文:" + origin);
+
+        String generalSign = smFactory.getSM3().summary(origin).toString().toLowerCase(Locale.ROOT);
+
+        System.out.println("用户令牌签名值" + generalSign);
+
+
+
+    }
+}

+ 23 - 0
dcuc-auth-service/src/test/resources/bim/getAppTokenInfo.json

@@ -0,0 +1,23 @@
+{
+  "result": {
+    "userToken": {
+      "createTime": "2023-06-15 14:34:18",
+      "orgCode": "010000000000",
+      "ip": "127.0.0.1",
+      "name": "362428199108047711",
+      "sign": "83522b44abfd628093490c969fc7df1741f410e940c18c21e0f0b1594bf2a761",
+      "mid": "",
+      "pid": "362428199108047711",
+      "userTokenId": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwODU4LCJleHAiOjE2ODk0MDI4NTgsInR5cGUiOiJ1c2VyIiwiSUQiOiJiM2ViMzNkMi1iMjQzLTRhZDgtODlmMS05MmQ3OWMxY2M1MTciLCJyZW1vdGVJcCI6IjEyNy4wLjAuMSIsInNlc3Npb25JZCI6IjYwMDM3YjdiZGI4YjU0NjFhYmJhZjkzYTljNWQ2YjUzIiwidWlkIjoiMjAyMjExMjkxNjExMjQyNzUtNTUwQi1DQ0E3QUQ0QTQiLCJvcmdhbml6YXRpb25Db2RlIjoiYmFtYm9vY2xvdWQiLCJkZXZPbmx5SWQiOiIiLCJlcXVpcG1lbnRUeXBlIjoicGMifQ.opQczo6NVMuafO2ruKCCpT1YdrsKLP2vlUnETyPR8Al-CijmIgqE0oW_BkOJaCP_UX-BYLLhoPBDFriI5IrLMg",
+      "expireAt": "2023-06-15 16:36:41",
+      "env": "pc"
+    },
+    "appTokenId": "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwOTYzLCJleHAiOjE2ODk0MDI5NjMsInR5cGUiOiJhcHAiLCJJRCI6IjY0ZDBmY2RjLTAyMWMtNGM0My05ZWQxLThkYTgyYzJmYmY5ZiIsImFwcElkIjoiZGVtbzEiLCJ1aWQiOiIyMDIyMTEyOTE2MTEyNDI3NS01NTBCLUNDQTdBRDRBNCIsInVzZXJUb2tlbklkIjoiYjNlYjMzZDItYjI0My00YWQ4LTg5ZjEtOTJkNzljMWNjNTE3Iiwic2Vzc2lvbklkIjoiNjAwMzdiN2JkYjhiNTQ2MWFiYmFmOTNhOWM1ZDZiNTMifQ.C4QagXSAT5k4H9tDoZOS_4DypXIBNi4gZqB_AZQ40eEWhSQAHBTWEik86mxIuu4qCTBMBPJ28kjdXJEDCfgTMQ",
+    "createTime": "2023-06-15 14:36:03",
+    "appId": "demo1",
+    "sign": "3ef7d0c3d8529a0dbcf5137030fab517a8e60a1234ff74eb8a14340f2fb16c9d",
+    "expireAt": "2023-06-15 16:36:41"
+  },
+  "status_code": "0000",
+  "message": "操作成功"
+}

+ 17 - 0
dcuc-auth-service/src/test/resources/bim/getUserTokenInfo.json

@@ -0,0 +1,17 @@
+{
+  "result": {
+    "createTime": "2023-06-15 14:34:18",
+    "orgCode": "bamboocloud",
+    "ip": "127.0.0.1",
+    "name": "zhanpeng",
+    "sign":
+    "e60eef136f2b9aeaf160123f23cdc19d300e4bf70f61f085a78895ad36629d0f",
+    "mid": "",
+    "pid": "zhanpeng",
+    "userTokenId":
+    "eyJhbGciOiJIUzUxMiJ9.eyJpc3MiOiJCQyIsInN1YiI6InpoYW5wZW5nIiwiaWF0IjoxNjg2ODEwODU4LCJleHAiOjE2ODk0MDI4NTgsInR5cGUiOiJ1c2VyIiwiSUQiOiJiM2ViMzNkMi1iMjQzLTRhZDgtODlmMS05MmQ3OWMxY2M1MTciLCJyZW1vdGVJcCI6IjEyNy4wLjAuMSIsInNlc3Npb25JZCI6IjYwMDM3YjdiZGI4YjU0NjFhYmJhZjkzYTljNWQ2YjUzIiwidWlkIjoiMjAyMjExMjkxNjExMjQyNzUtNTUwQi1DQ0E3QUQ0QTQiLCJvcmdhbml6YXRpb25Db2RlIjoiYmFtYm9vY2xvdWQiLCJkZXZPbmx5SWQiOiIiLCJlcXVpcG1lbnRUeXBlIjoicGMifQ.opQczo6NVMuafO2ruKCCpT1YdrsKLP2vlUnETyPR8Al-CijmIgqE0oW_BkOJaCP_UX-BYLLhoPBDFriI5IrLMg", "expireAt": "2023-06-15 16:34:19",
+    "env": "pc"
+  },
+  "status_code": "0000",
+  "message": "操作成功"
+}

+ 23 - 0
pom.xml

@@ -24,6 +24,8 @@
         <mysql.version>5.1.49</mysql.version>
         <lombok.version>1.18.24</lombok.version>
         <sm.tools.version>1.2.1-SNAPSHOT</sm.tools.version>
+        <moco.version>0.12.0</moco.version>
+        <embedded.redis.version>0.7.3</embedded.redis.version>
     </properties>
 
     <dependencyManagement>
@@ -109,6 +111,27 @@
                 <artifactId>sm-tools-local</artifactId>
                 <version>${sm.tools.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>it.ozimov</groupId>
+                <artifactId>embedded-redis</artifactId>
+                <version>${embedded.redis.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>com.github.dreamhead</groupId>
+                <artifactId>moco-core</artifactId>
+                <version>${moco.version}</version>
+                <scope>test</scope>
+            </dependency>
+
+            <dependency>
+                <groupId>com.github.dreamhead</groupId>
+                <artifactId>moco-junit</artifactId>
+                <version>${moco.version}</version>
+                <scope>test</scope>
+            </dependency>
         </dependencies>
 
     </dependencyManagement>