mirror of
https://github.com/latentPrion/cppbessot.git
synced 2026-06-23 23:28:36 +00:00
Add PGSql tests
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/TestCommon.cmake")
|
||||
|
||||
cppbessot_test_require_real_pgsql_support()
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_DEV_CONNSTR)
|
||||
cppbessot_test_case_dir(_case_dir)
|
||||
set(_log_file "${_case_dir}/events.log")
|
||||
cppbessot_test_write_file("${_log_file}" "")
|
||||
cppbessot_test_pgsql_isolated_connstr(_dev_connstr "${CPPBESSOT_DB_PGSQL_DEV_CONNSTR}" "dev")
|
||||
|
||||
cppbessot_test_pgsql_reset_database("${_dev_connstr}")
|
||||
cppbessot_test_pgsql_exec(
|
||||
"${_dev_connstr}"
|
||||
"CREATE TABLE sample(id TEXT PRIMARY KEY); INSERT INTO sample(id) VALUES ('row-1');")
|
||||
|
||||
cppbessot_test_cache_string_setting(_dev_setting "CPPBESSOT_DB_PGSQL_DEV_CONNSTR" "${_dev_connstr}")
|
||||
cppbessot_test_write_project(
|
||||
"${_case_dir}"
|
||||
"set(DB_MIGRATE_WITH \"v1.0-v1.1\" CACHE STRING \"\")\n"
|
||||
"${_dev_setting}")
|
||||
cppbessot_test_add_schema("${_case_dir}" "v1.1")
|
||||
cppbessot_test_write_shell_script(
|
||||
"${_case_dir}/db/migrations/v1.0-v1.1/pre-structural-backfill.sh"
|
||||
"#!/bin/sh\n"
|
||||
"set -eu\n"
|
||||
"printf 'pre:%s:%s:%s\\n' \"$CPPBESSOT_DB_TARGET\" \"$CPPBESSOT_DB_BACKEND\" \"$CPPBESSOT_DB_PGSQL_CONNSTR\" >> \"${_log_file}\"\n")
|
||||
cppbessot_test_write_shell_script(
|
||||
"${_case_dir}/db/migrations/v1.0-v1.1/post-structural-backfill.sh"
|
||||
"#!/bin/sh\n"
|
||||
"set -eu\n"
|
||||
"printf 'post:%s:%s\\n' \"$CPPBESSOT_DB_MIGRATE_WITH\" \"$CPPBESSOT_DB_SCHEMA_DIR_TO_GENERATE\" >> \"${_log_file}\"\n")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/migrations/v1.0-v1.1/postgre/01-migrate.sql"
|
||||
"ALTER TABLE sample ADD COLUMN note TEXT;\n"
|
||||
"UPDATE sample SET note = 'hooked' WHERE id = 'row-1';\n")
|
||||
|
||||
cppbessot_test_configure_project("${_case_dir}" "${_case_dir}/build" _cfg_result _cfg_stdout _cfg_stderr)
|
||||
cppbessot_test_assert_success("${_cfg_result}" "${_cfg_stderr}" "fixture configure")
|
||||
cppbessot_test_build_target("${_case_dir}/build" "db_migrate" _build_result _build_stdout _build_stderr)
|
||||
cppbessot_test_assert_success("${_build_result}" "${_build_stderr}" "db_migrate pgsql backfill real")
|
||||
|
||||
cppbessot_test_assert_log_order(
|
||||
"${_log_file}"
|
||||
"pre:dev:postgre:${_dev_connstr}"
|
||||
"post:v1.0-v1.1:v1.1")
|
||||
cppbessot_test_pgsql_query_scalar(_note "${_dev_connstr}" "SELECT note FROM sample WHERE id='row-1';")
|
||||
if(NOT "${_note}" STREQUAL "hooked")
|
||||
message(FATAL_ERROR "Expected PostgreSQL backfill migration to update note column, got `${_note}`.")
|
||||
endif()
|
||||
|
||||
cppbessot_test_pgsql_drop_database("${_dev_connstr}")
|
||||
@@ -0,0 +1,38 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/TestCommon.cmake")
|
||||
|
||||
cppbessot_test_require_real_pgsql_support()
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_DEV_CONNSTR)
|
||||
cppbessot_test_case_dir(_case_dir)
|
||||
cppbessot_test_pgsql_isolated_connstr(_dev_connstr "${CPPBESSOT_DB_PGSQL_DEV_CONNSTR}" "dev")
|
||||
|
||||
cppbessot_test_pgsql_reset_database("${_dev_connstr}")
|
||||
cppbessot_test_pgsql_exec(
|
||||
"${_dev_connstr}"
|
||||
"CREATE TABLE legacy_data(id TEXT PRIMARY KEY); INSERT INTO legacy_data(id) VALUES ('old-row');")
|
||||
|
||||
cppbessot_test_cache_string_setting(_dev_setting "CPPBESSOT_DB_PGSQL_DEV_CONNSTR" "${_dev_connstr}")
|
||||
cppbessot_test_write_project("${_case_dir}" "${_dev_setting}")
|
||||
cppbessot_test_add_schema("${_case_dir}" "v1.1")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/v1.1/generated-sql-ddl/postgre/01-schema.sql"
|
||||
"CREATE TABLE sample(id TEXT PRIMARY KEY, note TEXT);\n")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/v1.1/generated-sql-ddl/postgre/02-seed.sql"
|
||||
"INSERT INTO sample(id, note) VALUES ('row-1', 'seeded');\n")
|
||||
|
||||
cppbessot_test_configure_project("${_case_dir}" "${_case_dir}/build" _cfg_result _cfg_stdout _cfg_stderr)
|
||||
cppbessot_test_assert_success("${_cfg_result}" "${_cfg_stderr}" "fixture configure")
|
||||
cppbessot_test_build_target("${_case_dir}/build" "db_createfrom" _build_result _build_stdout _build_stderr)
|
||||
cppbessot_test_assert_success("${_build_result}" "${_build_stderr}" "db_createfrom pgsql real")
|
||||
|
||||
cppbessot_test_pgsql_query_scalar(_row_count "${_dev_connstr}" "SELECT COUNT(*) FROM sample;")
|
||||
if(NOT "${_row_count}" STREQUAL "1")
|
||||
message(FATAL_ERROR "Expected seeded sample row after PostgreSQL createfrom, got `${_row_count}`.")
|
||||
endif()
|
||||
cppbessot_test_pgsql_query_scalar(
|
||||
_legacy_count
|
||||
"${_dev_connstr}"
|
||||
"SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = 'public' AND table_name = 'legacy_data';")
|
||||
if(NOT "${_legacy_count}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Expected legacy_data table to be removed during PostgreSQL createfrom.")
|
||||
endif()
|
||||
|
||||
cppbessot_test_pgsql_drop_database("${_dev_connstr}")
|
||||
@@ -0,0 +1,33 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/TestCommon.cmake")
|
||||
|
||||
cppbessot_test_require_real_pgsql_support()
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_DEV_CONNSTR)
|
||||
cppbessot_test_case_dir(_case_dir)
|
||||
cppbessot_test_pgsql_isolated_connstr(_dev_connstr "${CPPBESSOT_DB_PGSQL_DEV_CONNSTR}" "dev")
|
||||
|
||||
cppbessot_test_pgsql_reset_database("${_dev_connstr}")
|
||||
cppbessot_test_pgsql_exec(
|
||||
"${_dev_connstr}"
|
||||
"CREATE TABLE sample(id TEXT PRIMARY KEY); INSERT INTO sample(id) VALUES ('row-1');")
|
||||
|
||||
cppbessot_test_cache_string_setting(_dev_setting "CPPBESSOT_DB_PGSQL_DEV_CONNSTR" "${_dev_connstr}")
|
||||
cppbessot_test_write_project(
|
||||
"${_case_dir}"
|
||||
"set(DB_MIGRATE_WITH \"v1.0-v1.1\" CACHE STRING \"\")\n"
|
||||
"${_dev_setting}")
|
||||
cppbessot_test_add_schema("${_case_dir}" "v1.1")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/migrations/v1.0-v1.1/postgre/01-migrate.sql"
|
||||
"ALTER TABLE sample ADD COLUMN note TEXT;\n"
|
||||
"UPDATE sample SET note = 'migrated' WHERE id = 'row-1';\n")
|
||||
|
||||
cppbessot_test_configure_project("${_case_dir}" "${_case_dir}/build" _cfg_result _cfg_stdout _cfg_stderr)
|
||||
cppbessot_test_assert_success("${_cfg_result}" "${_cfg_stderr}" "fixture configure")
|
||||
cppbessot_test_build_target("${_case_dir}/build" "db_migrate" _build_result _build_stdout _build_stderr)
|
||||
cppbessot_test_assert_success("${_build_result}" "${_build_stderr}" "db_migrate pgsql real")
|
||||
|
||||
cppbessot_test_pgsql_query_scalar(_note "${_dev_connstr}" "SELECT note FROM sample WHERE id='row-1';")
|
||||
if(NOT "${_note}" STREQUAL "migrated")
|
||||
message(FATAL_ERROR "Expected PostgreSQL migration to set note column, got `${_note}`.")
|
||||
endif()
|
||||
|
||||
cppbessot_test_pgsql_drop_database("${_dev_connstr}")
|
||||
@@ -0,0 +1,53 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/TestCommon.cmake")
|
||||
|
||||
cppbessot_test_require_real_pgsql_support()
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_PROD_CONNSTR)
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR)
|
||||
cppbessot_test_case_dir(_case_dir)
|
||||
cppbessot_test_pgsql_isolated_connstr(_prod_connstr "${CPPBESSOT_DB_PGSQL_PROD_CONNSTR}" "prod")
|
||||
cppbessot_test_pgsql_isolated_connstr(_proddev_connstr "${CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR}" "proddev")
|
||||
|
||||
cppbessot_test_pgsql_reset_database("${_prod_connstr}")
|
||||
cppbessot_test_pgsql_drop_database("${_proddev_connstr}")
|
||||
cppbessot_test_pgsql_exec(
|
||||
"${_prod_connstr}"
|
||||
"CREATE TABLE sample(id TEXT PRIMARY KEY); INSERT INTO sample(id) VALUES ('prod-row');")
|
||||
|
||||
cppbessot_test_pgsql_clone_command(
|
||||
_clone_command
|
||||
"${_prod_connstr}"
|
||||
"${_proddev_connstr}")
|
||||
cppbessot_test_cache_string_setting(_prod_setting "CPPBESSOT_DB_PGSQL_PROD_CONNSTR" "${_prod_connstr}")
|
||||
cppbessot_test_cache_string_setting(_proddev_setting "CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR" "${_proddev_connstr}")
|
||||
cppbessot_test_cache_string_setting(_clone_setting "CPPBESSOT_DB_PGSQL_CLONE_PROD_TO_PRODDEV_COMMAND" "${_clone_command}")
|
||||
cppbessot_test_write_project(
|
||||
"${_case_dir}"
|
||||
"set(DB_TARGET \"proddev\" CACHE STRING \"\")\n"
|
||||
"set(DB_MIGRATE_WITH \"v1.0-v1.1\" CACHE STRING \"\")\n"
|
||||
"${_prod_setting}"
|
||||
"${_proddev_setting}"
|
||||
"${_clone_setting}")
|
||||
cppbessot_test_add_schema("${_case_dir}" "v1.1")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/migrations/v1.0-v1.1/postgre/01-migrate.sql"
|
||||
"ALTER TABLE sample ADD COLUMN note TEXT;\n"
|
||||
"UPDATE sample SET note = 'cloned' WHERE id = 'prod-row';\n")
|
||||
|
||||
cppbessot_test_configure_project("${_case_dir}" "${_case_dir}/build" _cfg_result _cfg_stdout _cfg_stderr)
|
||||
cppbessot_test_assert_success("${_cfg_result}" "${_cfg_stderr}" "fixture configure")
|
||||
cppbessot_test_build_target("${_case_dir}/build" "db_migrate" _build_result _build_stdout _build_stderr)
|
||||
cppbessot_test_assert_success("${_build_result}" "${_build_stderr}" "db_migrate pgsql proddev clone real")
|
||||
|
||||
cppbessot_test_pgsql_query_scalar(_proddev_note "${_proddev_connstr}" "SELECT note FROM sample WHERE id='prod-row';")
|
||||
if(NOT "${_proddev_note}" STREQUAL "cloned")
|
||||
message(FATAL_ERROR "Expected migrated proddev clone to contain note column, got `${_proddev_note}`.")
|
||||
endif()
|
||||
cppbessot_test_pgsql_query_scalar(
|
||||
_prod_note_column_count
|
||||
"${_prod_connstr}"
|
||||
"SELECT COUNT(*) FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'sample' AND column_name = 'note';")
|
||||
if(NOT "${_prod_note_column_count}" STREQUAL "0")
|
||||
message(FATAL_ERROR "Expected prod database to remain unchanged after proddev migration.")
|
||||
endif()
|
||||
|
||||
cppbessot_test_pgsql_drop_database("${_proddev_connstr}")
|
||||
cppbessot_test_pgsql_drop_database("${_prod_connstr}")
|
||||
@@ -0,0 +1,35 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/../cmake/TestCommon.cmake")
|
||||
|
||||
cppbessot_test_require_real_pgsql_support()
|
||||
cppbessot_test_require_var(CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR)
|
||||
cppbessot_test_case_dir(_case_dir)
|
||||
cppbessot_test_pgsql_isolated_connstr(_proddev_connstr "${CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR}" "proddev")
|
||||
|
||||
cppbessot_test_pgsql_reset_database("${_proddev_connstr}")
|
||||
cppbessot_test_pgsql_exec(
|
||||
"${_proddev_connstr}"
|
||||
"CREATE TABLE sample(id TEXT PRIMARY KEY); INSERT INTO sample(id) VALUES ('stale-row');")
|
||||
|
||||
cppbessot_test_cache_string_setting(_proddev_setting "CPPBESSOT_DB_PGSQL_PRODDEV_CONNSTR" "${_proddev_connstr}")
|
||||
cppbessot_test_write_project(
|
||||
"${_case_dir}"
|
||||
"set(DB_TARGET \"proddev\" CACHE STRING \"\")\n"
|
||||
"set(DB_MIGRATE_WITH \"v1.0-v1.1\" CACHE STRING \"\")\n"
|
||||
"set(DB_MIGRATE_PRODDEV_USE_STALE ON CACHE BOOL \"\")\n"
|
||||
"${_proddev_setting}")
|
||||
cppbessot_test_add_schema("${_case_dir}" "v1.1")
|
||||
cppbessot_test_add_sql_file("${_case_dir}/db/migrations/v1.0-v1.1/postgre/01-migrate.sql"
|
||||
"ALTER TABLE sample ADD COLUMN note TEXT;\n"
|
||||
"UPDATE sample SET note = 'stale' WHERE id = 'stale-row';\n")
|
||||
|
||||
cppbessot_test_configure_project("${_case_dir}" "${_case_dir}/build" _cfg_result _cfg_stdout _cfg_stderr)
|
||||
cppbessot_test_assert_success("${_cfg_result}" "${_cfg_stderr}" "fixture configure")
|
||||
cppbessot_test_build_target("${_case_dir}/build" "db_migrate" _build_result _build_stdout _build_stderr)
|
||||
cppbessot_test_assert_success("${_build_result}" "${_build_stderr}" "db_migrate pgsql proddev stale real")
|
||||
|
||||
cppbessot_test_pgsql_query_scalar(_note "${_proddev_connstr}" "SELECT note FROM sample WHERE id='stale-row';")
|
||||
if(NOT "${_note}" STREQUAL "stale")
|
||||
message(FATAL_ERROR "Expected PostgreSQL stale proddev migration to update note column, got `${_note}`.")
|
||||
endif()
|
||||
|
||||
cppbessot_test_pgsql_drop_database("${_proddev_connstr}")
|
||||
Reference in New Issue
Block a user