mirror of
https://github.com/syntrex-lab/gomcp.git
synced 2026-05-10 03:52:36 +02:00
Release prep: 54 engines, self-hosted signatures, i18n, dashboard updates
This commit is contained in:
parent
694e32be26
commit
41cbfd6e0a
178 changed files with 36008 additions and 399 deletions
123
internal/infrastructure/wasmsandbox/sandbox_test.go
Normal file
123
internal/infrastructure/wasmsandbox/sandbox_test.go
Normal file
|
|
@ -0,0 +1,123 @@
|
|||
package wasmsandbox
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestNewSandbox(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
stats := s.Stats()
|
||||
if stats.TotalExecutions != 0 {
|
||||
t.Errorf("total = %d, want 0", stats.TotalExecutions)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_Log(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
result := s.Execute(ActionRequest{
|
||||
PlaybookID: "pb-001",
|
||||
ActionType: "log",
|
||||
Params: map[string]string{"message": "test event"},
|
||||
})
|
||||
if !result.Success {
|
||||
t.Errorf("expected success, got error: %s", result.Error)
|
||||
}
|
||||
if !result.Sandboxed {
|
||||
t.Error("should be sandboxed")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_BlockIP(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
result := s.Execute(ActionRequest{
|
||||
PlaybookID: "pb-002",
|
||||
ActionType: "block_ip",
|
||||
Params: map[string]string{"ip": "10.0.0.1"},
|
||||
})
|
||||
if !result.Success {
|
||||
t.Errorf("expected success: %s", result.Error)
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_MissingParam(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
result := s.Execute(ActionRequest{
|
||||
PlaybookID: "pb-003",
|
||||
ActionType: "block_ip",
|
||||
Params: map[string]string{}, // Missing 'ip'.
|
||||
})
|
||||
if result.Success {
|
||||
t.Error("expected failure for missing param")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_UnknownAction(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
result := s.Execute(ActionRequest{
|
||||
PlaybookID: "pb-004",
|
||||
ActionType: "delete_everything",
|
||||
Params: map[string]string{},
|
||||
})
|
||||
if result.Success {
|
||||
t.Error("expected failure for unknown action")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_Timeout(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
s.RegisterHandler("slow", func(ctx context.Context, params map[string]string) (string, error) {
|
||||
select {
|
||||
case <-time.After(5 * time.Second):
|
||||
return "done", nil
|
||||
case <-ctx.Done():
|
||||
return "", ctx.Err()
|
||||
}
|
||||
})
|
||||
|
||||
result := s.Execute(ActionRequest{
|
||||
PlaybookID: "pb-005",
|
||||
ActionType: "slow",
|
||||
Timeout: 50 * time.Millisecond,
|
||||
})
|
||||
if result.Success {
|
||||
t.Error("expected timeout failure")
|
||||
}
|
||||
}
|
||||
|
||||
func TestExecute_CustomHandler(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
s.RegisterHandler("custom", func(_ context.Context, params map[string]string) (string, error) {
|
||||
return "custom result: " + params["key"], nil
|
||||
})
|
||||
|
||||
result := s.Execute(ActionRequest{
|
||||
ActionType: "custom",
|
||||
Params: map[string]string{"key": "value"},
|
||||
})
|
||||
if !result.Success {
|
||||
t.Errorf("expected success: %s", result.Error)
|
||||
}
|
||||
if result.Output != "custom result: value" {
|
||||
t.Errorf("output = %s", result.Output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStats(t *testing.T) {
|
||||
s := NewSandbox()
|
||||
s.Execute(ActionRequest{ActionType: "log", Params: map[string]string{}})
|
||||
s.Execute(ActionRequest{ActionType: "block_ip", Params: map[string]string{"ip": "1.2.3.4"}})
|
||||
s.Execute(ActionRequest{ActionType: "unknown"})
|
||||
|
||||
stats := s.Stats()
|
||||
if stats.TotalExecutions != 3 {
|
||||
t.Errorf("total = %d, want 3", stats.TotalExecutions)
|
||||
}
|
||||
if stats.Succeeded != 2 {
|
||||
t.Errorf("succeeded = %d, want 2", stats.Succeeded)
|
||||
}
|
||||
if stats.Failed != 1 {
|
||||
t.Errorf("failed = %d, want 1", stats.Failed)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue