File size: 5,309 Bytes
119e586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
(ns snapkitty.lisp.test.integration-native-binding
  "Integration tests for NASM validators + MCP tools"
  (:require [cljs.test :refer [deftest is testing async]]
            [promesa.core :as p]
            [snapkitty.lisp.native :as native]
            [snapkitty.lisp.mcp.tools :as tools]))

;; ============================================================================
;; Native Library Loading
;; ============================================================================

(deftest test-load-native-library
  "Verify native ASM library loads successfully"
  (async done
    (p/let [loaded? (native/load-native-library! "./native/build/Release/skclisp_native.node")]
      (is (= true loaded?))
      (is (= true (native/is-loaded?)))
      (done))))

;; ============================================================================
;; Mutation Validation Gate
;; ============================================================================

(deftest test-validate-mutation-all-pass
  "Mutation validation passes all 8 checks"
  (async done
    (p/let [result (native/validate-mutation!
                     {:mutation-id 1
                      :generation-before 10
                      :generation-after 11
                      :actor 100
                      :target 200}
                     nil)]
      (is (true? (:passes-gate result)))
      (is (= 255 (:error-code result)))
      (is (= "All checks passed" (:details result)))
      (done))))

(deftest test-validate-mutation-generation-fail
  "Mutation fails on generation check (not monotonic)"
  (async done
    (p/let [result (native/validate-mutation!
                     {:mutation-id 1
                      :generation-before 10
                      :generation-after 10  ; Not greater than before
                      :actor 100
                      :target 200}
                     nil)]
      (is (false? (:passes-gate result)))
      (is (= 8 (:error-code result)))
      (is (clojure.string/includes? (:details result) "generation"))
      (done))))

;; ============================================================================
;; Blake3 Digest Verification
;; ============================================================================

(deftest test-verify-blake3-valid
  "Blake3 digest verification succeeds on valid input"
  (async done
    (p/let [payload (js/Uint8Array. #js [1 2 3 4 5])
            digest (js/Uint8Array. 32)  ; Placeholder 32-byte digest
            result (native/verify-blake3! payload digest)]
      (is (true? (:digest-valid result)))
      (is (= 0 (:error-code result)))
      (done))))

(deftest test-verify-blake3-invalid-input
  "Blake3 verification fails on null input"
  (async done
    (p/let [result (native/verify-blake3! nil nil)]
      (is (false? (:digest-valid result)))
      (is (= 2 (:error-code result)))
      (done))))

;; ============================================================================
;; Ed25519 Signature Verification
;; ============================================================================

(deftest test-verify-ed25519-valid
  "Ed25519 verification succeeds on valid input"
  (async done
    (p/let [message (js/Uint8Array. #js [72 101 108 108 111])  ; "Hello"
            sig (js/Uint8Array. 64)  ; Placeholder signature
            pk (js/Uint8Array. 32)   ; Placeholder public key
            result (native/verify-ed25519! message sig pk)]
      (is (true? (:signature-valid result)))
      (is (= 0 (:error-code result)))
      (done))))

;; ============================================================================
;; MCP Tool Integration
;; ============================================================================

(deftest test-mcp-validate-mutation-tool
  "MCP validate_mutation tool calls native validator"
  (async done
    (p/let [result (tools/handle-validate-mutation
                     {:mutation-id 1
                      :generation-before 10
                      :generation-after 11
                      :actor 100
                      :target 200})]
      (is (clojure.string/includes? result "Mutation validation"))
      (is (or (clojure.string/includes? result "PASS")
              (clojure.string/includes? result "FAIL")))
      (done))))

(deftest test-mcp-verify-blake3-tool
  "MCP verify_blake3 tool calls native validator"
  (async done
    (p/let [result (tools/handle-verify-blake3
                     {:payload "Hello world"
                      :expected-digest "abc123"})]
      (is (clojure.string/includes? result "Blake3 verification"))
      (is (or (clojure.string/includes? result "MATCH")
              (clojure.string/includes? result "MISMATCH")))
      (done))))

(deftest test-mcp-verify-ed25519-tool
  "MCP verify_ed25519 tool calls native validator"
  (async done
    (p/let [result (tools/handle-verify-ed25519
                     {:message "Hello"
                      :signature "sig123456789"
                      :public-key "pk123456789"})]
      (is (clojure.string/includes? result "Ed25519 verification"))
      (is (or (clojure.string/includes? result "VALID")
              (clojure.string/includes? result "INVALID")))
      (done))))