概述

本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试。

Postgres 回归测试

每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL 提供的测试,以确保没有损坏。如果新功能或修复没有相应的测试,我们应该考虑添加一些,以确保在未来进行其他更改时不会出现问题。PostgreSQL 提供了一份全面的文档,解释了所有可用的测试。

例如,如果您想运行快速回归测试以检查任何“核心”功能是否可能存在问题,可以在构建树的临时安装中运行 make check,或者针对正在运行的 PostgreSQL 服务器运行 make installcheckmake checkmake installcheck 仅会测试 PostgreSQL 服务器的内置功能。要对已选择构建的模块运行所有测试,包括核心测试,您需要运行 make check-worldmake installcheck-world,分别对应于构建树中的临时安装或正在运行的 PostgreSQL 服务器。然而,某些功能在运行 make check-worldmake installcheck-world 时仍然不会被测试,例如与安全相关的功能、SSL、Kerberos 等。原因之一是这些测试用例需要一些特殊设置。要对这些功能运行回归测试,如文档所述,您需要运行类似 make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance' 的测试。

运行 SSL/TLS 回归测试

要运行与 SSL/TLS 相关功能的回归测试,首先需要编译启用了 SSL 库的 PostgreSQL。例如,运行以下命令将使用 OpenSSL 库编译 PostgreSQL:

git clone https://github.com/postgres/postgres.git
cd postgres
./configure --prefix=/tmp/pgapp --enable-tap-tests CC="gcc -std=gnu99" --with-openssl
make -j
make check-world

如果 make check-world 没问题,那么您可以通过检查 src/test/ssl/tmp_check/log 中的日志来确认是否已执行 SSL/TLS 回归测试。

