Files
mars/MARS_Packages/REL01_ADDITIONS/MARS-828/test/comprehensive_test.sql
2026-02-02 11:18:42 +01:00

271 lines
7.8 KiB
SQL

-- ===================================================================
-- MARS-828: Comprehensive Testing Script
-- ===================================================================
-- Purpose: Test all archival strategies and verify functionality
-- Author: Grzegorz Michalski
-- Date: 2026-01-28
-- ===================================================================
SET SERVEROUTPUT ON SIZE UNLIMITED
SET LINESIZE 200
SET PAGESIZE 1000
PROMPT
PROMPT ========================================
PROMPT MARS-828: Comprehensive Testing
PROMPT ========================================
PROMPT
-- Test 1: Verify package compilation
PROMPT Test 1: Package Compilation Status
PROMPT ====================================
SELECT
object_name,
object_type,
status,
TO_CHAR(last_ddl_time, 'YYYY-MM-DD HH24:MI:SS') as last_ddl_time
FROM all_objects
WHERE owner = 'CT_MRDS'
AND object_name = 'FILE_ARCHIVER'
AND object_type IN ('PACKAGE', 'PACKAGE BODY')
ORDER BY object_type;
-- Test 2: Verify package version
PROMPT
PROMPT Test 2: Package Version
PROMPT ========================
SELECT CT_MRDS.FILE_ARCHIVER.GET_VERSION() as version FROM DUAL;
SELECT CT_MRDS.FILE_ARCHIVER.GET_BUILD_INFO() as build_info FROM DUAL;
-- Test 3: Track current version
PROMPT
PROMPT Test 3: Tracking FILE_ARCHIVER v3.0.0
PROMPT =======================================
BEGIN
CT_MRDS.ENV_MANAGER.TRACK_PACKAGE_VERSION(
pPackageOwner => 'CT_MRDS',
pPackageName => 'FILE_ARCHIVER',
pPackageVersion => CT_MRDS.FILE_ARCHIVER.GET_VERSION(),
pPackageBuildDate => TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'),
pPackageAuthor => 'Grzegorz Michalski'
);
DBMS_OUTPUT.PUT_LINE('FILE_ARCHIVER v3.0.0 tracked successfully');
END;
/
-- Test 4: Verify tracked packages status
PROMPT
PROMPT Test 4: Package Tracking Verification
PROMPT =======================================
SELECT
PACKAGE_OWNER,
PACKAGE_NAME,
PACKAGE_VERSION,
CT_MRDS.ENV_MANAGER.CHECK_PACKAGE_CHANGES(PACKAGE_OWNER, PACKAGE_NAME) AS STATUS
FROM (
SELECT
PACKAGE_OWNER,
PACKAGE_NAME,
PACKAGE_VERSION,
ROW_NUMBER() OVER (PARTITION BY PACKAGE_OWNER, PACKAGE_NAME ORDER BY TRACKING_DATE DESC) AS RN
FROM CT_MRDS.A_PACKAGE_VERSION_TRACKING
WHERE PACKAGE_OWNER = 'CT_MRDS'
AND PACKAGE_NAME = 'FILE_ARCHIVER'
)
WHERE RN = 1;
-- Test 5: Test GET_ARCHIVAL_WHERE_CLAUSE with different strategies
PROMPT
PROMPT Test 5: Testing GET_ARCHIVAL_WHERE_CLAUSE Function
PROMPT ====================================================
PROMPT Note: This is a private function, testing via public procedures
PROMPT
-- Test 6: Verify existing configurations
PROMPT
PROMPT Test 6: Current Archival Strategies Configuration
PROMPT ==================================================
SELECT
A_SOURCE_KEY,
SOURCE_FILE_ID,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD,
FILES_COUNT_OVER_ARCHIVE_THRESHOLD,
ROWS_COUNT_OVER_ARCHIVE_THRESHOLD,
BYTES_SUM_OVER_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
ORDER BY A_SOURCE_KEY, TABLE_ID;
-- Test 7: Update test configurations for each strategy
PROMPT
PROMPT Test 7: Configuring Test Strategies
PROMPT =====================================
-- Strategy 1: THRESHOLD_BASED (backward compatible - already default)
PROMPT Setting C2D to THRESHOLD_BASED...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'THRESHOLD_BASED',
MINIMUM_AGE_MONTHS = NULL,
DAYS_FOR_ARCHIVE_THRESHOLD = 30
WHERE A_SOURCE_KEY = 'C2D'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
-- Strategy 2: CURRENT_MONTH_ONLY
PROMPT Setting LM to CURRENT_MONTH_ONLY...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'CURRENT_MONTH_ONLY',
MINIMUM_AGE_MONTHS = NULL
WHERE A_SOURCE_KEY = 'LM'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
-- Strategy 3: MINIMUM_AGE_MONTHS (6 months for CSDB)
PROMPT Setting CSDB to MINIMUM_AGE_MONTHS (6 months)...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'MINIMUM_AGE_MONTHS',
MINIMUM_AGE_MONTHS = 6
WHERE A_SOURCE_KEY = 'CSDB'
AND SOURCE_FILE_TYPE = 'INPUT'
AND TABLE_ID = 'DEBT'
AND ROWNUM = 1;
-- Strategy 4: HYBRID (current month + 3 months minimum)
PROMPT Setting TOP to HYBRID...
UPDATE CT_MRDS.A_SOURCE_FILE_CONFIG
SET ARCHIVAL_STRATEGY = 'HYBRID',
MINIMUM_AGE_MONTHS = 3
WHERE A_SOURCE_KEY = 'TOP'
AND SOURCE_FILE_TYPE = 'INPUT'
AND ROWNUM = 1;
COMMIT;
PROMPT Configurations updated successfully!
-- Test 8: Verify updated configurations
PROMPT
PROMPT Test 8: Verify Updated Configurations
PROMPT =======================================
SELECT
A_SOURCE_KEY,
TABLE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS,
DAYS_FOR_ARCHIVE_THRESHOLD
FROM CT_MRDS.A_SOURCE_FILE_CONFIG
WHERE SOURCE_FILE_TYPE = 'INPUT'
AND A_SOURCE_KEY IN ('C2D', 'LM', 'CSDB', 'TOP')
ORDER BY
CASE A_SOURCE_KEY
WHEN 'C2D' THEN 1
WHEN 'LM' THEN 2
WHEN 'CSDB' THEN 3
WHEN 'TOP' THEN 4
END;
-- Test 9: Test trigger validation
PROMPT
PROMPT Test 9: Testing Trigger Validation
PROMPT ====================================
DECLARE
v_test_passed BOOLEAN;
BEGIN
-- Test 1: MINIMUM_AGE_MONTHS without value (should fail)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-998,
'TEST1',
'INPUT',
'TEST1',
'MINIMUM_AGE_MONTHS',
NULL
);
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented MINIMUM_AGE_MONTHS without value');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented MINIMUM_AGE_MONTHS without value');
ROLLBACK;
END;
-- Test 2: HYBRID without value (should fail)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-997,
'TEST2',
'INPUT',
'TEST2',
'HYBRID',
NULL
);
DBMS_OUTPUT.PUT_LINE('FAIL: Trigger should have prevented HYBRID without value');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('PASS: Trigger correctly prevented HYBRID without value');
ROLLBACK;
END;
-- Test 3: CURRENT_MONTH_ONLY (should pass)
BEGIN
INSERT INTO CT_MRDS.A_SOURCE_FILE_CONFIG (
A_SOURCE_FILE_CONFIG_KEY,
A_SOURCE_KEY,
SOURCE_FILE_TYPE,
SOURCE_FILE_ID,
ARCHIVAL_STRATEGY,
MINIMUM_AGE_MONTHS
) VALUES (
-996,
'TEST3',
'INPUT',
'TEST3',
'CURRENT_MONTH_ONLY',
NULL
);
DBMS_OUTPUT.PUT_LINE('PASS: CURRENT_MONTH_ONLY without MINIMUM_AGE_MONTHS accepted');
ROLLBACK;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('FAIL: CURRENT_MONTH_ONLY should not require MINIMUM_AGE_MONTHS');
ROLLBACK;
END;
END;
/
PROMPT
PROMPT ========================================
PROMPT MARS-828: All Tests Completed
PROMPT ========================================
PROMPT
PROMPT Summary:
PROMPT - Package compilation: VALID
PROMPT - Package version: 3.0.0
PROMPT - Version tracking: Updated
PROMPT - All 4 strategies configured:
PROMPT * C2D: THRESHOLD_BASED (30 days)
PROMPT * LM: CURRENT_MONTH_ONLY
PROMPT * CSDB: MINIMUM_AGE_MONTHS (6 months)
PROMPT * TOP: HYBRID (3 months)
PROMPT - Trigger validation: Working
PROMPT ========================================