Files
pmg/internal/audit/cloud_sink_test.go
T
Abhisek DattaGitHubdevin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
e67735c1c3 feat: Add cloud sync event emit (#212)
* feat: Add cloud sync event emit

* fix: Linter fixes

* fix: Include malysis metadata in confirmed event

* fix: Code review fixes

* fix: Emit session complet event

* fix: Code review fixes

* chore: Add comment

* chore: Add cloud info in setup info command

* fix: Proxy flow must call install started

* fix: Code review fixes

* fix: Code review fixes

* Update internal/audit/cloud_sink.go

Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Signed-off-by: Abhisek Datta <abhisek.datta@gmail.com>

* fix: Code review fixes

---------

Signed-off-by: Abhisek Datta <abhisek.datta@gmail.com>
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-04-11 12:33:27 +05:30

93 lines
2.3 KiB
Go

package audit
import (
"context"
"testing"
"time"
servicev1 "buf.build/gen/go/safedep/api/protocolbuffers/go/safedep/services/controltower/v1"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
type mockTransport struct {
requests []*servicev1.SyncEventsRequest
closed bool
}
func (m *mockTransport) Send(_ context.Context, req *servicev1.SyncEventsRequest) (*servicev1.SyncEventsResponse, error) {
m.requests = append(m.requests, req)
confirmed := make([]string, 0, len(req.GetEvents()))
for _, e := range req.GetEvents() {
confirmed = append(confirmed, e.GetEventId())
}
return &servicev1.SyncEventsResponse{ConfirmedEventIds: confirmed}, nil
}
func (m *mockTransport) Close() error {
m.closed = true
return nil
}
func TestCloudSinkEmitsTranslatableEvents(t *testing.T) {
transport := &mockTransport{}
walPath := t.TempDir() + "/test-sync.db"
sink, err := newCloudSinkWithTransport(transport, "", walPath)
require.NoError(t, err)
defer func() {
require.NoError(t, sink.Close())
}()
err = sink.Handle(context.Background(), AuditEvent{
Type: EventTypeMalwareBlocked,
Timestamp: time.Now(),
Message: "blocked malware package",
})
assert.NoError(t, err)
}
func TestCloudSinkSkipsUntranslatableEvents(t *testing.T) {
transport := &mockTransport{}
walPath := t.TempDir() + "/test-sync.db"
sink, err := newCloudSinkWithTransport(transport, "", walPath)
require.NoError(t, err)
defer func() {
require.NoError(t, sink.Close())
}()
err = sink.Handle(context.Background(), AuditEvent{
Type: EventTypeProxyHostObserved,
Timestamp: time.Now(),
Message: "observed proxy host",
Hostname: "example.com",
})
assert.NoError(t, err)
}
func TestCloudSinkEmitAndSync(t *testing.T) {
transport := &mockTransport{}
walPath := t.TempDir() + "/test-sync.db"
sink, err := newCloudSinkWithTransport(transport, "", walPath)
require.NoError(t, err)
defer func() {
require.NoError(t, sink.Close())
}()
ctx := context.Background()
err = sink.Handle(ctx, AuditEvent{
Type: EventTypeMalwareBlocked,
Timestamp: time.Now(),
Message: "blocked malware package",
})
require.NoError(t, err)
synced, err := sink.syncClient.Sync(ctx)
require.NoError(t, err)
assert.Equal(t, 1, synced)
assert.Equal(t, 1, len(transport.requests))
}