-- Citus uses ssl by default now. It does so by turning on ssl and if needed will generate
-- self-signed certificates.
--
-- This test verifies:
-- 1) ssl=on on coordinator and workers
-- 2) coordinator->workers connections use SSL (pg_stat_ssl true)
-- 3) ssl_ciphers is non-empty and has a colon-separated rule/list on both coordinator and workers
--    (PG18/OpenSSL may report a rule string like HIGH:MEDIUM:+3DES:!aNULL instead of an expanded list)
-- 0) Is this an OpenSSL-enabled build? (if not, ssl_ciphers is 'none')
--    Keep the “hasssl” signal but don’t rely on the literal cipher list value.
SHOW ssl_ciphers \gset
SELECT :'ssl_ciphers' <> 'none' AS hasssl;
 hasssl
---------------------------------------------------------------------
 t
(1 row)

-- 1) ssl must be on (coordinator + workers)
SHOW ssl;
 ssl
---------------------------------------------------------------------
 on
(1 row)

SELECT run_command_on_workers($$
    SHOW ssl;
$$);
 run_command_on_workers
---------------------------------------------------------------------
 (localhost,57637,t,on)
 (localhost,57638,t,on)
(2 rows)

-- 2) connections to workers carry sslmode=require
SHOW citus.node_conninfo;
 citus.node_conninfo
---------------------------------------------------------------------
 sslmode=require
(1 row)

SELECT run_command_on_workers($$
    SHOW citus.node_conninfo;
$$);
       run_command_on_workers
---------------------------------------------------------------------
 (localhost,57637,t,sslmode=require)
 (localhost,57638,t,sslmode=require)
(2 rows)

-- 3) pg_stat_ssl says SSL is active on each worker connection
SELECT run_command_on_workers($$
    SELECT ssl FROM pg_stat_ssl WHERE pid = pg_backend_pid();
$$);
 run_command_on_workers
---------------------------------------------------------------------
 (localhost,57637,t,t)
 (localhost,57638,t,t)
(2 rows)

-- 4) ssl_ciphers checks (coordinator): non-empty and contains at least one ':'
SELECT current_setting('ssl_ciphers') <> '' AS has_ssl_ciphers;
 has_ssl_ciphers
---------------------------------------------------------------------
 t
(1 row)

SELECT position(':' in current_setting('ssl_ciphers')) > 0 AS has_colon;
 has_colon
---------------------------------------------------------------------
 t
(1 row)

-- 5) ssl_ciphers checks (workers)
SELECT run_command_on_workers($$
  SELECT current_setting('ssl_ciphers') <> '' AS has_ssl_ciphers
$$);
 run_command_on_workers
---------------------------------------------------------------------
 (localhost,57637,t,t)
 (localhost,57638,t,t)
(2 rows)

SELECT run_command_on_workers($$
  SELECT position(':' in current_setting('ssl_ciphers')) > 0 AS has_at_least_two_ciphers
$$);
 run_command_on_workers
---------------------------------------------------------------------
 (localhost,57637,t,t)
 (localhost,57638,t,t)
(2 rows)

