271 lines
7.8 KiB
SQL
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 ========================================
|