$ cat *
[11:27:05.488](0.021s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.584](0.011s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
[11:27:05.671](0.011s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA

日志显示,所有三个 SSL/TLS 回归测试(001_ssltests.pl、002_scram.pl 和 003_sslinfo.pl)都已被跳过。

换句话说,如果您的修复与 SSL/TLS 相关,但您仅在修复上运行 make check-world,则可能会破坏某些 SSL/TLS 功能。要使用现有的回归测试用例测试与 SSL/TLS 相关的功能,您需要使用以下命令运行 SSL/TLS 测试:

cd src/test/ssl
make check PG_TEST_EXTRA=ssl

预期结果类似于以下内容:

# +++ tap check in src/test/ssl +++
t/001_ssltests.pl .. ok
t/002_scram.pl ..... ok
t/003_sslinfo.pl ... ok
All tests successful.
Files=3, Tests=247, 11 wallclock secs ( 0.05 usr 0.00 sys + 2.01 cusr 1.59 csys = 3.65 CPU)
Result: PASS

然后,您应该在 src/test/ssl/tmp_check/log 中看到如下日志,包含更多详细信息。

$ ls -l
total 164
-rw------- 1 david david 82348 Apr 19 11:39 001_ssltests_primary.log
-rw------- 1 david david 12408 Apr 19 11:39 002_scram_primary.log
-rw------- 1 david david 16402 Apr 19 11:39 003_sslinfo_primary.log
-rw-rw-r-- 1 david david 30451 Apr 19 11:39 regress_log_001_ssltests
-rw-rw-r-- 1 david david 4921 Apr 19 11:39 regress_log_002_scram
-rw-rw-r-- 1 david david 3880 Apr 19 11:39 regress_log_003_sslinfo

如果仔细查看日志,您可能会发现许多消息包含 certificate,如下所示。

$ cat tmp_check/log/* | grep certificate
...
[11:39:27.633](0.000s) ok 31 - cert root file that contains two certificates, order 2: no stderr
[11:39:27.717](0.027s) ok 36 - connect with sslcertmode=require fails without a client certificate
[11:39:27.717](0.000s) ok 37 - connect with sslcertmode=require fails without a client certificate: matches
[11:39:27.882](0.028s) ok 48 - mismatch between host name and server certificate sslmode=require
...

如何生成 SSL/TLS 证书

然后,您可能会有疑问,比如:“证书来自哪里?”以及“证书是如何生成的?”

实际上,所有证书都是通过 src/test/ssl 目录下的 Makefile 生成的,并作为测试用例的一部分提交到 PostgreSQL。通常情况下,除非您有一些需要新证书或不同证书的更改,否则不需要重新生成它们。然后,您可以运行以下命令:

make sslfiles-clean
make sslfiles

之后,如果您运行 git status,您应该会发现 src/test/ssl/ssl 目录下的所有文件都已被更改。这时,如果您运行之前的命令 make check PG_TEST_EXTRA=ssl,那么它应该会使用新生成的证书进行回归测试。我要在这里提到证书的原因是,证书在 SSL/TLS 回归测试中扮演着非常重要的角色。

总结

本文描述了运行 SSL/TLS 相关回归测试的简单过程。您可以参考此过程对 Kerberos、LDAP 等进行类似的回归测试。

本文由博客一文多发平台 OpenWrite 发布!

如何在 PostgreSQL 中运行 TLS 回归测试的更多相关文章

  1. Nodejs的安装配置及如何在sublimetext2中运行js

    Nodejs的安装配置及如何在sublimetext2中运行js听语音 | 浏览:4554 | 更新:2015-06-16 11:29 Nodejs的安装配置及如何在sublimetext2中运行js ...

  2. 如何在xampp中运行php文件 (WINDOWS)

    from:http://blog.sina.com.cn/s/blog_5e87822501011os2.html 入门: 如何在xampp中运行php文件 (WINDOWS) 安装XAMPP启动ap ...

  3. [转帖]如何在VirtualBox中运行macOS Catalina Beta版本

    如何在VirtualBox中运行macOS Catalina Beta版本 secist2019-08-03共2179人围观系统安全 https://www.freebuf.com/articles/ ...

  4. Zookeeper客户端cli_st为何在crontab中运行不正常?

    实践中,发现直接在命令行终端运行cli_st时,能够得到预期的结果,但一将它放到crontab中,则只收到: bye 相关的一段clit_st源代码如下: if (FD_ISSET(, &rf ...

  5. 如何在linux中运行sql文件

    1.在linux中进入sql命令行 mysql -u root -p   输入密码 2.假设home下面有a.sql文件 先得use databasename,要不会报错 “No Database S ...

  6. 如何在cygwin中运行crontab定时脚本[利刃篇]

    用到cygwin,自然是希望能多处理一些类似linux的任务了,那就自然少不了定时任务crontab,看到网上教程不少,自己运行一个测试却也不那么容易,下面就记录我的安装过程,以供参考吧! 1.首先, ...

  7. 如何在Apache中运行Python脚本

    第一步:进入C:\Apache24\cgi-bin: 第二步:在cgi-bin目录下新建一个hello.py文件: 第三步: #!python #coding:utf-8 print("co ...

  8. 如何在cmd中运行数据库

    在开始菜单中输入cmd 在控制板输入:net  start  MSSQLserver 启动数据库 在控制板输入:net  stop  MSSQLserver 关闭数据库 在控制板输入:net  pur ...

  9. 如何在spring中运行多个schedulers quartz 实例

    http://wzping.iteye.com/blog/468263 1.定义一个JOB <!-- 使用pojo来做job,指定pojo和method -->     <bean ...

  10. 如何在cmd中运行PHP

    我的php安装目录在 d:\php 那么 运行 cmd >d: >cd php 要让工作目录指向php.exe的安装文件夹 然后就可以用php指令了 比如 在该文件夹下面新建一个test. ...

随机推荐

  1. Web网页端IM产品RainbowChat-Web的v4.1版已发布

    一.关于RainbowChat-Web RainbowChat-Web是一套Web网页端IM系统,是RainbowChat的姊妹系统(RainbowChat是一套基于开源IM聊天框架 MobileIM ...

  2. 小程序IOS系统input设置maxlength时,输入到最后如果输入汉字的拼音长度超过限制会直接中断输入(bug bug)

    我的解决办法:不在输入框限制长度,在提交表单的时候判断长度,欢迎大家有好的解决方法分享一下

  3. MySQL-扩展

    1.行转列 源数据: 目标数据: 数据准备 -- 建表插入数据 drop table if exists time_temp; create table if not exists time_temp ...

  4. w3cschool-MyBatis-Plus 插件

    https://www.w3cschool.cn/mybatis_plus/mybatis_plus-udwn3mgc.html MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具 ...

  5. c代码部分封装为lib

    需求:将一个C工程中的核心代码封装为静态文件:lib. 环境 工具:VC6.0++ 语言:c 以封装一个DES工程为例 封装 (1)新建一个静态工程 (2)新建c文件和h文件 (3)挑选封装内容 在原 ...

  6. Windows下使用Bat拷贝远程共享目录下文件

    哈喽   我又来了 客户昨天提出了一个要求,这次的update里要用bat脚本去拷贝远程共享目录下的文件到各自的本地C盘目录下,于是乎,从昨天下午开始研究 到了今天中午,写写删删,乱改一气,总算弄出来 ...

  7. 小程序uni-app中uview中select选择器第二次无法选中设置的默认值

    <u-select v-model="subjectFlag" title="选择科目" @confirm="okSubjecthander&q ...

  8. 天翼云弹性高性能计算Portal简介

    本文分享自天翼云开发者社区<天翼云弹性高性能计算Portal简介>,作者:小燕同学 1.平台概述 天翼云官网已上线公有云弹性高性能计算(EHPC)产品,公有云EHPC产品主要由管理员控制, ...

  9. rabbitmq不同模式的区别

    RPC模式

  10. SMMS图床Java接口上传

    前言 个人项目开发中,网站建设中需要用到大量的图片以及用户上传的图片,如果服务器带宽小,磁盘容量小将所有的图片信息全部存储在服务器上不太现实,这里建议将图片数据存储在对象存OSS上或者将图片保存在图床 ...