From e8e4d8956fcef5f18769305fc595b7e314d9b70e Mon Sep 17 00:00:00 2001 From: Jayanth Varavani <1111446+jayanthvn@users.noreply.github.com> Date: Mon, 21 Aug 2023 02:41:03 +0000 Subject: [PATCH] Events mocks --- pkg/events/events.go | 38 ++++++---- pkg/events/generate_mocks.go | 15 ++++ pkg/events/mocks/events_mocks.go | 115 +++++++++++++++++++++++++++++++ 3 files changed, 156 insertions(+), 12 deletions(-) create mode 100644 pkg/events/generate_mocks.go create mode 100644 pkg/events/mocks/events_mocks.go diff --git a/pkg/events/events.go b/pkg/events/events.go index 8bb90a4..b5767c8 100644 --- a/pkg/events/events.go +++ b/pkg/events/events.go @@ -30,7 +30,26 @@ import ( var log = logger.Get() -type Events struct { +type Events interface { + InitRingBuffer(mapFDlist []int) (map[int]chan []byte, error) + SetupRingBuffer(mapFD int, maxEntries uint32) (chan []byte, error) + CleanupRingBuffer() + reconcileEventsDataChannel() + ReadRingBuffer(eventRing *RingBuffer) + parseBuffer(consumerPosition uint64, eventRing *RingBuffer) bool +} + +var _ Events = &events{} + +func New() Events { + return &events{ + PageSize: os.Getpagesize(), + RingCnt: 0, + } + +} + +type events struct { RingBuffers []*RingBuffer PageSize int RingCnt int @@ -62,18 +81,13 @@ func isValidMapFDList(mapFDlist []int) bool { return true } -func InitRingBuffer(mapFDlist []int) (map[int]chan []byte, error) { +func (ev *events) InitRingBuffer(mapFDlist []int) (map[int]chan []byte, error) { // Validate mapFD if !isValidMapFDList(mapFDlist) { return nil, fmt.Errorf("mapFDs passed to InitRingBuffer is invalid") } - ev := &Events{ - PageSize: os.Getpagesize(), - RingCnt: 0, - } - epoll, err := poller.NewEventPoller() if err != nil { return nil, fmt.Errorf("failed to create epoll instance: %s", err) @@ -101,7 +115,7 @@ func InitRingBuffer(mapFDlist []int) (map[int]chan []byte, error) { return ringBufferChanList, nil } -func (ev *Events) SetupRingBuffer(mapFD int, maxEntries uint32) (chan []byte, error) { +func (ev *events) SetupRingBuffer(mapFD int, maxEntries uint32) (chan []byte, error) { ringbuffer := &RingBuffer{ RingBufferMapFD: mapFD, Mask: uint64(maxEntries - 1), @@ -148,7 +162,7 @@ func (ev *Events) SetupRingBuffer(mapFD int, maxEntries uint32) (chan []byte, er return ev.eventsDataChannel, nil } -func (ev *Events) CleanupRingBuffer() { +func (ev *events) CleanupRingBuffer() { for i := 0; i < ev.RingCnt; i++ { _ = unix.Munmap(ev.RingBuffers[i].Producer) @@ -165,7 +179,7 @@ func (ev *Events) CleanupRingBuffer() { return } -func (ev *Events) reconcileEventsDataChannel() { +func (ev *events) reconcileEventsDataChannel() { pollerCh := ev.epoller.EpollStart() defer func() { @@ -188,7 +202,7 @@ func (ev *Events) reconcileEventsDataChannel() { } // Similar to libbpf poll ring -func (ev *Events) ReadRingBuffer(eventRing *RingBuffer) { +func (ev *events) ReadRingBuffer(eventRing *RingBuffer) { readDone := true consPosition := eventRing.getConsumerPosition() for !readDone { @@ -196,7 +210,7 @@ func (ev *Events) ReadRingBuffer(eventRing *RingBuffer) { } } -func (ev *Events) parseBuffer(consumerPosition uint64, eventRing *RingBuffer) bool { +func (ev *events) parseBuffer(consumerPosition uint64, eventRing *RingBuffer) bool { readDone := true producerPosition := eventRing.getProducerPosition() for consumerPosition < producerPosition { diff --git a/pkg/events/generate_mocks.go b/pkg/events/generate_mocks.go new file mode 100644 index 0000000..919855a --- /dev/null +++ b/pkg/events/generate_mocks.go @@ -0,0 +1,15 @@ +// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"). You may +// not use this file except in compliance with the License. A copy of the +// License is located at +// +// http://aws.amazon.com/apache2.0/ +// +// or in the "license" file accompanying this file. This file is distributed +// on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either +// express or implied. See the License for the specific language governing +// permissions and limitations under the License. +package events + +//go:generate go run github.com/golang/mock/mockgen -destination mocks/events_mocks.go . Events diff --git a/pkg/events/mocks/events_mocks.go b/pkg/events/mocks/events_mocks.go new file mode 100644 index 0000000..31a4b5a --- /dev/null +++ b/pkg/events/mocks/events_mocks.go @@ -0,0 +1,115 @@ +// Code generated by MockGen. DO NOT EDIT. +// Source: github.com/aws/aws-ebpf-sdk-go/pkg/events (interfaces: Events) + +// Package mock_events is a generated GoMock package. +package mock_events + +import ( + reflect "reflect" + + events "github.com/aws/aws-ebpf-sdk-go/pkg/events" + gomock "github.com/golang/mock/gomock" +) + +// MockEvents is a mock of Events interface. +type MockEvents struct { + ctrl *gomock.Controller + recorder *MockEventsMockRecorder +} + +// MockEventsMockRecorder is the mock recorder for MockEvents. +type MockEventsMockRecorder struct { + mock *MockEvents +} + +// NewMockEvents creates a new mock instance. +func NewMockEvents(ctrl *gomock.Controller) *MockEvents { + mock := &MockEvents{ctrl: ctrl} + mock.recorder = &MockEventsMockRecorder{mock} + return mock +} + +// EXPECT returns an object that allows the caller to indicate expected use. +func (m *MockEvents) EXPECT() *MockEventsMockRecorder { + return m.recorder +} + +// CleanupRingBuffer mocks base method. +func (m *MockEvents) CleanupRingBuffer() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "CleanupRingBuffer") +} + +// CleanupRingBuffer indicates an expected call of CleanupRingBuffer. +func (mr *MockEventsMockRecorder) CleanupRingBuffer() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "CleanupRingBuffer", reflect.TypeOf((*MockEvents)(nil).CleanupRingBuffer)) +} + +// InitRingBuffer mocks base method. +func (m *MockEvents) InitRingBuffer(arg0 []int) (map[int]chan []byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "InitRingBuffer", arg0) + ret0, _ := ret[0].(map[int]chan []byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// InitRingBuffer indicates an expected call of InitRingBuffer. +func (mr *MockEventsMockRecorder) InitRingBuffer(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "InitRingBuffer", reflect.TypeOf((*MockEvents)(nil).InitRingBuffer), arg0) +} + +// ReadRingBuffer mocks base method. +func (m *MockEvents) ReadRingBuffer(arg0 *events.RingBuffer) { + m.ctrl.T.Helper() + m.ctrl.Call(m, "ReadRingBuffer", arg0) +} + +// ReadRingBuffer indicates an expected call of ReadRingBuffer. +func (mr *MockEventsMockRecorder) ReadRingBuffer(arg0 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReadRingBuffer", reflect.TypeOf((*MockEvents)(nil).ReadRingBuffer), arg0) +} + +// SetupRingBuffer mocks base method. +func (m *MockEvents) SetupRingBuffer(arg0 int, arg1 uint32) (chan []byte, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "SetupRingBuffer", arg0, arg1) + ret0, _ := ret[0].(chan []byte) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// SetupRingBuffer indicates an expected call of SetupRingBuffer. +func (mr *MockEventsMockRecorder) SetupRingBuffer(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "SetupRingBuffer", reflect.TypeOf((*MockEvents)(nil).SetupRingBuffer), arg0, arg1) +} + +// parseBuffer mocks base method. +func (m *MockEvents) parseBuffer(arg0 uint64, arg1 *events.RingBuffer) bool { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "parseBuffer", arg0, arg1) + ret0, _ := ret[0].(bool) + return ret0 +} + +// parseBuffer indicates an expected call of parseBuffer. +func (mr *MockEventsMockRecorder) parseBuffer(arg0, arg1 interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "parseBuffer", reflect.TypeOf((*MockEvents)(nil).parseBuffer), arg0, arg1) +} + +// reconcileEventsDataChannel mocks base method. +func (m *MockEvents) reconcileEventsDataChannel() { + m.ctrl.T.Helper() + m.ctrl.Call(m, "reconcileEventsDataChannel") +} + +// reconcileEventsDataChannel indicates an expected call of reconcileEventsDataChannel. +func (mr *MockEventsMockRecorder) reconcileEventsDataChannel() *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "reconcileEventsDataChannel", reflect.TypeOf((*MockEvents)(nil).reconcileEventsDataChannel)) +}