mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-29 14:26:22 +02:00
88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package audit
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDecisionLogger_Record(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dl, err := NewDecisionLogger(dir)
|
|
require.NoError(t, err)
|
|
defer dl.Close()
|
|
|
|
err = dl.Record(ModuleSynapse, "ACCEPT_SYNAPSE", "similarity=0.92, threshold=0.85")
|
|
require.NoError(t, err)
|
|
|
|
err = dl.Record(ModulePeer, "TRUST_UPGRADE", "peer_abc: UNKNOWN → VERIFIED")
|
|
require.NoError(t, err)
|
|
|
|
err = dl.Record(ModuleMode, "MODE_TRANSITION", "ARMED → ZERO-G")
|
|
require.NoError(t, err)
|
|
|
|
assert.Equal(t, 3, dl.Count())
|
|
assert.NotEqual(t, "GENESIS", dl.PrevHash())
|
|
|
|
// Verify file content.
|
|
data, err := os.ReadFile(filepath.Join(dir, "decisions.log"))
|
|
require.NoError(t, err)
|
|
lines := strings.Split(strings.TrimSpace(string(data)), "\n")
|
|
assert.Len(t, lines, 3)
|
|
|
|
// First line should have GENESIS as PrevHash.
|
|
assert.Contains(t, lines[0], "| GENESIS")
|
|
assert.Contains(t, lines[0], "SYNAPSE")
|
|
assert.Contains(t, lines[0], "ACCEPT_SYNAPSE")
|
|
|
|
// Second line should NOT have GENESIS.
|
|
assert.NotContains(t, lines[1], "GENESIS")
|
|
assert.Contains(t, lines[1], "PEER")
|
|
}
|
|
|
|
func TestDecisionLogger_HashChain(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dl, err := NewDecisionLogger(dir)
|
|
require.NoError(t, err)
|
|
|
|
// Record 10 decisions to build a chain.
|
|
for i := 0; i < 10; i++ {
|
|
err := dl.Record(ModuleDIPWatcher, "ALERT", "test alert")
|
|
require.NoError(t, err)
|
|
}
|
|
dl.Close()
|
|
|
|
assert.Equal(t, 10, dl.Count())
|
|
}
|
|
|
|
func TestDecisionLogger_AllModules(t *testing.T) {
|
|
dir := t.TempDir()
|
|
dl, err := NewDecisionLogger(dir)
|
|
require.NoError(t, err)
|
|
defer dl.Close()
|
|
|
|
modules := []DecisionModule{ModuleSynapse, ModulePeer, ModuleMode, ModuleDIPWatcher, ModuleOracle, ModuleGenome, ModuleDoctor}
|
|
for _, m := range modules {
|
|
err := dl.Record(m, "TEST", "testing module "+string(m))
|
|
require.NoError(t, err)
|
|
}
|
|
assert.Equal(t, 7, dl.Count())
|
|
}
|
|
|
|
func TestExtractPrevHash(t *testing.T) {
|
|
line := "[2026-03-09T21:00:00.000+10:00] | SYNAPSE | ACCEPT | reason | abc123hash"
|
|
hash := extractPrevHash(line)
|
|
assert.Equal(t, "abc123hash", hash)
|
|
}
|
|
|
|
func TestSplitLines(t *testing.T) {
|
|
lines := splitLines("line1\nline2\r\nline3")
|
|
assert.Len(t, lines, 3)
|
|
assert.Equal(t, "line1", lines[0])
|
|
assert.Equal(t, "line2", lines[1])
|
|
assert.Equal(t, "line3", lines[2])
|
|
}
|