Peter Kurfer
3c7810c32a
- introduce netmon details to be emitted whenever a packet is observed not handled by InetMock - rework cache configuration to re-use the same cache instance for all DNS handlers - add an API to enable network monitoring per network interface including whitelists for IPs and ports
115 lines
3.5 KiB
Go
115 lines
3.5 KiB
Go
package endpoint_test
|
|
|
|
import (
|
|
"testing"
|
|
"testing/fstest"
|
|
|
|
"github.com/golang/mock/gomock"
|
|
"github.com/maxatome/go-testdeep/td"
|
|
|
|
"inetmock.icb4dc0.de/inetmock/internal/endpoint"
|
|
audit_mock "inetmock.icb4dc0.de/inetmock/internal/mock/audit"
|
|
"inetmock.icb4dc0.de/inetmock/pkg/logging"
|
|
dnsmock "inetmock.icb4dc0.de/inetmock/protocols/dns/mock"
|
|
httpmock "inetmock.icb4dc0.de/inetmock/protocols/http/mock"
|
|
)
|
|
|
|
func Test_handlerRegistry_AvailableHandlers(t *testing.T) {
|
|
t.Parallel()
|
|
tests := []struct {
|
|
name string
|
|
handlerRegistrySetup func(tb testing.TB, ctrl *gomock.Controller) endpoint.HandlerRegistry
|
|
wantAvailableHandlers any
|
|
}{
|
|
{
|
|
name: "Empty registry",
|
|
handlerRegistrySetup: func(testing.TB, *gomock.Controller) endpoint.HandlerRegistry {
|
|
return endpoint.NewHandlerRegistry()
|
|
},
|
|
wantAvailableHandlers: td.Nil(),
|
|
},
|
|
{
|
|
name: "Single handler registered",
|
|
handlerRegistrySetup: func(tb testing.TB, ctrl *gomock.Controller) endpoint.HandlerRegistry {
|
|
tb.Helper()
|
|
registry := endpoint.NewHandlerRegistry()
|
|
logger := logging.CreateTestLogger(tb)
|
|
emitter := audit_mock.NewMockEmitter(ctrl)
|
|
httpmock.AddHTTPMock(registry, logger, emitter, new(fstest.MapFS))
|
|
return registry
|
|
},
|
|
wantAvailableHandlers: td.Set(endpoint.HandlerReference("http_mock")),
|
|
},
|
|
{
|
|
name: "Multiple handlers registered",
|
|
handlerRegistrySetup: func(tb testing.TB, ctrl *gomock.Controller) endpoint.HandlerRegistry {
|
|
tb.Helper()
|
|
registry := endpoint.NewHandlerRegistry()
|
|
logger := logging.CreateTestLogger(tb)
|
|
emitter := audit_mock.NewMockEmitter(ctrl)
|
|
httpmock.AddHTTPMock(registry, logger, emitter, new(fstest.MapFS))
|
|
dnsmock.AddDNSMock(registry, logger, emitter)
|
|
return registry
|
|
},
|
|
wantAvailableHandlers: td.Set(
|
|
endpoint.HandlerReference("dns_mock"),
|
|
endpoint.HandlerReference("http_mock"),
|
|
),
|
|
},
|
|
}
|
|
for _, tc := range tests {
|
|
tt := tc
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
ctrl := gomock.NewController(t)
|
|
gotAvailableHandlers := tt.handlerRegistrySetup(t, ctrl).AvailableHandlers()
|
|
td.Cmp(t, gotAvailableHandlers, tt.wantAvailableHandlers)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_handlerRegistry_HandlerForName(t *testing.T) {
|
|
t.Parallel()
|
|
tests := []struct {
|
|
name string
|
|
handlerRegistrySetup func(tb testing.TB, ctrl *gomock.Controller) endpoint.HandlerRegistry
|
|
handlerRef endpoint.HandlerReference
|
|
wantInstance any
|
|
wantOk bool
|
|
}{
|
|
{
|
|
name: "Empty registry",
|
|
handlerRegistrySetup: func(tb testing.TB, _ *gomock.Controller) endpoint.HandlerRegistry {
|
|
tb.Helper()
|
|
return endpoint.NewHandlerRegistry()
|
|
},
|
|
handlerRef: "http_mock",
|
|
wantInstance: nil,
|
|
wantOk: false,
|
|
},
|
|
{
|
|
name: "Registry with HTTP mock registered",
|
|
handlerRegistrySetup: func(tb testing.TB, ctrl *gomock.Controller) endpoint.HandlerRegistry {
|
|
tb.Helper()
|
|
registry := endpoint.NewHandlerRegistry()
|
|
logger := logging.CreateTestLogger(tb)
|
|
emitter := audit_mock.NewMockEmitter(ctrl)
|
|
httpmock.AddHTTPMock(registry, logger, emitter, new(fstest.MapFS))
|
|
return registry
|
|
},
|
|
handlerRef: "http_mock",
|
|
wantInstance: td.NotNil(),
|
|
wantOk: true,
|
|
},
|
|
}
|
|
for _, tc := range tests {
|
|
tt := tc
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
t.Parallel()
|
|
ctrl := gomock.NewController(t)
|
|
gotInstance, gotOk := tt.handlerRegistrySetup(t, ctrl).HandlerForName(tt.handlerRef)
|
|
td.Cmp(t, gotInstance, tt.wantInstance)
|
|
td.Cmp(t, gotOk, tt.wantOk)
|
|
})
|
|
}
|
|
}
|