当前位置: 首页 > 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获取文件的大小
  • 广东省副省长刘红兵跨省任湖南省委常委、宣传部部长
  • 证据公布!菲律宾6人非法登上铁线礁活动
  • 费高云调研党的建设工作:营造风清气正劲足的政治生态
  • 北汽蓝谷一季度净亏损9.5亿元,拟定增募资不超60亿元
  • 杭州银行一季度净赚超60亿增逾17%,增速较去年同期有所回落
  • 上海通报5起违反中央八项规定精神问题