44 lines
2.0 KiB
Common Lisp
44 lines
2.0 KiB
Common Lisp
(defpackage :opencortex-act-tests
|
|
(:use :cl :fiveam :opencortex))
|
|
(in-package :opencortex-act-tests)
|
|
|
|
(def-suite act-suite
|
|
:description "Verification of the Act Gate and Symbolic Guard.")
|
|
(in-suite act-suite)
|
|
|
|
(test test-act-gate-symbolic-guard-bypass
|
|
"Verify that opencortex:act-gate proceeds normally when no skill intercepts."
|
|
(clrhash opencortex::*skills-registry*)
|
|
(let* ((signal (list :type :EVENT :status nil :depth 0 :approved-action '(:target :cli :payload (:text "Hello"))))
|
|
(result (opencortex:act-gate signal)))
|
|
(is (eq :acted (getf signal :status)))
|
|
(is (null result))))
|
|
|
|
(test test-act-gate-symbolic-guard-interception
|
|
"Verify that opencortex:act-gate intercepts actions when a skill returns a LOG/EVENT."
|
|
(clrhash opencortex::*skills-registry*)
|
|
;; Register a mock skill that acts like a symbolic guard
|
|
(opencortex::defskill :mock-bouncer
|
|
:priority 200
|
|
:trigger (lambda (ctx) t)
|
|
:deterministic (lambda (action ctx)
|
|
(declare (ignore action ctx))
|
|
'(:type :LOG :payload (:text "BLOCKED BY SYMBOLIC GUARD"))))
|
|
|
|
(let* ((signal (list :type :EVENT :status nil :depth 0 :approved-action '(:target :shell :payload (:cmd "ls"))))
|
|
(result (opencortex:act-gate signal)))
|
|
(is (eq :acted (getf signal :status)))
|
|
(is (not (null result)))
|
|
(is (eq :LOG (getf result :type)))
|
|
(is (search "BLOCKED BY SYMBOLIC GUARD" (getf (getf result :payload) :text)))
|
|
;; The approved action in signal should be NIL'd out
|
|
(is (null (getf signal :approved-action)))))
|
|
|
|
(test test-act-gate-symbolic-guard-pass-through
|
|
"Verify that opencortex:act-gate allows actions when skills permit them."
|
|
(clrhash opencortex::*skills-registry*)
|
|
(let* ((signal (list :type :EVENT :status nil :depth 0 :approved-action '(:target :cli :payload (:text "Allowed"))))
|
|
(result (opencortex:act-gate signal)))
|
|
(is (eq :acted (getf signal :status)))
|
|
(is (equal '(:target :cli :payload (:text "Allowed")) (getf signal :approved-action)))))
|