ProxyControllerTest.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.tzld.supply.proxy.controller;
  2. import org.apache.http.HttpEntity;
  3. import org.apache.http.HttpResponse;
  4. import org.apache.http.StatusLine;
  5. import org.apache.http.client.HttpClient;
  6. import org.apache.http.client.methods.HttpPost;
  7. import org.apache.http.client.methods.HttpRequestBase;
  8. import org.apache.http.util.EntityUtils;
  9. import org.junit.jupiter.api.BeforeEach;
  10. import org.junit.jupiter.api.Test;
  11. import org.mockito.ArgumentCaptor;
  12. import org.springframework.http.MediaType;
  13. import org.springframework.test.web.servlet.MockMvc;
  14. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  15. import java.io.ByteArrayInputStream;
  16. import java.nio.charset.StandardCharsets;
  17. import static org.junit.jupiter.api.Assertions.assertEquals;
  18. import static org.mockito.ArgumentMatchers.any;
  19. import static org.mockito.Mockito.*;
  20. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
  21. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  22. public class ProxyControllerTest {
  23. private MockMvc mockMvc;
  24. private HttpClient httpClient;
  25. private ProxyController proxyController;
  26. @BeforeEach
  27. public void setup() {
  28. httpClient = mock(HttpClient.class);
  29. proxyController = new ProxyController(httpClient);
  30. mockMvc = MockMvcBuilders.standaloneSetup(proxyController).build();
  31. }
  32. @Test
  33. public void testProxyPostWithBodyEncoding() throws Exception {
  34. String body = "{\"name\":\"测试\"}";
  35. String targetUrl = "http://example.com/api";
  36. // Mock response
  37. HttpResponse response = mock(HttpResponse.class);
  38. StatusLine statusLine = mock(StatusLine.class);
  39. HttpEntity responseEntity = mock(HttpEntity.class);
  40. when(httpClient.execute(any(HttpRequestBase.class))).thenReturn(response);
  41. when(response.getStatusLine()).thenReturn(statusLine);
  42. when(statusLine.getStatusCode()).thenReturn(200);
  43. when(response.getEntity()).thenReturn(responseEntity);
  44. when(responseEntity.getContent()).thenReturn(new ByteArrayInputStream("OK".getBytes()));
  45. mockMvc.perform(post("/proxy/test")
  46. .header("Target-URL", targetUrl)
  47. .contentType(MediaType.APPLICATION_JSON)
  48. .content(body))
  49. .andExpect(status().isOk());
  50. ArgumentCaptor<HttpRequestBase> argumentCaptor = ArgumentCaptor.forClass(HttpRequestBase.class);
  51. verify(httpClient).execute(argumentCaptor.capture());
  52. HttpRequestBase capturedRequest = argumentCaptor.getValue();
  53. if (capturedRequest instanceof HttpPost) {
  54. HttpPost httpPost = (HttpPost) capturedRequest;
  55. HttpEntity entity = httpPost.getEntity();
  56. // StringEntity default encoding is ISO-8859-1
  57. // We expect this to fail if the controller doesn't handle encoding correctly
  58. String capturedBody = EntityUtils.toString(entity, StandardCharsets.UTF_8);
  59. assertEquals(body, capturedBody, "Body content should match, checking for encoding issues");
  60. }
  61. }
  62. }