Quellcode durchsuchen

fix(benteler): handle DeleteUser success responses

malk vor 1 Woche
Ursprung
Commit
2fdd722722

+ 3 - 3
mjava/src/main/java/com/malk/service/eiam/impl/EiamClient_UserImpl.java

@@ -73,10 +73,10 @@ public class EiamClient_UserImpl implements EiamClient_User {
     @Override
     public EiamApiResponse deleteUser(String accessToken, String instanceId, String applicationId,
                                       String userId) {
-        String response = UtilHttp.doDelete(userUrl(instanceId, applicationId, userId),
+        UtilHttp.doDeleteStrict(userUrl(instanceId, applicationId, userId),
                 headers(accessToken), null, (Map) null);
-        // prd DeleteUser 成功时允许返回空响应体,HTTP 层未抛异常即视为删除成功。
-        return parseActionResponse(response);
+        // prd DeleteUser 成功响应体格式不固定,HTTP 层未抛异常即视为删除成功。
+        return new EiamApiResponse();
     }
 
     /**

+ 15 - 0
mjava/src/main/java/com/malk/utils/UtilHttp.java

@@ -223,6 +223,21 @@ public abstract class UtilHttp {
         return doRequest(METHOD.DELETE, url, header, param, body);
     }
 
+    /**
+     * 发起DELETE请求,并要求HTTP状态为2xx。
+     *
+     * @param url 请求地址
+     * @param header 请求头
+     * @param param 查询参数
+     * @param body JSON请求体
+     * @return 原始响应体
+     */
+    public static String doDeleteStrict(String url, Map header, Map<String, Object> param,
+                                        Map body) {
+        return doRequest(METHOD.DELETE, url, header, param, body, null,
+                null, null, true);
+    }
+
     public static VenR doDelete(String url, Map header, Map param, Class rClass) {
         String rsp = doDelete(url, header, param, (Map) null);
         VenR r = (VenR) JSON.parseObject(rsp, rClass);

+ 53 - 0
mjava/src/test/java/com/malk/service/eiam/impl/EiamClient_UserImplTest.java

@@ -8,6 +8,7 @@ import org.junit.Test;
 import org.springframework.test.util.ReflectionTestUtils;
 
 import java.net.InetSocketAddress;
+import java.nio.charset.StandardCharsets;
 import java.util.Collections;
 
 import static org.junit.Assert.assertEquals;
@@ -99,4 +100,56 @@ public class EiamClient_UserImplTest {
             server.stop(0);
         }
     }
+
+    @Test
+    public void deleteUser_plainTextResponse_returnsSuccessPayload() throws Exception {
+        HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
+        server.createContext("/v2/instance/application/users/user_test", exchange -> {
+            byte[] responseBody = "deleted".getBytes(StandardCharsets.UTF_8);
+            exchange.sendResponseHeaders(200, responseBody.length);
+            exchange.getResponseBody().write(responseBody);
+            exchange.close();
+        });
+        server.start();
+        try {
+            EiamConf conf = new EiamConf();
+            conf.setBaseUrl("http://127.0.0.1:" + server.getAddress().getPort());
+            EiamClient_UserImpl client = new EiamClient_UserImpl();
+            ReflectionTestUtils.setField(client, "eiamConf", conf);
+
+            EiamApiResponse response = client.deleteUser("token", "instance", "application",
+                    "user_test");
+
+            assertNull(response.getCode());
+        } finally {
+            server.stop(0);
+        }
+    }
+
+    @Test
+    public void deleteUser_errorStatus_throwsBusinessException() throws Exception {
+        HttpServer server = HttpServer.create(new InetSocketAddress(0), 0);
+        server.createContext("/v2/instance/application/users/user_test", exchange -> {
+            byte[] responseBody = "error".getBytes(StandardCharsets.UTF_8);
+            exchange.sendResponseHeaders(500, responseBody.length);
+            exchange.getResponseBody().write(responseBody);
+            exchange.close();
+        });
+        server.start();
+        try {
+            EiamConf conf = new EiamConf();
+            conf.setBaseUrl("http://127.0.0.1:" + server.getAddress().getPort());
+            EiamClient_UserImpl client = new EiamClient_UserImpl();
+            ReflectionTestUtils.setField(client, "eiamConf", conf);
+
+            try {
+                client.deleteUser("token", "instance", "application", "user_test");
+                fail("应拒绝非 2xx 删除响应");
+            } catch (McException ex) {
+                assertEquals("500", ex.getCode());
+            }
+        } finally {
+            server.stop(0);
+        }
+    }
 }