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

测试驱动开发:用 Docker 搭建 deno-postgres 三种认证模式测试环境

测试驱动开发:用 Docker 搭建 deno-postgres 三种认证模式测试环境

【免费下载链接】postgresPostgreSQL driver for Deno项目地址: https://gitcode.com/gh_mirrors/postgr/postgres

deno-postgres 是 Deno 生态中最流行的 PostgreSQL 驱动(PostgreSQL driver for Deno)。做测试驱动开发(TDD)时,最头疼的不是写断言,而是准备一个稳定、可复现、覆盖各种认证方式的数据库测试环境。好消息是,deno-postgres 项目自带一套完整的 Docker 测试环境,一条命令就能同时启动clear、md5、scram-sha-256三种 PostgreSQL 认证模式的服务并自动跑完全部测试。本文带你完整搭建并理解这套环境,让你从零开始也能为 deno-postgres 贡献代码或复现认证问题。

为什么测试驱动开发需要三种认证模式

PostgreSQL 的客户端认证(pg_hba.conf)经历了多代演变,驱动必须逐一兼容:

认证模式安全性说明
clear(password)⚠️ 明文传输仅存在于 PostgreSQL 9 及更早版本,早已移除
md5中等传统加密方式,至今仍有大量老系统使用
scram-sha-256✅ 最强现代 PostgreSQL 默认认证,基于挑战-响应机制

如果只测默认的 scram,就可能在 md5 或明文模式下翻车。deno-postgres 的测试正是针对这三种模式分别设计了独立的数据库实例,这就是 docker-compose.yml 里出现三个 PostgreSQL 服务的原因。

一眼看懂 deno-postgres 自带的测试环境

项目根目录的 docker-compose.yml 定义了完整的测试矩阵:

服务名镜像版本认证模式端口
postgres_clearpostgres:9明文 password6000
postgres_md5postgres:14md56001
postgres_scrampostgres:14scram-sha-2566002

每个服务的配置都放在独立的目录里,例如 docker/postgres_scram/data/ 下就有pg_hba.conf(认证规则)、postgresql.conf(服务配置)、server.crtserver.key(TLS 证书)。这些测试用的 TLS 证书由 docker/generate_tls_keys.sh 生成,用于验证 SSL 连接场景。

一键搭建:最快配置方法

无需手工改任何配置,克隆仓库后两条命令搞定:

git clone https://gitcode.com/gh_mirrors/postgr/postgres cd postgres docker compose build --no-cache docker compose run tests

docker compose run tests会自动完成三件事:✅ 启动三个数据库容器 → ✅ 等待端口就绪(WAIT_HOSTS)→ ✅ 在容器内执行deno test -A --parallel --check跑完整套测试。整个过程完全自动化,这正是测试驱动开发想要的"可重复"环境。

三种认证模式背后的配置细节

scram-sha-256 的认证规则(pg_hba.conf)同时覆盖了 SSL 与非 SSL 连接:

hostssl postgres scram 0.0.0.0/0 scram-sha-256 hostnossl postgres scram 0.0.0.0/0 scram-sha-256

md5 模式(pg_hba.conf)则混合了 md5 与 scram 用户,专门测试两种加密并存的情况。而clear 模式(pg_hba.conf)使用password认证,验证老版本 PostgreSQL 的兼容性。

数据库初始化时,initialize_test_server.sql 会创建scrammd5clearsocket等专用测试用户,密码统一为postgres。md5 版本甚至通过UPDATE PG_AUTHID强制把密码改写成 md5 格式——这些细节都是为了让认证测试覆盖到真实的边界情况。

把测试跑起来:本地运行与 Docker 运行

Docker 是推荐方式,但如果你本机已装了 PostgreSQL,也可以直接运行:

deno test --allow-read --allow-net --allow-env

测试用例集中在 tests/ 目录:认证相关逻辑在 tests/auth_test.ts,连接与连接参数测试在 tests/connection_test.ts 和 tests/connection_params_test.ts,数据编码解码则在 tests/data_types_test.ts 等文件中。具体运行说明可参考 tests/README.md。

