public static List<String> compareMd5(HttpServletRequest request, HttpServletResponse response,
            Map<String, String> clientMd5Map) {
        List<String> changedGroupKeys = new ArrayList<>();
        String tag = request.getHeader("Vipserver-Tag");
        for (Map.Entry<String, String> entry : clientMd5Map.entrySet()) {
            String groupKey = entry.getKey();
            String clientMd5 = entry.getValue();
            String ip = RequestUtil.getRemoteIp(request);
            boolean isUptodate = ConfigCacheService.isUptodate(groupKey, clientMd5, ip, tag);
            if (!isUptodate) {
                changedGroupKeys.add(groupKey);
            }
        }
        return changedGroupKeys;
    }
@Test
    void testCompareMd5() {
        
        final MockedStatic<ConfigCacheService> configCacheServiceMockedStatic = Mockito.mockStatic(ConfigCacheService.class);
        
        when(ConfigCacheService.isUptodate(anyString(), anyString(), anyString(), anyString())).thenReturn(false);
        
        Map<String, String> clientMd5Map = new HashMap<>();
        clientMd5Map.put("test", "test");
        
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.addHeader("Vipserver-Tag", "test");
        MockHttpServletResponse response = new MockHttpServletResponse();
        
        List<String> changedGroupKeys = MD5Util.compareMd5(request, response, clientMd5Map);
        
        assertEquals(1, changedGroupKeys.size());
        assertEquals("test", changedGroupKeys.get(0));
        
        configCacheServiceMockedStatic.close();
    }