怎样在 PostgreSQL 中运行 TLS 回归测试

打印 上一主题 下一主题

主题 1014|帖子 1014|积分 3042

概述

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

每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL 提供的测试,以确保没有破坏。如果新功能或修复没有相应的测试,我们应该思量添加一些,以确保在将来进行其他更改时不会出现问题。PostgreSQL 提供了一份全面的文档,解释了全部可用的测试。
比方,如果您想运行快速回归测试以查抄任何“核心”功能是否大概存在问题,可以在构建立的临时安装中运行 make check,或者针对正在运行的 PostgreSQL 服务器运行 make installcheck。make check 和 make installcheck 仅会测试 PostgreSQL 服务器的内置功能。要对已选择构建的模块运行全部测试,包括核心测试,您需要运行 make check-world 或 make installcheck-world,分别对应于构建立中的临时安装或正在运行的 PostgreSQL 服务器。然而,某些功能在运行 make check-world 或 make installcheck-world 时仍然不会被测试,比方与安全相关的功能、SSL、Kerberos 等。缘故原由之一是这些测试用例需要一些特殊设置。要对这些功能运行回归测试,如文档所述,您需要运行类似 make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance' 的测试。
运行 SSL/TLS 回归测试

要运行与 SSL/TLS 相关功能的回归测试,首先需要编译启用了 SSL 库的 PostgreSQL。比方,运行以下下令将使用 OpenSSL 库编译 PostgreSQL:
  1. git clone https://github.com/postgres/postgres.git
  2. cd postgres
  3. ./configure --prefix=/tmp/pgapp --enable-tap-tests CC="gcc -std=gnu99" --with-openssl
  4. make -j
  5. make check-world
复制代码
如果 make check-world 没问题,那么您可以通过查抄 src/test/ssl/tmp_check/log 中的日志来确认是否已执行 SSL/TLS 回归测试。
  1. $ cat *
  2. [11:27:05.488](0.021s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
  3. [11:27:05.584](0.011s) 1..0 # SKIP Potentially unsafe test SSL not enabled in PG_TEST_EXTRA
  4. [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 测试:
  1. cd src/test/ssl
  2. make check PG_TEST_EXTRA=ssl
复制代码
预期结果类似于以下内容:
  1. # +++ tap check in src/test/ssl +++
  2. t/001_ssltests.pl .. ok     
  3. t/002_scram.pl ..... ok   
  4. t/003_sslinfo.pl ... ok   
  5. All tests successful.
  6. Files=3, Tests=247, 11 wallclock secs ( 0.05 usr  0.00 sys +  2.01 cusr  1.59 csys =  3.65 CPU)
  7. Result: PASS
复制代码
然后,您应该在 src/test/ssl/tmp_check/log 中看到如下日志,包含更多详细信息。
  1. $ ls -l
  2. total 164
  3. -rw------- 1 david david 82348 Apr 19 11:39 001_ssltests_primary.log
  4. -rw------- 1 david david 12408 Apr 19 11:39 002_scram_primary.log
  5. -rw------- 1 david david 16402 Apr 19 11:39 003_sslinfo_primary.log
  6. -rw-rw-r-- 1 david david 30451 Apr 19 11:39 regress_log_001_ssltests
  7. -rw-rw-r-- 1 david david  4921 Apr 19 11:39 regress_log_002_scram
  8. -rw-rw-r-- 1 david david  3880 Apr 19 11:39 regress_log_003_sslinfo
复制代码
如果细致查看日志,您大概会发现很多消息包含 certificate,如下所示。
  1. $ cat tmp_check/log/* | grep certificate
  2. ...
  3. [11:39:27.633](0.000s) ok 31 - cert root file that contains two certificates, order 2: no stderr
  4. [11:39:27.717](0.027s) ok 36 - connect with sslcertmode=require fails without a client certificate
  5. [11:39:27.717](0.000s) ok 37 - connect with sslcertmode=require fails without a client certificate: matches
  6. [11:39:27.882](0.028s) ok 48 - mismatch between host name and server certificate sslmode=require
  7. ...
复制代码
怎样生成 SSL/TLS 证书

然后,您大概会有疑问,好比:“证书来自哪里?”以及“证书是怎样生成的?”
现实上,全部证书都是通过 src/test/ssl 目录下的 Makefile 生成的,并作为测试用例的一部门提交到 PostgreSQL。通常情况下,除非您有一些需要新证书或不同证书的更改,否则不需要重新生成它们。然后,您可以运行以下下令:
  1. make sslfiles-clean
  2. make sslfiles
复制代码
之后,如果您运行 git status,您应该会发现 src/test/ssl/ssl 目录下的全部文件都已被更改。这时,如果您运行之前的下令 make check PG_TEST_EXTRA=ssl,那么它应该会使用新生成的证书进行回归测试。我要在这里提到证书的缘故原由是,证书在 SSL/TLS 回归测试中扮演着非常重要的角色。
总结

本文描述了运行 SSL/TLS 相关回归测试的简单过程。您可以参考此过程对 Kerberos、LDAP 等进行类似的回归测试。
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

尚未崩坏

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表