当前位置: 首页 > news >正文

test ssl java

 // 文件名: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 配置失败: {}", "密码错误");

        }

    }

}

 

相关文章:

  • Java 序列化与反序列化终极解析
  • pointnet pointnet++论文笔记
  • 麒麟操作系统漏洞修复保姆级教程弱(一)算法漏洞修复
  • Vue3 + TypeScript中provide和inject的用法示例
  • 基于ubuntu24.10安装NACOS2.5.1的简介
  • 第18周:对于ResNeXt-50算法的思考
  • 51单片机实验一:点亮led灯
  • 2025妈妈杯Mathorcup数学建模竞赛选题建议+初步分析
  • 路由交换网络专题 | 第五章 | ISIS | RIP | 路由引入 | 策略路由
  • Crawl4AI:重塑大语言模型数据供给的开源革命者
  • Vue Teleport 及其在 SSR 中的潜在问题
  • 蓝桥杯之前缀和
  • 基于瑞芯微RK3576国产ARM八核2.2GHz A72 工业评估板——Docker容器部署方法说明
  • Ubuntu20.04 部署llama-factory问题集
  • Tensorflow实现用接口调用模型训练和停止训练功能
  • openGauss基于PITR恢复测试
  • 第五章 制作工具优化
  • VUE简介
  • 【 图像梯度处理,图像边缘检测】图像处理(OpenCv)-part6
  • C++(17):通过filesystem获取文件的大小
  • 揭晓!人形机器人半马完赛奖+专项奖发布
  • 对话地铁读书人|来自法学教授的科普:读书日也是版权日
  • 海外考古大家访谈|马克·波拉德:以考古意识为本位的科技考古学家
  • 梅德韦杰夫:如果欧盟和美国 “撒手不管”,俄罗斯会更快解决俄乌冲突
  • 老年人越“懒”越健康,特别是这5种“懒”
  • 人民日报钟声:经济霸凌损害美国国家信誉