test ssl java

发布于:2025-04-19 ⋅ 阅读:(17) ⋅ 点赞:(0)

 // 文件名:SslUtilsTest.java// 包路径:

import static org.junit.Assert.*;

import static org.mockito.Mockito.*;

 

import java.io.InputStream;

import java.security.KeyStore;

import javax.net.ssl.SSLContext;

import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;

import org.eNodeCache;

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.mockito.MockedStatic;

import org.mockito.Mockito;

import org.powermock.api.mockito.PowerMockito;

import org.powermock.core.classloader.annotations.PrepareForTest;

import org.powermock.modules.junit4.PowerMockRunner;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.http.client.ClientHttpRequestFactory;

 

@RunWith(PowerMockRunner.class)

@PrepareForTest({SslUtils.class, CacheHelper.class, LoggerFactory.class})

public class SslUtilsTest {

 

    private static final String TEST_KEYSTORE_PATH = "test-keystore.jks";

    private static final String STORE_PASSWORD = "storepass";

    private static final String KEY_PASSWORD = "keypass";

 

    private Cache<String, KeyStore> mockCache;

    private Logger mockLogger;

 

    @Before

    public void setUp() throws Exception {

        // 模拟 Logger 和 Cache 依赖

        mockLogger = mock(Logger.class);

        mockCache = mock(Cache.class);

 

        PowerMockito.mockStatic(LoggerFactory.class);

        when(LoggerFactory.getLogger(SslUtils.class)).thenReturn(mockLogger);

 

        PowerMockito.mockStatic(CacheHelper.class);

        when(CacheHelper.getInstance().getTamKeyStoreCache()).thenReturn(mockCache);

    }

 

    @Test

    public void testGetClientHttpRequestFactory_LoadKeyStoreFromCache() throws Exception {

        // 模拟缓存中存在 KeyStore

        KeyStore mockKeyStore = mock(KeyStore.class);

        when(mockCache.containsKey(CacheConstants.ECAGHE_IAW_KEYSTORE)).thenReturn(true);

        when(mockCache.get(CacheConstants.ECAGHE_IAW_KEYSTORE)).thenReturn(mockKeyStore);

 

        // 调用方法

        ClientHttpRequestFactory factory = SslUtils.getClientHttpRequestFactory(

            TEST_KEYSTORE_PATH, STORE_PASSWORD, KEY_PASSWORD

        );

 

        // 验证结果

        assertNotNull(factory);

        verify(mockLogger).info("***** 密钥库已从缓存加载 *****");

    }

 

    @Test

    public void testGetClientHttpRequestFactory_LoadKeyStoreFromFile() throws Exception {

        // 模拟缓存中无 KeyStore,触发文件加载

        when(mockCache.containsKey(CacheConstants.ECAGHE_IAW_KEYSTORE)).thenReturn(false);

 

        // 使用真实测试密钥库文件(需提前放置在 test/resources 目录)

        KeyStore keyStore = KeyStore.getInstance("JKS");

        try (InputStream is = getClass().getClassLoader().getResourceAsStream(TEST_KEYSTORE_PATH)) {

            keyStore.load(is, STORE_PASSWORD.toCharArray());

        }

 

        // 调用方法

        ClientHttpRequestFactory factory = SslUtils.getClientHttpRequestFactory(

            TEST_KEYSTORE_PATH, STORE_PASSWORD, KEY_PASSWORD

        );

 

        // 验证结果

        assertNotNull(factory);

        verify(mockCache).put(CacheConstants.ECAGHE_IAW_KEYSTORE, keyStore);

        verify(mockLogger).info("密钥库从文件加载: {}", anyString());

    }

 

    @Test

    public void testGetClientHttpRequestFactory_InvalidKeystorePath() {

        // 模拟无效路径

        ClientHttpRequestFactory factory = SslUtils.getClientHttpRequestFactory(

            "invalid-path.jks", STORE_PASSWORD, KEY_PASSWORD

        );

 

        // 验证错误日志

        verify(mockLogger).error("密钥库文件路径无效: {}", "invalid-path.jks");

        assertNotNull(factory); // 工厂可能仍被创建(需根据实际逻辑调整)

    }

 

    @Test

    public void testLoadKeyStore_WithEmptyPassword() throws Exception {

        // 测试空密码场景

        try (MockedStatic<SSLContexts> sslContextsMock = Mockito.mockStatic(SSLContexts.class)) {

            sslContextsMock.when(() -> SSLContexts.custom().loadKeyMaterial(any(), any()))

                .thenThrow(new IllegalArgumentException("密码错误"));

 

            ClientHttpRequestFactory factory = SslUtils.getClientHttpRequestFactory(

                TEST_KEYSTORE_PATH, "", ""

            );

 

            verify(mockLogger).error("SSL 配置失败: {}", "密码错误");

        }

    }

}

 


网站公告

今日签到

点亮在社区的每一天
去签到