-- This file and its contents are licensed under the Apache License 2.0.
-- Please see the included NOTICE for copyright information and
-- LICENSE-APACHE for a copy of the license.
\c :TEST_DBNAME :ROLE_SUPERUSER
CREATE OR REPLACE FUNCTION test.condition() RETURNS VOID
    AS :MODULE_PATHNAME, 'ts_test_utils_condition' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE OR REPLACE FUNCTION test.int64_eq() RETURNS VOID
    AS :MODULE_PATHNAME, 'ts_test_utils_int64_eq' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE OR REPLACE FUNCTION test.ptr_eq() RETURNS VOID
    AS :MODULE_PATHNAME, 'ts_test_utils_ptr_eq' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
CREATE OR REPLACE FUNCTION test.double_eq() RETURNS VOID
    AS :MODULE_PATHNAME, 'ts_test_utils_double_eq' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
SET ROLE :ROLE_DEFAULT_PERM_USER;
-- We're testing that the test utils work and generate errors on
-- failing conditions
\set ON_ERROR_STOP 0
SELECT test.condition();
ERROR:  TestFailure | (true_value == false_value)
SELECT test.int64_eq();
ERROR:  TestFailure | (big == small) [32532978 == 3242234]
SELECT test.ptr_eq();
ERROR:  TestFailure | (true_ptr == false_ptr)
SELECT test.double_eq();
ERROR:  TestFailure | (big_double == small_double) [923423478.324200 == 324.300000]
\set ON_ERROR_STOP 1
-- Test debug points
--
\set ECHO all
\c :TEST_DBNAME :ROLE_SUPERUSER
-- debug point already enabled
SELECT debug_waitpoint_enable('test_debug_point');
 debug_waitpoint_enable 
------------------------
 

\set ON_ERROR_STOP 0
SELECT debug_waitpoint_enable('test_debug_point');
ERROR:  debug point "test_debug_point" already enabled
\set ON_ERROR_STOP 1
SELECT debug_waitpoint_release('test_debug_point');
 debug_waitpoint_release 
-------------------------
 

-- debug point not enabled
\set ON_ERROR_STOP 0
SELECT debug_waitpoint_release('test_debug_point');
WARNING:  you don't own a lock of type ExclusiveLock
ERROR:  cannot release debug point "test_debug_point"
\set ON_ERROR_STOP 1
-- error injections
--
CREATE OR REPLACE FUNCTION test_error_injection(TEXT)
RETURNS VOID
AS :MODULE_PATHNAME, 'ts_test_error_injection'
LANGUAGE C VOLATILE STRICT;
SET ROLE :ROLE_DEFAULT_PERM_USER;
SELECT test_error_injection('test_error');
 test_error_injection 
----------------------
 

SELECT debug_waitpoint_enable('test_error');
 debug_waitpoint_enable 
------------------------
 

\set ON_ERROR_STOP 0
SELECT test_error_injection('test_error');
ERROR:  error injected at debug point 'test_error'
\set ON_ERROR_STOP 1
SELECT debug_waitpoint_release('test_error');
 debug_waitpoint_release 
-------------------------
 

SELECT test_error_injection('test_error');
 test_error_injection 
----------------------
 

-- Test Scanner
RESET ROLE;
CREATE OR REPLACE FUNCTION test.scanner() RETURNS VOID
    AS :MODULE_PATHNAME, 'ts_test_scanner' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
SET ROLE :ROLE_DEFAULT_PERM_USER;
-- Create two chunks to scan in the test
CREATE TABLE hyper (time timestamptz, temp float);
SELECT create_hypertable('hyper', 'time');
 create_hypertable  
--------------------
 (1,public,hyper,t)

INSERT INTO hyper VALUES ('2021-01-01', 1.0), ('2022-01-01', 2.0);
SELECT test.scanner();
NOTICE:  1. Scan: "_timescaledb_internal._hyper_1_1_chunk"
NOTICE:  1. Scan: "_timescaledb_internal._hyper_1_2_chunk"
NOTICE:  2. Scan with filter: "_timescaledb_internal._hyper_1_1_chunk"
NOTICE:  3. ReScan: "_timescaledb_internal._hyper_1_2_chunk"
NOTICE:  4. IndexScan: "_timescaledb_internal._hyper_1_2_chunk"
 scanner 
---------
 

-- Test errdata_to_jsonb
RESET ROLE;
CREATE OR REPLACE FUNCTION test.errdata_to_jsonb() RETURNS JSONB
AS :MODULE_PATHNAME, 'ts_test_errdata_to_jsonb' LANGUAGE C IMMUTABLE STRICT PARALLEL SAFE;
SELECT test.errdata_to_jsonb();
                                                                                                                                                                                                                                                                                                                         errdata_to_jsonb                                                                                                                                                                                                                                                                                                                          
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 {"hint": "test error hint", "detail": "test error detail", "domain": "test error domain", "lineno": 123, "context": "test error context", "message": "test error message", "filename": "test error filename", "funcname": "test error function", "proc_name": "proc_name", "detail_log": "test error detail log", "sqlerrcode": "22023", "table_name": "test error table", "column_name": "test error column", "proc_schema": "proc_schema", "schema_name": "test error schema", "datatype_name": "test error datatype", "internalquery": "test error internal query", "context_domain": "test error context domain", "constraint_name": "test error constraint"}

