mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-04-26 21:06:21 +02:00
82 lines
1.9 KiB
Go
82 lines
1.9 KiB
Go
package audit
|
|
|
|
import (
|
|
"os"
|
|
"strings"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestLogger_CreateAndLog(t *testing.T) {
|
|
dir := t.TempDir()
|
|
logger, err := NewLogger(dir)
|
|
require.NoError(t, err)
|
|
defer logger.Close()
|
|
|
|
err = logger.Log("test raw data for audit", "ALLOW:ZERO_G")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 1, logger.Count())
|
|
|
|
err = logger.Log("second operation", "DENY:SECRET")
|
|
require.NoError(t, err)
|
|
assert.Equal(t, 2, logger.Count())
|
|
}
|
|
|
|
func TestLogger_AppendOnly(t *testing.T) {
|
|
dir := t.TempDir()
|
|
|
|
// Write first record.
|
|
logger1, err := NewLogger(dir)
|
|
require.NoError(t, err)
|
|
logger1.Log("first entry", "ALLOW")
|
|
logger1.Close()
|
|
|
|
// Reopen and write second.
|
|
logger2, err := NewLogger(dir)
|
|
require.NoError(t, err)
|
|
logger2.Log("second entry", "DENY")
|
|
logger2.Close()
|
|
|
|
// Read file — should have both records.
|
|
data, err := os.ReadFile(logger2.Path())
|
|
require.NoError(t, err)
|
|
|
|
lines := strings.Split(strings.TrimSpace(string(data)), "\n")
|
|
assert.Equal(t, 2, len(lines), "should have 2 lines (append-only)")
|
|
assert.Contains(t, lines[0], "first entry")
|
|
assert.Contains(t, lines[1], "second entry")
|
|
}
|
|
|
|
func TestLogger_IntentHash(t *testing.T) {
|
|
dir := t.TempDir()
|
|
logger, err := NewLogger(dir)
|
|
require.NoError(t, err)
|
|
defer logger.Close()
|
|
|
|
logger.Log("data to hash", "ALLOW")
|
|
|
|
data, err := os.ReadFile(logger.Path())
|
|
require.NoError(t, err)
|
|
|
|
// SHA-256 hash prefix should be in the output.
|
|
assert.Contains(t, string(data), "|")
|
|
}
|
|
|
|
func TestLogger_LongDataTruncated(t *testing.T) {
|
|
dir := t.TempDir()
|
|
logger, err := NewLogger(dir)
|
|
require.NoError(t, err)
|
|
defer logger.Close()
|
|
|
|
longData := strings.Repeat("A", 500)
|
|
logger.Log(longData, "ALLOW")
|
|
|
|
data, err := os.ReadFile(logger.Path())
|
|
require.NoError(t, err)
|
|
|
|
assert.Contains(t, string(data), "...")
|
|
// Line should not contain full 500-char string.
|
|
assert.Less(t, len(string(data)), 400)
|
|
}
|