不只是认证:事务隔离级别也值得关注

除认证之外,deno-postgres 对 PostgreSQL 事务隔离级别的支持同样完善。项目文档中的这张对比图直观展示了read committedrepeatable readserializable三种隔离级别在防脏读、防不可重复读、防幻读等方面的差异,写事务相关测试前值得先看一遍:

常见问题与调试技巧

  • 端口被占用:三个服务固定使用 6000/6001/6002 端口,冲突时先docker compose stop清理。
  • 等待初始化WAIT_AFTER_HOSTS: "15"表示数据库上线后还要等 15 秒让元数据初始化完成,测试失败时先确认这步是否走完。
  • TLS 证书过期:本地重新运行 docker/generate_tls_keys.sh 即可重新生成。

小结

用 Docker 搭建 deno-postgres 三种认证模式测试环境,本质上就是把"环境搭建"从手工操作变成可复现的声明式配置。一次docker compose run tests,三种认证模式、SSL 连接、socket 连接全部覆盖,测试驱动开发的循环因此变得又快又稳。如果你正准备为 deno-postgres 提交认证相关的代码或修复,这套现成的环境就是你最好的起点。🚀

【免费下载链接】postgresPostgreSQL driver for Deno项目地址: https://gitcode.com/gh_mirrors/postgr/postgres

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.cnnetsun.cn/news/4137156.html

相关文章:

  • rust-ctrlc 快速入门:5 分钟让 Rust CLI 程序优雅响应 Ctrl-C
  • Whoosh核心原理:倒排索引的构建、存储与查询全解析
  • 个人微信API二次开发:消息撤回两分钟窗口
  • mybatis-generator-gui-extension 代码合并机制解密:重新生成代码为何不再丢失手写逻辑
  • 动画生成异常时怎样保留可用体验
  • 如何消除Shotlooter误报?高熵字符串与信用卡检测的3个调优技巧
  • AI生成人物如何摆脱僵硬感?Seedance2提示词撰写实战指南
  • 告别静态建模!镜像视界带你迈入实时三维重构的“时空计算”新纪元
  • 手写数字识别:线性判别分析与逻辑回归的模型对比与实践
  • 【storage】
  • 网络同步的奥秘:Jazz² Resurrection 在线多人架构深度解析(ENet/WebSocket/状态插值)
  • build2 构建语言进阶:函数、变量展开、条件与循环完全教程
  • 框架降级的实现路径
  • 043、RT-X开源跨机器人数据集:数据多样性与策略泛化能力
  • svelte-motion useSpring 弹性动画教程:为 Svelte UI 注入自然物理手感
  • 实测20个独立开发者开源项目:效率、创作、解压一次配齐
  • Luminus-template 配置管理最佳实践:cprop 与 mount 双剑合璧
  • rust-ctrlc 实战:如何用 10 行代码为 Rust 后台服务实现优雅退出
  • 基于多智能体强化学习的基站动态布署:提升TDOA定位精度与网络适应性
  • TOPSIS多准则决策原理与Python工业级实现
  • EKFiddle 是什么?恶意流量分析领域的终极瑞士军刀:完整入门指南
  • Filterizr 响应式画廊实战:移动端完美适配的完整方案
  • 不需要去官网下载cudnn和cuda,最新anaconda环境配置
  • 多智能体宪法学习(MAC):让AI通过辩论自我进化实现安全对齐
  • 手把手构建AI电商素材自动化工作流:从商品数据到图文视频全链生成
  • 编程随想(只是基于自己工作学习经历,不具备普适性)
  • C++模板高阶实战:SFINAE、CRTP与变参模板的工程应用
  • djangochannelsrestframework 实时推送核心原理:Observer 观察者模式如何让 WebSocket 数据自动更新
  • 软考 软件设计师 复习要点
  • 2 小时倒计时?Wand-Enhancer 免费解锁全功能