inetmock/internal/endpoint/registration_test.go
Peter Kurfer 3c7810c32a
All checks were successful
concourse-ci/lint/protobuf Lint protobufs
concourse-ci/test/integration integration tests
concourse-ci/lint/golangci-lint Lint Go files
Add network monitoring through eBPF
- 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
2022-12-21 21:15:05 +01:00

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)
})
}
}