当前位置: 首页 > 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 配置失败: {}", "密码错误");

        }

    }

}

 

http://www.xdnf.cn/news/7759.html

相关文章:

  • 【C++指南】哈希驱动的封装:如何让unordered_map/set飞得更快更稳?【上】
  • 数据结构学习笔记 :二叉搜索树与高效查找算法详解
  • React 列表渲染基础示例
  • DFS/BFS专练-搞定图论基础!(从海岛问题过渡至图论基础应用C++/C)
  • 无刷电机槽数相同、转子极数不同的核心区别
  • Nacos安装及数据持久化
  • ESP32之本地HTTP服务器OTA固件升级流程,基于VSCode环境下的ESP-IDF开发(附源码)
  • 【Spring Boot】MyBatis入门:连接Mysql数据库、测试单元、连接的常见错误
  • 汇编语言中的数据
  • 基于C++(MFC)的细胞识别程序
  • 人工智能在后端开发中的革命:从架构到运维
  • 前端:uniapp中uni.pageScrollTo方法与元素的overflow-y:auto之间的关联
  • 极狐GitLab 项目导入导出设置介绍?
  • 架构师面试(三十一):IM 消息收发逻辑
  • 手撕STL——vector
  • 利用DeepSeek设计一个HTML批量转换工具设计
  • Hadoop的三大结构及其作用?
  • hadoop的三大结构及各自的作用
  • yarn的定义
  • 「数据可视化 D3系列」入门第九章:交互式操作详解
  • 自动驾驶与机器人算法学习
  • 【区块链通用服务平台及组件】京北方分布式身份管理平台 | FISCO BCOS 应用案例
  • java八股之并发编程
  • 医院数据中心智能化数据上报与调数机制设计
  • 仿腾讯会议项目开发——界面关闭功能实现
  • Flink介绍——实时计算核心论文之Kafka论文详解
  • java输出、输入语句
  • Vue3 Composition API与十大组件开发案例详解
  • 杂记-LeetCode中部分题思路详解与笔记-HOT100篇-其四
  • 【datawhaleAI春训营第一期笔记】AI+航空安全