Download database/tests/ledger_integrity_test.sql from Esketch/CarboAny: direct link, hf CLI and curl.
- Browser
- Download file 2.97 kB
-
https://huggingface.co/spaces/Esketch/CarboAny/resolve/main/database/tests/ledger_integrity_test.sql
- Command line
-
hf download hf://spaces/Esketch/CarboAny/database/tests/ledger_integrity_test.sql
-
curl -L -o ledger_integrity_test.sql https://huggingface.co/spaces/Esketch/CarboAny/resolve/main/database/tests/ledger_integrity_test.sql
2.97 kB
| /** | |
| * DB-INT-01: ๋น๊ฐ์ญ ์์ฅ ํธ๋ฆฌ๊ฑฐ ๋ฐ ๋ฉฑ๋ฑ์ฑ ์ ์ฝ ๊ฒ์ฆ ์คํฌ๋ฆฝํธ | |
| * | |
| * ์ด ์คํฌ๋ฆฝํธ๋ PostgreSQL ํ๊ฒฝ์์ ์คํ๋์ด settlement_ledger ํ ์ด๋ธ์ | |
| * ๋น๊ฐ์ญ์ฑ(Immutability)๊ณผ ๋ฉฑ๋ฑ์ฑ(Idempotency)์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ๋ณด์ฅ๋๋์ง ํ์ธํฉ๋๋ค. | |
| * | |
| * ์์ ์ฅ์น: | |
| * - ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ์ ๊ฑฐ๋ถํฉ๋๋ค. ๊ฐ์ psql ์ธ์ ์์ | |
| * SET app.carboany_test_mode = 'on'; | |
| * ์ ๋จผ์ ์ง์ ํ ๋ก์ปฌ/ํ ์คํธ DB์์๋ง ์คํํ์ญ์์ค. | |
| * - ๋ชจ๋ ๋ณ๊ฒฝ์ ๋ง์ง๋ง์ ROLLBACK ๋ฉ๋๋ค. | |
| */ | |
| BEGIN; | |
| DO $$ | |
| BEGIN | |
| IF current_setting('app.carboany_test_mode', true) IS DISTINCT FROM 'on' THEN | |
| RAISE EXCEPTION | |
| 'Refusing to run ledger integrity test without SET app.carboany_test_mode = on'; | |
| END IF; | |
| END $$; | |
| -- 1. ํ ์คํธ์ฉ ๋ฐ์ดํฐ ์ฝ์ | |
| INSERT INTO public.settlement_ledger ( | |
| transaction_id, campaign_id, sender_id, sender_name, receiver_id, receiver_name, | |
| category, asset, amount, idempotency_key, previous_hash, entry_hash, description | |
| ) VALUES ( | |
| 'test_txn_001', NULL, 'sponsor-A', 'Sponsor A', 'citizen-001', 'John Doe', | |
| 'POINT_REWARD', 'POINT', 1000.0, 'test_idemp_key_001', NULL, 'test_hash_001', 'Test Entry' | |
| ); | |
| -- 2. UPDATE ์๋ (์๋ฌ ๋ฐ์ ๊ธฐ๋) | |
| DO $$ | |
| BEGIN | |
| BEGIN | |
| UPDATE public.settlement_ledger SET amount = 2000.0 WHERE idempotency_key = 'test_idemp_key_001'; | |
| RAISE EXCEPTION 'Update should have been blocked by trigger'; | |
| EXCEPTION WHEN raise_exception THEN | |
| IF SQLERRM NOT LIKE 'settlement_ledger is append-only:%' THEN | |
| RAISE; | |
| END IF; | |
| RAISE NOTICE 'SUCCESS: Update blocked as expected: %', SQLERRM; | |
| END; | |
| END $$; | |
| -- 3. DELETE ์๋ (์๋ฌ ๋ฐ์ ๊ธฐ๋) | |
| DO $$ | |
| BEGIN | |
| BEGIN | |
| DELETE FROM public.settlement_ledger WHERE idempotency_key = 'test_idemp_key_001'; | |
| RAISE EXCEPTION 'Delete should have been blocked by trigger'; | |
| EXCEPTION WHEN raise_exception THEN | |
| IF SQLERRM NOT LIKE 'settlement_ledger is append-only:%' THEN | |
| RAISE; | |
| END IF; | |
| RAISE NOTICE 'SUCCESS: Delete blocked as expected: %', SQLERRM; | |
| END; | |
| END $$; | |
| -- 4. ๋์ผ Idempotency Key ์ฌ์ฝ์ ์๋ (Unique Violation ๊ธฐ๋) | |
| DO $$ | |
| BEGIN | |
| BEGIN | |
| INSERT INTO public.settlement_ledger ( | |
| transaction_id, campaign_id, sender_id, sender_name, receiver_id, receiver_name, | |
| category, asset, amount, idempotency_key, previous_hash, entry_hash, description | |
| ) VALUES ( | |
| 'test_txn_002', NULL, 'sponsor-A', 'Sponsor A', 'citizen-001', 'John Doe', | |
| 'POINT_REWARD', 'POINT', 1000.0, 'test_idemp_key_001', 'test_hash_001', 'test_hash_002', 'Duplicate Entry' | |
| ); | |
| RAISE EXCEPTION 'Duplicate insert should have been blocked by unique constraint'; | |
| EXCEPTION WHEN unique_violation THEN | |
| RAISE NOTICE 'SUCCESS: Duplicate insert blocked by unique constraint'; | |
| END; | |
| END $$; | |
| ROLLBACK; | |