From 3a37c66c5a27dd0fdcbcd210c3d080b3d5043385 Mon Sep 17 00:00:00 2001 From: donald1218 Date: Wed, 24 Apr 2024 12:40:07 +0000 Subject: [PATCH] fix: fix fuzzy test --- .gitignore | 3 + go.mod | 1 + go.sum | 4 +- internal/nas/fuzz_test.go | 14 +++ internal/sbi/consumer/ausf_service.go | 3 + pkg/service/init.go | 15 +++- pkg/service/mock.go | 123 ++++++++++++++++++++++++++ 7 files changed, 160 insertions(+), 3 deletions(-) create mode 100644 pkg/service/mock.go diff --git a/.gitignore b/.gitignore index c294e4dc..b24c2086 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,6 @@ cscope.* # Debug *.log *.pcap + +# R17 +openapi \ No newline at end of file diff --git a/go.mod b/go.mod index bb1737d9..62953484 100644 --- a/go.mod +++ b/go.mod @@ -57,6 +57,7 @@ require ( github.com/tim-ywliu/nested-logrus-formatter v1.3.2 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect + go.uber.org/mock v0.4.0 // indirect golang.org/x/arch v0.7.0 // indirect golang.org/x/crypto v0.22.0 // indirect golang.org/x/net v0.24.0 // indirect diff --git a/go.sum b/go.sum index 91b64731..dbef3cc6 100644 --- a/go.sum +++ b/go.sum @@ -127,6 +127,8 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= +go.uber.org/mock v0.4.0 h1:VcM4ZOtdbR4f6VXfiOpwpVJDL6lCReaZ6mw31wqh7KU= +go.uber.org/mock v0.4.0/go.mod h1:a6FSlNadKUHUa9IP5Vyt1zh4fC7uAwxMutEAscFbkZc= golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.7.0 h1:pskyeJh/3AmoQ8CPE95vxHLqp1G1GfGNXTmcl9NEKTc= golang.org/x/arch v0.7.0/go.mod h1:FEVrYAQjsQXMVJ1nsMoVVXPZg6p2JE2mx8psSWTDQys= @@ -156,4 +158,4 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= \ No newline at end of file +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= diff --git a/internal/nas/fuzz_test.go b/internal/nas/fuzz_test.go index 8c533d68..22c593a0 100644 --- a/internal/nas/fuzz_test.go +++ b/internal/nas/fuzz_test.go @@ -7,10 +7,13 @@ import ( "testing" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" amf_context "github.com/free5gc/amf/internal/context" "github.com/free5gc/amf/internal/logger" amf_nas "github.com/free5gc/amf/internal/nas" + "github.com/free5gc/amf/internal/sbi/consumer" + "github.com/free5gc/amf/pkg/service" "github.com/free5gc/nas" "github.com/free5gc/nas/nasMessage" "github.com/free5gc/nas/nasType" @@ -129,6 +132,7 @@ func FuzzHandleNAS2(f *testing.F) { Tac: "1", } amfSelf.SupportTaiLists = []models.Tai{tai} + amfSelf.NrfUri = "test" msg := nas.NewMessage() msg.GmmMessage = nas.NewGmmMessage() @@ -211,6 +215,16 @@ func FuzzHandleNAS2(f *testing.F) { f.Add(buf) f.Fuzz(func(t *testing.T, d []byte) { + ctrl := gomock.NewController(t) + m := service.NewMockApp(ctrl) + service.AMF = m + c, err := consumer.NewConsumer(m) + require.NoError(t, err) + m.EXPECT(). + Consumer(). + AnyTimes(). + Return(c) + ue := new(amf_context.RanUe) ue.Ran = new(amf_context.AmfRan) ue.Ran.AnType = models.AccessType__3_GPP_ACCESS diff --git a/internal/sbi/consumer/ausf_service.go b/internal/sbi/consumer/ausf_service.go index e9427b4d..daea7cda 100644 --- a/internal/sbi/consumer/ausf_service.go +++ b/internal/sbi/consumer/ausf_service.go @@ -51,6 +51,9 @@ func (s *nausfService) SendUEAuthenticationAuthenticateRequest(ue *amf_context.A resynchronizationInfo *models.ResynchronizationInfo, ) (*models.UeAuthenticationCtx, *models.ProblemDetails, error) { client := s.getUEAuthenticationClient(ue.AusfUri) + if client == nil { + return nil, nil, openapi.ReportError("ausf not found") + } amfSelf := amf_context.GetSelf() servedGuami := amfSelf.ServedGuamiList[0] diff --git a/pkg/service/init.go b/pkg/service/init.go index 22b947b1..6a2fad63 100644 --- a/pkg/service/init.go +++ b/pkg/service/init.go @@ -13,6 +13,17 @@ import ( "github.com/free5gc/amf/pkg/factory" ) +var _ App = &AmfApp{} + +type App interface { + Start(tlsKeyLogPath string) + Terminate() + Config() *factory.Config + Context() *amf_context.AMFContext + CancelContext() context.Context + Consumer() *consumer.Consumer +} + type AmfApp struct { cfg *factory.Config amfCtx *amf_context.AMFContext @@ -26,9 +37,9 @@ type AmfApp struct { stop func(*AmfApp) } -var AMF *AmfApp +var AMF App -func GetApp() *AmfApp { +func GetApp() App { return AMF } diff --git a/pkg/service/mock.go b/pkg/service/mock.go new file mode 100644 index 00000000..1a9635c4 --- /dev/null +++ b/pkg/service/mock.go @@ -0,0 +1,123 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: init.go +// +// Generated by this command: +// +// mockgen -source=init.go -package=service -destination interface.go +// + +// Package service is a generated GoMock package. +package service + +import ( + context "context" + reflect "reflect" + + context0 "github.com/free5gc/amf/internal/context" + consumer "github.com/free5gc/amf/internal/sbi/consumer" + factory "github.com/free5gc/amf/pkg/factory" + gomock "go.uber.org/mock/gomock" +) + +// MockApp is a mock of App interface. +type MockApp struct { + ctrl *gomock.Controller + recorder *MockAppMockRecorder +} + +// MockAppMockRecorder is the mock recorder for MockApp. +type MockAppMockRecorder struct { + mock *MockApp +} + +// NewMockApp creates a new mock instance. +func NewMockApp(ctrl *gomock.Controller) *MockApp { + mock := &MockApp{ctrl: ctrl} + mock.recorder = &MockAppMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockApp) EXPECT() *MockAppMockRecorder { + return m.recorder +} + +// CancelContext mocks base method. +func (m *MockApp) CancelContext() context.Context { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "CancelContext") + ret0, _ := ret[0].(context.Context) + return ret0 +} + +// CancelContext indicates an expected call of CancelContext. +func (mr *MockAppMockRecorder) CancelContext() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CancelContext", reflect.TypeOf((*MockApp)(nil).CancelContext)) +} + +// Config mocks base method. +func (m *MockApp) Config() *factory.Config { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Config") + ret0, _ := ret[0].(*factory.Config) + return ret0 +} + +// Config indicates an expected call of Config. +func (mr *MockAppMockRecorder) Config() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Config", reflect.TypeOf((*MockApp)(nil).Config)) +} + +// Consumer mocks base method. +func (m *MockApp) Consumer() *consumer.Consumer { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Consumer") + ret0, _ := ret[0].(*consumer.Consumer) + return ret0 +} + +// Consumer indicates an expected call of Consumer. +func (mr *MockAppMockRecorder) Consumer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Consumer", reflect.TypeOf((*MockApp)(nil).Consumer)) +} + +// Context mocks base method. +func (m *MockApp) Context() *context0.AMFContext { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "Context") + ret0, _ := ret[0].(*context0.AMFContext) + return ret0 +} + +// Context indicates an expected call of Context. +func (mr *MockAppMockRecorder) Context() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Context", reflect.TypeOf((*MockApp)(nil).Context)) +} + +// Start mocks base method. +func (m *MockApp) Start(tlsKeyLogPath string) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Start", tlsKeyLogPath) +} + +// Start indicates an expected call of Start. +func (mr *MockAppMockRecorder) Start(tlsKeyLogPath any) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Start", reflect.TypeOf((*MockApp)(nil).Start), tlsKeyLogPath) +} + +// Terminate mocks base method. +func (m *MockApp) Terminate() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "Terminate") +} + +// Terminate indicates an expected call of Terminate. +func (mr *MockAppMockRecorder) Terminate() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "Terminate", reflect.TypeOf((*MockApp)(nil).Terminate)) +}