File size: 4,605 Bytes
1d3f990
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
% Test Queries: Validation suite for Prolog logic system
% Run with: swipl -f test_queries.pl -t run_tests

:- use_module(authorization).
:- use_module(transitions).
:- use_module(proofs).
:- use_module(provenance).
:- use_module(release).
:- use_module(agents).
:- use_module(capabilities).
:- use_module(runtimes).
:- use_module(receipts).

% Test suite entry point
run_tests :-
    write('=== AUTHORIZATION TESTS ==='), nl,
    test_capability_active,
    test_agent_authorized,
    test_dispatch_permitted,
    nl, write('=== TRANSITION TESTS ==='), nl,
    test_transition_valid,
    test_state_reachable,
    nl, write('=== PROOF TESTS ==='), nl,
    test_proof_satisfied,
    nl, write('=== PROVENANCE TESTS ==='), nl,
    test_receipt_chain_valid,
    nl, write('=== RELEASE READINESS ==='), nl,
    test_release_ready,
    nl, write('=== ALL TESTS PASSED ==='), nl.

% Test: capability_active/2
test_capability_active :-
    write('Testing capability_active/2...'), nl,
    (capability_active('capa_001_loc_rust_exec', true)
        -> write('  PASS: capa_001_loc_rust_exec is active'), nl
        ; write('  FAIL: capa_001_loc_rust_exec should be active'), nl),
    (capability_active('capa_006_phantom_rust_log', false)
        -> write('  PASS: capa_006_phantom_rust_log is inactive (expired)'), nl
        ; write('  FAIL: capa_006_phantom_rust_log should be inactive'), nl).

% Test: agent_authorized/3
test_agent_authorized :-
    write('Testing agent_authorized/3...'), nl,
    (agent_authorized(loc, 'capa_001_loc_rust_exec', rust)
        -> write('  PASS: loc is authorized for capa_001 on rust'), nl
        ; write('  FAIL: loc should be authorized'), nl),
    (agent_authorized(phantom, 'capa_006_phantom_rust_log', rust)
        -> write('  FAIL: phantom (tier_2) should not be authorized'), nl
        ; write('  PASS: phantom (tier_2) is not authorized (correct)'), nl).

% Test: dispatch_permitted/5
test_dispatch_permitted :-
    write('Testing dispatch_permitted/5...'), nl,
    (dispatch_permitted(loc, 'capa_001_loc_rust_exec', rust, dispatch, true)
        -> write('  PASS: loc can dispatch on rust'), nl
        ; write('  FAIL: loc should be able to dispatch'), nl),
    (dispatch_permitted(loc, 'capa_001_loc_rust_exec', rust, invalid_perm, false)
        -> write('  PASS: dispatch rejected for invalid_perm'), nl
        ; write('  FAIL: dispatch should be rejected for invalid_perm'), nl).

% Test: transition_valid/3
test_transition_valid :-
    write('Testing transition_valid/3...'), nl,
    (transition_valid(receive, translate, true)
        -> write('  PASS: receive->translate is valid'), nl
        ; write('  FAIL: receive->translate should be valid'), nl),
    (transition_valid(receive, execute, false)
        -> write('  PASS: receive->execute is invalid (correct)'), nl
        ; write('  FAIL: receive->execute should be invalid'), nl).

% Test: state_reachable/3
test_state_reachable :-
    write('Testing state_reachable/3...'), nl,
    (state_reachable(dispatch, initial, true)
        -> write('  PASS: dispatch is reachable from initial'), nl
        ; write('  FAIL: dispatch should be reachable'), nl),
    (state_reachable(complete, initial, true)
        -> write('  PASS: complete is reachable from initial'), nl
        ; write('  FAIL: complete should be reachable'), nl).

% Test: proof_satisfied/2
test_proof_satisfied :-
    write('Testing proof_satisfied/2...'), nl,
    (proof_satisfied('proof_borrow_step_sound', true)
        -> write('  PASS: proof_borrow_step_sound is satisfied'), nl
        ; write('  FAIL: proof_borrow_step_sound should be satisfied'), nl),
    (proof_satisfied('nonexistent_proof', false)
        -> write('  PASS: nonexistent_proof is not satisfied (correct)'), nl
        ; write('  FAIL: nonexistent_proof should not be satisfied'), nl).

% Test: receipt_chain_valid/1
test_receipt_chain_valid :-
    write('Testing receipt_chain_valid/1...'), nl,
    (receipt_chain_valid(true)
        -> write('  PASS: receipt chain is valid'), nl
        ; write('  FAIL: receipt chain should be valid'), nl).

% Test: release_ready/1
test_release_ready :-
    write('Testing release_ready/1...'), nl,
    (release_ready(true)
        -> write('  PASS: system is release-ready'), nl
        ; write('  FAIL: system should be release-ready'), nl),
    write('  Readiness report:'), nl,
    readiness_report(Report),
    forall(member(check(Name, Result), Report),
        format('    ~w: ~w~n', [Name, Result])).