mirror of
https://github.com/dstotijn/hetty.git
synced 2025-07-01 18:47:29 -04:00
Remove database mocks, replace Service
interface indirection
This commit is contained in:
2
go.mod
2
go.mod
@ -8,7 +8,6 @@ require (
|
|||||||
github.com/dgraph-io/badger/v3 v3.2103.2
|
github.com/dgraph-io/badger/v3 v3.2103.2
|
||||||
github.com/google/go-cmp v0.5.6
|
github.com/google/go-cmp v0.5.6
|
||||||
github.com/gorilla/mux v1.7.4
|
github.com/gorilla/mux v1.7.4
|
||||||
github.com/matryer/moq v0.2.5
|
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/oklog/ulid v1.3.1
|
github.com/oklog/ulid v1.3.1
|
||||||
github.com/peterbourgon/ff/v3 v3.1.2
|
github.com/peterbourgon/ff/v3 v3.1.2
|
||||||
@ -40,6 +39,7 @@ require (
|
|||||||
github.com/josharian/intern v1.0.0 // indirect
|
github.com/josharian/intern v1.0.0 // indirect
|
||||||
github.com/klauspost/compress v1.12.3 // indirect
|
github.com/klauspost/compress v1.12.3 // indirect
|
||||||
github.com/mailru/easyjson v0.7.7 // indirect
|
github.com/mailru/easyjson v0.7.7 // indirect
|
||||||
|
github.com/matryer/moq v0.2.5 // indirect
|
||||||
github.com/mitchellh/mapstructure v1.1.2 // indirect
|
github.com/mitchellh/mapstructure v1.1.2 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/russross/blackfriday/v2 v2.0.1 // indirect
|
github.com/russross/blackfriday/v2 v2.0.1 // indirect
|
||||||
|
@ -40,10 +40,10 @@ var revHTTPProtocolMap = map[HTTPProtocol]string{
|
|||||||
}
|
}
|
||||||
|
|
||||||
type Resolver struct {
|
type Resolver struct {
|
||||||
ProjectService proj.Service
|
ProjectService *proj.Service
|
||||||
RequestLogService reqlog.Service
|
RequestLogService *reqlog.Service
|
||||||
InterceptService *intercept.Service
|
InterceptService *intercept.Service
|
||||||
SenderService sender.Service
|
SenderService *sender.Service
|
||||||
}
|
}
|
||||||
|
|
||||||
type (
|
type (
|
||||||
@ -865,7 +865,7 @@ func parseInterceptItem(item intercept.Item) (req HTTPRequest, err error) {
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseProject(projSvc proj.Service, p proj.Project) Project {
|
func parseProject(projSvc *proj.Service, p proj.Project) Project {
|
||||||
project := Project{
|
project := Project{
|
||||||
ID: p.ID,
|
ID: p.ID,
|
||||||
Name: p.Name,
|
Name: p.Name,
|
||||||
|
@ -21,27 +21,11 @@ import (
|
|||||||
//nolint:gosec
|
//nolint:gosec
|
||||||
var ulidEntropy = rand.New(rand.NewSource(time.Now().UnixNano()))
|
var ulidEntropy = rand.New(rand.NewSource(time.Now().UnixNano()))
|
||||||
|
|
||||||
// Service is used for managing projects.
|
type Service struct {
|
||||||
type Service interface {
|
|
||||||
CreateProject(ctx context.Context, name string) (Project, error)
|
|
||||||
OpenProject(ctx context.Context, projectID ulid.ULID) (Project, error)
|
|
||||||
CloseProject() error
|
|
||||||
DeleteProject(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
ActiveProject(ctx context.Context) (Project, error)
|
|
||||||
IsProjectActive(projectID ulid.ULID) bool
|
|
||||||
Projects(ctx context.Context) ([]Project, error)
|
|
||||||
Scope() *scope.Scope
|
|
||||||
SetScopeRules(ctx context.Context, rules []scope.Rule) error
|
|
||||||
SetRequestLogFindFilter(ctx context.Context, filter reqlog.FindRequestsFilter) error
|
|
||||||
SetSenderRequestFindFilter(ctx context.Context, filter sender.FindRequestsFilter) error
|
|
||||||
UpdateInterceptSettings(ctx context.Context, settings intercept.Settings) error
|
|
||||||
}
|
|
||||||
|
|
||||||
type service struct {
|
|
||||||
repo Repository
|
repo Repository
|
||||||
interceptSvc *intercept.Service
|
interceptSvc *intercept.Service
|
||||||
reqLogSvc reqlog.Service
|
reqLogSvc *reqlog.Service
|
||||||
senderSvc sender.Service
|
senderSvc *sender.Service
|
||||||
scope *scope.Scope
|
scope *scope.Scope
|
||||||
activeProjectID ulid.ULID
|
activeProjectID ulid.ULID
|
||||||
mu sync.RWMutex
|
mu sync.RWMutex
|
||||||
@ -87,14 +71,14 @@ var nameRegexp = regexp.MustCompile(`^[\w\d\s]+$`)
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
Repository Repository
|
Repository Repository
|
||||||
InterceptService *intercept.Service
|
InterceptService *intercept.Service
|
||||||
ReqLogService reqlog.Service
|
ReqLogService *reqlog.Service
|
||||||
SenderService sender.Service
|
SenderService *sender.Service
|
||||||
Scope *scope.Scope
|
Scope *scope.Scope
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewService returns a new Service.
|
// NewService returns a new Service.
|
||||||
func NewService(cfg Config) (Service, error) {
|
func NewService(cfg Config) (*Service, error) {
|
||||||
return &service{
|
return &Service{
|
||||||
repo: cfg.Repository,
|
repo: cfg.Repository,
|
||||||
interceptSvc: cfg.InterceptService,
|
interceptSvc: cfg.InterceptService,
|
||||||
reqLogSvc: cfg.ReqLogService,
|
reqLogSvc: cfg.ReqLogService,
|
||||||
@ -103,7 +87,7 @@ func NewService(cfg Config) (Service, error) {
|
|||||||
}, nil
|
}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) CreateProject(ctx context.Context, name string) (Project, error) {
|
func (svc *Service) CreateProject(ctx context.Context, name string) (Project, error) {
|
||||||
if !nameRegexp.MatchString(name) {
|
if !nameRegexp.MatchString(name) {
|
||||||
return Project{}, ErrInvalidName
|
return Project{}, ErrInvalidName
|
||||||
}
|
}
|
||||||
@ -122,7 +106,7 @@ func (svc *service) CreateProject(ctx context.Context, name string) (Project, er
|
|||||||
}
|
}
|
||||||
|
|
||||||
// CloseProject closes the currently open project (if there is one).
|
// CloseProject closes the currently open project (if there is one).
|
||||||
func (svc *service) CloseProject() error {
|
func (svc *Service) CloseProject() error {
|
||||||
svc.mu.Lock()
|
svc.mu.Lock()
|
||||||
defer svc.mu.Unlock()
|
defer svc.mu.Unlock()
|
||||||
|
|
||||||
@ -148,7 +132,7 @@ func (svc *service) CloseProject() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// DeleteProject removes a project from the repository.
|
// DeleteProject removes a project from the repository.
|
||||||
func (svc *service) DeleteProject(ctx context.Context, projectID ulid.ULID) error {
|
func (svc *Service) DeleteProject(ctx context.Context, projectID ulid.ULID) error {
|
||||||
if svc.activeProjectID.Compare(projectID) == 0 {
|
if svc.activeProjectID.Compare(projectID) == 0 {
|
||||||
return fmt.Errorf("proj: project (%v) is active", projectID.String())
|
return fmt.Errorf("proj: project (%v) is active", projectID.String())
|
||||||
}
|
}
|
||||||
@ -161,7 +145,7 @@ func (svc *service) DeleteProject(ctx context.Context, projectID ulid.ULID) erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OpenProject sets a project as the currently active project.
|
// OpenProject sets a project as the currently active project.
|
||||||
func (svc *service) OpenProject(ctx context.Context, projectID ulid.ULID) (Project, error) {
|
func (svc *Service) OpenProject(ctx context.Context, projectID ulid.ULID) (Project, error) {
|
||||||
svc.mu.Lock()
|
svc.mu.Lock()
|
||||||
defer svc.mu.Unlock()
|
defer svc.mu.Unlock()
|
||||||
|
|
||||||
@ -203,7 +187,7 @@ func (svc *service) OpenProject(ctx context.Context, projectID ulid.ULID) (Proje
|
|||||||
return project, nil
|
return project, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) ActiveProject(ctx context.Context) (Project, error) {
|
func (svc *Service) ActiveProject(ctx context.Context) (Project, error) {
|
||||||
activeProjectID := svc.activeProjectID
|
activeProjectID := svc.activeProjectID
|
||||||
if activeProjectID.Compare(ulid.ULID{}) == 0 {
|
if activeProjectID.Compare(ulid.ULID{}) == 0 {
|
||||||
return Project{}, ErrNoProject
|
return Project{}, ErrNoProject
|
||||||
@ -219,7 +203,7 @@ func (svc *service) ActiveProject(ctx context.Context) (Project, error) {
|
|||||||
return project, nil
|
return project, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) Projects(ctx context.Context) ([]Project, error) {
|
func (svc *Service) Projects(ctx context.Context) ([]Project, error) {
|
||||||
projects, err := svc.repo.Projects(ctx)
|
projects, err := svc.repo.Projects(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("proj: could not get projects: %w", err)
|
return nil, fmt.Errorf("proj: could not get projects: %w", err)
|
||||||
@ -228,11 +212,11 @@ func (svc *service) Projects(ctx context.Context) ([]Project, error) {
|
|||||||
return projects, nil
|
return projects, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) Scope() *scope.Scope {
|
func (svc *Service) Scope() *scope.Scope {
|
||||||
return svc.scope
|
return svc.scope
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetScopeRules(ctx context.Context, rules []scope.Rule) error {
|
func (svc *Service) SetScopeRules(ctx context.Context, rules []scope.Rule) error {
|
||||||
project, err := svc.ActiveProject(ctx)
|
project, err := svc.ActiveProject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -250,7 +234,7 @@ func (svc *service) SetScopeRules(ctx context.Context, rules []scope.Rule) error
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetRequestLogFindFilter(ctx context.Context, filter reqlog.FindRequestsFilter) error {
|
func (svc *Service) SetRequestLogFindFilter(ctx context.Context, filter reqlog.FindRequestsFilter) error {
|
||||||
project, err := svc.ActiveProject(ctx)
|
project, err := svc.ActiveProject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -271,7 +255,7 @@ func (svc *service) SetRequestLogFindFilter(ctx context.Context, filter reqlog.F
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetSenderRequestFindFilter(ctx context.Context, filter sender.FindRequestsFilter) error {
|
func (svc *Service) SetSenderRequestFindFilter(ctx context.Context, filter sender.FindRequestsFilter) error {
|
||||||
project, err := svc.ActiveProject(ctx)
|
project, err := svc.ActiveProject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -292,11 +276,11 @@ func (svc *service) SetSenderRequestFindFilter(ctx context.Context, filter sende
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) IsProjectActive(projectID ulid.ULID) bool {
|
func (svc *Service) IsProjectActive(projectID ulid.ULID) bool {
|
||||||
return projectID.Compare(svc.activeProjectID) == 0
|
return projectID.Compare(svc.activeProjectID) == 0
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) UpdateInterceptSettings(ctx context.Context, settings intercept.Settings) error {
|
func (svc *Service) UpdateInterceptSettings(ctx context.Context, settings intercept.Settings) error {
|
||||||
project, err := svc.ActiveProject(ctx)
|
project, err := svc.ActiveProject(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -1,291 +0,0 @@
|
|||||||
// Code generated by moq; DO NOT EDIT.
|
|
||||||
// github.com/matryer/moq
|
|
||||||
|
|
||||||
package reqlog_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
|
||||||
"github.com/dstotijn/hetty/pkg/scope"
|
|
||||||
"github.com/oklog/ulid"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Ensure, that RepoMock does implement reqlog.Repository.
|
|
||||||
// If this is not the case, regenerate this file with moq.
|
|
||||||
var _ reqlog.Repository = &RepoMock{}
|
|
||||||
|
|
||||||
// RepoMock is a mock implementation of reqlog.Repository.
|
|
||||||
//
|
|
||||||
// func TestSomethingThatUsesRepository(t *testing.T) {
|
|
||||||
//
|
|
||||||
// // make and configure a mocked reqlog.Repository
|
|
||||||
// mockedRepository := &RepoMock{
|
|
||||||
// ClearRequestLogsFunc: func(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
// panic("mock out the ClearRequestLogs method")
|
|
||||||
// },
|
|
||||||
// FindRequestLogByIDFunc: func(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error) {
|
|
||||||
// panic("mock out the FindRequestLogByID method")
|
|
||||||
// },
|
|
||||||
// FindRequestLogsFunc: func(ctx context.Context, filter reqlog.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]reqlog.RequestLog, error) {
|
|
||||||
// panic("mock out the FindRequestLogs method")
|
|
||||||
// },
|
|
||||||
// StoreRequestLogFunc: func(ctx context.Context, reqLog reqlog.RequestLog) error {
|
|
||||||
// panic("mock out the StoreRequestLog method")
|
|
||||||
// },
|
|
||||||
// StoreResponseLogFunc: func(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error {
|
|
||||||
// panic("mock out the StoreResponseLog method")
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // use mockedRepository in code that requires reqlog.Repository
|
|
||||||
// // and then make assertions.
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
type RepoMock struct {
|
|
||||||
// ClearRequestLogsFunc mocks the ClearRequestLogs method.
|
|
||||||
ClearRequestLogsFunc func(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
|
|
||||||
// FindRequestLogByIDFunc mocks the FindRequestLogByID method.
|
|
||||||
FindRequestLogByIDFunc func(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error)
|
|
||||||
|
|
||||||
// FindRequestLogsFunc mocks the FindRequestLogs method.
|
|
||||||
FindRequestLogsFunc func(ctx context.Context, filter reqlog.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]reqlog.RequestLog, error)
|
|
||||||
|
|
||||||
// StoreRequestLogFunc mocks the StoreRequestLog method.
|
|
||||||
StoreRequestLogFunc func(ctx context.Context, reqLog reqlog.RequestLog) error
|
|
||||||
|
|
||||||
// StoreResponseLogFunc mocks the StoreResponseLog method.
|
|
||||||
StoreResponseLogFunc func(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error
|
|
||||||
|
|
||||||
// calls tracks calls to the methods.
|
|
||||||
calls struct {
|
|
||||||
// ClearRequestLogs holds details about calls to the ClearRequestLogs method.
|
|
||||||
ClearRequestLogs []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ProjectID is the projectID argument value.
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindRequestLogByID holds details about calls to the FindRequestLogByID method.
|
|
||||||
FindRequestLogByID []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ID is the id argument value.
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindRequestLogs holds details about calls to the FindRequestLogs method.
|
|
||||||
FindRequestLogs []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// Filter is the filter argument value.
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
// ScopeMoqParam is the scopeMoqParam argument value.
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}
|
|
||||||
// StoreRequestLog holds details about calls to the StoreRequestLog method.
|
|
||||||
StoreRequestLog []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ReqLog is the reqLog argument value.
|
|
||||||
ReqLog reqlog.RequestLog
|
|
||||||
}
|
|
||||||
// StoreResponseLog holds details about calls to the StoreResponseLog method.
|
|
||||||
StoreResponseLog []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ReqLogID is the reqLogID argument value.
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
// ResLog is the resLog argument value.
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lockClearRequestLogs sync.RWMutex
|
|
||||||
lockFindRequestLogByID sync.RWMutex
|
|
||||||
lockFindRequestLogs sync.RWMutex
|
|
||||||
lockStoreRequestLog sync.RWMutex
|
|
||||||
lockStoreResponseLog sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearRequestLogs calls ClearRequestLogsFunc.
|
|
||||||
func (mock *RepoMock) ClearRequestLogs(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
if mock.ClearRequestLogsFunc == nil {
|
|
||||||
panic("RepoMock.ClearRequestLogsFunc: method is nil but Repository.ClearRequestLogs was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ProjectID: projectID,
|
|
||||||
}
|
|
||||||
mock.lockClearRequestLogs.Lock()
|
|
||||||
mock.calls.ClearRequestLogs = append(mock.calls.ClearRequestLogs, callInfo)
|
|
||||||
mock.lockClearRequestLogs.Unlock()
|
|
||||||
return mock.ClearRequestLogsFunc(ctx, projectID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearRequestLogsCalls gets all the calls that were made to ClearRequestLogs.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.ClearRequestLogsCalls())
|
|
||||||
func (mock *RepoMock) ClearRequestLogsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockClearRequestLogs.RLock()
|
|
||||||
calls = mock.calls.ClearRequestLogs
|
|
||||||
mock.lockClearRequestLogs.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogByID calls FindRequestLogByIDFunc.
|
|
||||||
func (mock *RepoMock) FindRequestLogByID(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error) {
|
|
||||||
if mock.FindRequestLogByIDFunc == nil {
|
|
||||||
panic("RepoMock.FindRequestLogByIDFunc: method is nil but Repository.FindRequestLogByID was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ID: id,
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogByID.Lock()
|
|
||||||
mock.calls.FindRequestLogByID = append(mock.calls.FindRequestLogByID, callInfo)
|
|
||||||
mock.lockFindRequestLogByID.Unlock()
|
|
||||||
return mock.FindRequestLogByIDFunc(ctx, id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogByIDCalls gets all the calls that were made to FindRequestLogByID.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.FindRequestLogByIDCalls())
|
|
||||||
func (mock *RepoMock) FindRequestLogByIDCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogByID.RLock()
|
|
||||||
calls = mock.calls.FindRequestLogByID
|
|
||||||
mock.lockFindRequestLogByID.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogs calls FindRequestLogsFunc.
|
|
||||||
func (mock *RepoMock) FindRequestLogs(ctx context.Context, filter reqlog.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]reqlog.RequestLog, error) {
|
|
||||||
if mock.FindRequestLogsFunc == nil {
|
|
||||||
panic("RepoMock.FindRequestLogsFunc: method is nil but Repository.FindRequestLogs was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
Filter: filter,
|
|
||||||
ScopeMoqParam: scopeMoqParam,
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogs.Lock()
|
|
||||||
mock.calls.FindRequestLogs = append(mock.calls.FindRequestLogs, callInfo)
|
|
||||||
mock.lockFindRequestLogs.Unlock()
|
|
||||||
return mock.FindRequestLogsFunc(ctx, filter, scopeMoqParam)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogsCalls gets all the calls that were made to FindRequestLogs.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.FindRequestLogsCalls())
|
|
||||||
func (mock *RepoMock) FindRequestLogsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogs.RLock()
|
|
||||||
calls = mock.calls.FindRequestLogs
|
|
||||||
mock.lockFindRequestLogs.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreRequestLog calls StoreRequestLogFunc.
|
|
||||||
func (mock *RepoMock) StoreRequestLog(ctx context.Context, reqLog reqlog.RequestLog) error {
|
|
||||||
if mock.StoreRequestLogFunc == nil {
|
|
||||||
panic("RepoMock.StoreRequestLogFunc: method is nil but Repository.StoreRequestLog was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLog reqlog.RequestLog
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ReqLog: reqLog,
|
|
||||||
}
|
|
||||||
mock.lockStoreRequestLog.Lock()
|
|
||||||
mock.calls.StoreRequestLog = append(mock.calls.StoreRequestLog, callInfo)
|
|
||||||
mock.lockStoreRequestLog.Unlock()
|
|
||||||
return mock.StoreRequestLogFunc(ctx, reqLog)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreRequestLogCalls gets all the calls that were made to StoreRequestLog.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.StoreRequestLogCalls())
|
|
||||||
func (mock *RepoMock) StoreRequestLogCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLog reqlog.RequestLog
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLog reqlog.RequestLog
|
|
||||||
}
|
|
||||||
mock.lockStoreRequestLog.RLock()
|
|
||||||
calls = mock.calls.StoreRequestLog
|
|
||||||
mock.lockStoreRequestLog.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreResponseLog calls StoreResponseLogFunc.
|
|
||||||
func (mock *RepoMock) StoreResponseLog(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error {
|
|
||||||
if mock.StoreResponseLogFunc == nil {
|
|
||||||
panic("RepoMock.StoreResponseLogFunc: method is nil but Repository.StoreResponseLog was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ReqLogID: reqLogID,
|
|
||||||
ResLog: resLog,
|
|
||||||
}
|
|
||||||
mock.lockStoreResponseLog.Lock()
|
|
||||||
mock.calls.StoreResponseLog = append(mock.calls.StoreResponseLog, callInfo)
|
|
||||||
mock.lockStoreResponseLog.Unlock()
|
|
||||||
return mock.StoreResponseLogFunc(ctx, reqLogID, resLog)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreResponseLogCalls gets all the calls that were made to StoreResponseLog.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.StoreResponseLogCalls())
|
|
||||||
func (mock *RepoMock) StoreResponseLogCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}
|
|
||||||
mock.lockStoreResponseLog.RLock()
|
|
||||||
calls = mock.calls.StoreResponseLog
|
|
||||||
mock.lockStoreResponseLog.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
@ -51,21 +51,7 @@ type ResponseLog struct {
|
|||||||
Body []byte
|
Body []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
type Service interface {
|
type Service struct {
|
||||||
FindRequests(ctx context.Context) ([]RequestLog, error)
|
|
||||||
FindRequestLogByID(ctx context.Context, id ulid.ULID) (RequestLog, error)
|
|
||||||
ClearRequests(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
RequestModifier(next proxy.RequestModifyFunc) proxy.RequestModifyFunc
|
|
||||||
ResponseModifier(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc
|
|
||||||
SetActiveProjectID(id ulid.ULID)
|
|
||||||
ActiveProjectID() ulid.ULID
|
|
||||||
SetBypassOutOfScopeRequests(bool)
|
|
||||||
BypassOutOfScopeRequests() bool
|
|
||||||
SetFindReqsFilter(filter FindRequestsFilter)
|
|
||||||
FindReqsFilter() FindRequestsFilter
|
|
||||||
}
|
|
||||||
|
|
||||||
type service struct {
|
|
||||||
bypassOutOfScopeRequests bool
|
bypassOutOfScopeRequests bool
|
||||||
findReqsFilter FindRequestsFilter
|
findReqsFilter FindRequestsFilter
|
||||||
activeProjectID ulid.ULID
|
activeProjectID ulid.ULID
|
||||||
@ -86,8 +72,8 @@ type Config struct {
|
|||||||
Logger log.Logger
|
Logger log.Logger
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewService(cfg Config) Service {
|
func NewService(cfg Config) *Service {
|
||||||
s := &service{
|
s := &Service{
|
||||||
repo: cfg.Repository,
|
repo: cfg.Repository,
|
||||||
scope: cfg.Scope,
|
scope: cfg.Scope,
|
||||||
logger: cfg.Logger,
|
logger: cfg.Logger,
|
||||||
@ -100,19 +86,19 @@ func NewService(cfg Config) Service {
|
|||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindRequests(ctx context.Context) ([]RequestLog, error) {
|
func (svc *Service) FindRequests(ctx context.Context) ([]RequestLog, error) {
|
||||||
return svc.repo.FindRequestLogs(ctx, svc.findReqsFilter, svc.scope)
|
return svc.repo.FindRequestLogs(ctx, svc.findReqsFilter, svc.scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindRequestLogByID(ctx context.Context, id ulid.ULID) (RequestLog, error) {
|
func (svc *Service) FindRequestLogByID(ctx context.Context, id ulid.ULID) (RequestLog, error) {
|
||||||
return svc.repo.FindRequestLogByID(ctx, id)
|
return svc.repo.FindRequestLogByID(ctx, id)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) ClearRequests(ctx context.Context, projectID ulid.ULID) error {
|
func (svc *Service) ClearRequests(ctx context.Context, projectID ulid.ULID) error {
|
||||||
return svc.repo.ClearRequestLogs(ctx, projectID)
|
return svc.repo.ClearRequestLogs(ctx, projectID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) storeResponse(ctx context.Context, reqLogID ulid.ULID, res *http.Response) error {
|
func (svc *Service) storeResponse(ctx context.Context, reqLogID ulid.ULID, res *http.Response) error {
|
||||||
resLog, err := ParseHTTPResponse(res)
|
resLog, err := ParseHTTPResponse(res)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -121,7 +107,7 @@ func (svc *service) storeResponse(ctx context.Context, reqLogID ulid.ULID, res *
|
|||||||
return svc.repo.StoreResponseLog(ctx, reqLogID, resLog)
|
return svc.repo.StoreResponseLog(ctx, reqLogID, resLog)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) RequestModifier(next proxy.RequestModifyFunc) proxy.RequestModifyFunc {
|
func (svc *Service) RequestModifier(next proxy.RequestModifyFunc) proxy.RequestModifyFunc {
|
||||||
return func(req *http.Request) {
|
return func(req *http.Request) {
|
||||||
next(req)
|
next(req)
|
||||||
|
|
||||||
@ -199,7 +185,7 @@ func (svc *service) RequestModifier(next proxy.RequestModifyFunc) proxy.RequestM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) ResponseModifier(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc {
|
func (svc *Service) ResponseModifier(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc {
|
||||||
return func(res *http.Response) error {
|
return func(res *http.Response) error {
|
||||||
if err := next(res); err != nil {
|
if err := next(res); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -241,27 +227,27 @@ func (svc *service) ResponseModifier(next proxy.ResponseModifyFunc) proxy.Respon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetActiveProjectID(id ulid.ULID) {
|
func (svc *Service) SetActiveProjectID(id ulid.ULID) {
|
||||||
svc.activeProjectID = id
|
svc.activeProjectID = id
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) ActiveProjectID() ulid.ULID {
|
func (svc *Service) ActiveProjectID() ulid.ULID {
|
||||||
return svc.activeProjectID
|
return svc.activeProjectID
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetFindReqsFilter(filter FindRequestsFilter) {
|
func (svc *Service) SetFindReqsFilter(filter FindRequestsFilter) {
|
||||||
svc.findReqsFilter = filter
|
svc.findReqsFilter = filter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindReqsFilter() FindRequestsFilter {
|
func (svc *Service) FindReqsFilter() FindRequestsFilter {
|
||||||
return svc.findReqsFilter
|
return svc.findReqsFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetBypassOutOfScopeRequests(bypass bool) {
|
func (svc *Service) SetBypassOutOfScopeRequests(bypass bool) {
|
||||||
svc.bypassOutOfScopeRequests = bypass
|
svc.bypassOutOfScopeRequests = bypass
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) BypassOutOfScopeRequests() bool {
|
func (svc *Service) BypassOutOfScopeRequests() bool {
|
||||||
return svc.bypassOutOfScopeRequests
|
return svc.bypassOutOfScopeRequests
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package reqlog_test
|
package reqlog_test
|
||||||
|
|
||||||
//go:generate go run github.com/matryer/moq -out repo_mock_test.go -pkg reqlog_test . Repository:RepoMock
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"io"
|
"io"
|
||||||
@ -15,6 +13,8 @@ import (
|
|||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
"github.com/oklog/ulid"
|
"github.com/oklog/ulid"
|
||||||
|
|
||||||
|
badgerdb "github.com/dgraph-io/badger/v3"
|
||||||
|
"github.com/dstotijn/hetty/pkg/db/badger"
|
||||||
"github.com/dstotijn/hetty/pkg/proxy"
|
"github.com/dstotijn/hetty/pkg/proxy"
|
||||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
"github.com/dstotijn/hetty/pkg/reqlog"
|
||||||
"github.com/dstotijn/hetty/pkg/scope"
|
"github.com/dstotijn/hetty/pkg/scope"
|
||||||
@ -25,13 +25,13 @@ var ulidEntropy = rand.New(rand.NewSource(time.Now().UnixNano()))
|
|||||||
|
|
||||||
//nolint:paralleltest
|
//nolint:paralleltest
|
||||||
func TestRequestModifier(t *testing.T) {
|
func TestRequestModifier(t *testing.T) {
|
||||||
repoMock := &RepoMock{
|
db, err := badger.OpenDatabase(badgerdb.DefaultOptions("").WithInMemory(true))
|
||||||
StoreRequestLogFunc: func(_ context.Context, _ reqlog.RequestLog) error {
|
if err != nil {
|
||||||
return nil
|
t.Fatalf("failed to open database: %v", err)
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := reqlog.NewService(reqlog.Config{
|
svc := reqlog.NewService(reqlog.Config{
|
||||||
Repository: repoMock,
|
Repository: db,
|
||||||
Scope: &scope.Scope{},
|
Scope: &scope.Scope{},
|
||||||
})
|
})
|
||||||
svc.SetActiveProjectID(ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy))
|
svc.SetActiveProjectID(ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy))
|
||||||
@ -47,13 +47,8 @@ func TestRequestModifier(t *testing.T) {
|
|||||||
reqModFn(req)
|
reqModFn(req)
|
||||||
|
|
||||||
t.Run("request log was stored in repository", func(t *testing.T) {
|
t.Run("request log was stored in repository", func(t *testing.T) {
|
||||||
gotCount := len(repoMock.StoreRequestLogCalls())
|
|
||||||
if expCount := 1; expCount != gotCount {
|
|
||||||
t.Fatalf("incorrect `proj.Service.AddRequestLog` calls (expected: %v, got: %v)", expCount, gotCount)
|
|
||||||
}
|
|
||||||
|
|
||||||
exp := reqlog.RequestLog{
|
exp := reqlog.RequestLog{
|
||||||
ID: ulid.ULID{}, // Empty value
|
ID: reqID,
|
||||||
ProjectID: svc.ActiveProjectID(),
|
ProjectID: svc.ActiveProjectID(),
|
||||||
Method: req.Method,
|
Method: req.Method,
|
||||||
URL: req.URL,
|
URL: req.URL,
|
||||||
@ -61,8 +56,11 @@ func TestRequestModifier(t *testing.T) {
|
|||||||
Header: req.Header,
|
Header: req.Header,
|
||||||
Body: []byte("modified body"),
|
Body: []byte("modified body"),
|
||||||
}
|
}
|
||||||
got := repoMock.StoreRequestLogCalls()[0].ReqLog
|
|
||||||
got.ID = ulid.ULID{} // Override to empty value so we can compare against expected value.
|
got, err := svc.FindRequestLogByID(context.Background(), reqID)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to find request by id: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
if diff := cmp.Diff(exp, got); diff != "" {
|
if diff := cmp.Diff(exp, got); diff != "" {
|
||||||
t.Fatalf("request log not equal (-exp, +got):\n%v", diff)
|
t.Fatalf("request log not equal (-exp, +got):\n%v", diff)
|
||||||
@ -72,13 +70,13 @@ func TestRequestModifier(t *testing.T) {
|
|||||||
|
|
||||||
//nolint:paralleltest
|
//nolint:paralleltest
|
||||||
func TestResponseModifier(t *testing.T) {
|
func TestResponseModifier(t *testing.T) {
|
||||||
repoMock := &RepoMock{
|
db, err := badger.OpenDatabase(badgerdb.DefaultOptions("").WithInMemory(true))
|
||||||
StoreResponseLogFunc: func(_ context.Context, _ ulid.ULID, _ reqlog.ResponseLog) error {
|
if err != nil {
|
||||||
return nil
|
t.Fatalf("failed to open database: %v", err)
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := reqlog.NewService(reqlog.Config{
|
svc := reqlog.NewService(reqlog.Config{
|
||||||
Repository: repoMock,
|
Repository: db,
|
||||||
})
|
})
|
||||||
svc.SetActiveProjectID(ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy))
|
svc.SetActiveProjectID(ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy))
|
||||||
|
|
||||||
@ -92,6 +90,13 @@ func TestResponseModifier(t *testing.T) {
|
|||||||
reqLogID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
reqLogID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
||||||
req = req.WithContext(context.WithValue(req.Context(), reqlog.ReqLogIDKey, reqLogID))
|
req = req.WithContext(context.WithValue(req.Context(), reqlog.ReqLogIDKey, reqLogID))
|
||||||
|
|
||||||
|
err = db.StoreRequestLog(context.Background(), reqlog.RequestLog{
|
||||||
|
ID: reqLogID,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to store request log: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
res := &http.Response{
|
res := &http.Response{
|
||||||
Request: req,
|
Request: req,
|
||||||
Body: io.NopCloser(strings.NewReader("bar")),
|
Body: io.NopCloser(strings.NewReader("bar")),
|
||||||
@ -104,23 +109,15 @@ func TestResponseModifier(t *testing.T) {
|
|||||||
t.Run("request log was stored in repository", func(t *testing.T) {
|
t.Run("request log was stored in repository", func(t *testing.T) {
|
||||||
// Dirty (but simple) wait for other goroutine to finish calling repository.
|
// Dirty (but simple) wait for other goroutine to finish calling repository.
|
||||||
time.Sleep(10 * time.Millisecond)
|
time.Sleep(10 * time.Millisecond)
|
||||||
got := len(repoMock.StoreResponseLogCalls())
|
|
||||||
if exp := 1; exp != got {
|
got, err := svc.FindRequestLogByID(context.Background(), reqLogID)
|
||||||
t.Fatalf("incorrect `proj.Service.AddResponseLog` calls (expected: %v, got: %v)", exp, got)
|
if err != nil {
|
||||||
|
t.Fatalf("failed to find request by id: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("ran next modifier first, before calling repository", func(t *testing.T) {
|
t.Run("ran next modifier first, before calling repository", func(t *testing.T) {
|
||||||
got := repoMock.StoreResponseLogCalls()[0].ResLog.Body
|
if exp := "modified body"; exp != string(got.Response.Body) {
|
||||||
if exp := "modified body"; exp != string(got) {
|
t.Fatalf("incorrect `ResponseLog.Body` value (expected: %v, got: %v)", exp, string(got.Response.Body))
|
||||||
t.Fatalf("incorrect `ResponseLog.Body` value (expected: %v, got: %v)", exp, string(got))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
t.Run("called repository with request log id", func(t *testing.T) {
|
|
||||||
got := repoMock.StoreResponseLogCalls()[0].ReqLogID
|
|
||||||
if exp := reqLogID; exp.Compare(got) != 0 {
|
|
||||||
t.Fatalf("incorrect `reqLogID` argument for `Repository.AddResponseLogCalls` (expected: %v, got: %v)",
|
|
||||||
exp.String(), got.String())
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
@ -1,292 +0,0 @@
|
|||||||
// Code generated by moq; DO NOT EDIT.
|
|
||||||
// github.com/matryer/moq
|
|
||||||
|
|
||||||
package sender_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
|
||||||
"github.com/dstotijn/hetty/pkg/scope"
|
|
||||||
"github.com/dstotijn/hetty/pkg/sender"
|
|
||||||
"github.com/oklog/ulid"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Ensure, that RepoMock does implement sender.Repository.
|
|
||||||
// If this is not the case, regenerate this file with moq.
|
|
||||||
var _ sender.Repository = &RepoMock{}
|
|
||||||
|
|
||||||
// RepoMock is a mock implementation of sender.Repository.
|
|
||||||
//
|
|
||||||
// func TestSomethingThatUsesRepository(t *testing.T) {
|
|
||||||
//
|
|
||||||
// // make and configure a mocked sender.Repository
|
|
||||||
// mockedRepository := &RepoMock{
|
|
||||||
// DeleteSenderRequestsFunc: func(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
// panic("mock out the DeleteSenderRequests method")
|
|
||||||
// },
|
|
||||||
// FindSenderRequestByIDFunc: func(ctx context.Context, id ulid.ULID) (sender.Request, error) {
|
|
||||||
// panic("mock out the FindSenderRequestByID method")
|
|
||||||
// },
|
|
||||||
// FindSenderRequestsFunc: func(ctx context.Context, filter sender.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]sender.Request, error) {
|
|
||||||
// panic("mock out the FindSenderRequests method")
|
|
||||||
// },
|
|
||||||
// StoreResponseLogFunc: func(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error {
|
|
||||||
// panic("mock out the StoreResponseLog method")
|
|
||||||
// },
|
|
||||||
// StoreSenderRequestFunc: func(ctx context.Context, req sender.Request) error {
|
|
||||||
// panic("mock out the StoreSenderRequest method")
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // use mockedRepository in code that requires sender.Repository
|
|
||||||
// // and then make assertions.
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
type RepoMock struct {
|
|
||||||
// DeleteSenderRequestsFunc mocks the DeleteSenderRequests method.
|
|
||||||
DeleteSenderRequestsFunc func(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
|
|
||||||
// FindSenderRequestByIDFunc mocks the FindSenderRequestByID method.
|
|
||||||
FindSenderRequestByIDFunc func(ctx context.Context, id ulid.ULID) (sender.Request, error)
|
|
||||||
|
|
||||||
// FindSenderRequestsFunc mocks the FindSenderRequests method.
|
|
||||||
FindSenderRequestsFunc func(ctx context.Context, filter sender.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]sender.Request, error)
|
|
||||||
|
|
||||||
// StoreResponseLogFunc mocks the StoreResponseLog method.
|
|
||||||
StoreResponseLogFunc func(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error
|
|
||||||
|
|
||||||
// StoreSenderRequestFunc mocks the StoreSenderRequest method.
|
|
||||||
StoreSenderRequestFunc func(ctx context.Context, req sender.Request) error
|
|
||||||
|
|
||||||
// calls tracks calls to the methods.
|
|
||||||
calls struct {
|
|
||||||
// DeleteSenderRequests holds details about calls to the DeleteSenderRequests method.
|
|
||||||
DeleteSenderRequests []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ProjectID is the projectID argument value.
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindSenderRequestByID holds details about calls to the FindSenderRequestByID method.
|
|
||||||
FindSenderRequestByID []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ID is the id argument value.
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindSenderRequests holds details about calls to the FindSenderRequests method.
|
|
||||||
FindSenderRequests []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// Filter is the filter argument value.
|
|
||||||
Filter sender.FindRequestsFilter
|
|
||||||
// ScopeMoqParam is the scopeMoqParam argument value.
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}
|
|
||||||
// StoreResponseLog holds details about calls to the StoreResponseLog method.
|
|
||||||
StoreResponseLog []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ReqLogID is the reqLogID argument value.
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
// ResLog is the resLog argument value.
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}
|
|
||||||
// StoreSenderRequest holds details about calls to the StoreSenderRequest method.
|
|
||||||
StoreSenderRequest []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// Req is the req argument value.
|
|
||||||
Req sender.Request
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lockDeleteSenderRequests sync.RWMutex
|
|
||||||
lockFindSenderRequestByID sync.RWMutex
|
|
||||||
lockFindSenderRequests sync.RWMutex
|
|
||||||
lockStoreResponseLog sync.RWMutex
|
|
||||||
lockStoreSenderRequest sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteSenderRequests calls DeleteSenderRequestsFunc.
|
|
||||||
func (mock *RepoMock) DeleteSenderRequests(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
if mock.DeleteSenderRequestsFunc == nil {
|
|
||||||
panic("RepoMock.DeleteSenderRequestsFunc: method is nil but Repository.DeleteSenderRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ProjectID: projectID,
|
|
||||||
}
|
|
||||||
mock.lockDeleteSenderRequests.Lock()
|
|
||||||
mock.calls.DeleteSenderRequests = append(mock.calls.DeleteSenderRequests, callInfo)
|
|
||||||
mock.lockDeleteSenderRequests.Unlock()
|
|
||||||
return mock.DeleteSenderRequestsFunc(ctx, projectID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// DeleteSenderRequestsCalls gets all the calls that were made to DeleteSenderRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.DeleteSenderRequestsCalls())
|
|
||||||
func (mock *RepoMock) DeleteSenderRequestsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockDeleteSenderRequests.RLock()
|
|
||||||
calls = mock.calls.DeleteSenderRequests
|
|
||||||
mock.lockDeleteSenderRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindSenderRequestByID calls FindSenderRequestByIDFunc.
|
|
||||||
func (mock *RepoMock) FindSenderRequestByID(ctx context.Context, id ulid.ULID) (sender.Request, error) {
|
|
||||||
if mock.FindSenderRequestByIDFunc == nil {
|
|
||||||
panic("RepoMock.FindSenderRequestByIDFunc: method is nil but Repository.FindSenderRequestByID was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ID: id,
|
|
||||||
}
|
|
||||||
mock.lockFindSenderRequestByID.Lock()
|
|
||||||
mock.calls.FindSenderRequestByID = append(mock.calls.FindSenderRequestByID, callInfo)
|
|
||||||
mock.lockFindSenderRequestByID.Unlock()
|
|
||||||
return mock.FindSenderRequestByIDFunc(ctx, id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindSenderRequestByIDCalls gets all the calls that were made to FindSenderRequestByID.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.FindSenderRequestByIDCalls())
|
|
||||||
func (mock *RepoMock) FindSenderRequestByIDCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockFindSenderRequestByID.RLock()
|
|
||||||
calls = mock.calls.FindSenderRequestByID
|
|
||||||
mock.lockFindSenderRequestByID.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindSenderRequests calls FindSenderRequestsFunc.
|
|
||||||
func (mock *RepoMock) FindSenderRequests(ctx context.Context, filter sender.FindRequestsFilter, scopeMoqParam *scope.Scope) ([]sender.Request, error) {
|
|
||||||
if mock.FindSenderRequestsFunc == nil {
|
|
||||||
panic("RepoMock.FindSenderRequestsFunc: method is nil but Repository.FindSenderRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter sender.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
Filter: filter,
|
|
||||||
ScopeMoqParam: scopeMoqParam,
|
|
||||||
}
|
|
||||||
mock.lockFindSenderRequests.Lock()
|
|
||||||
mock.calls.FindSenderRequests = append(mock.calls.FindSenderRequests, callInfo)
|
|
||||||
mock.lockFindSenderRequests.Unlock()
|
|
||||||
return mock.FindSenderRequestsFunc(ctx, filter, scopeMoqParam)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindSenderRequestsCalls gets all the calls that were made to FindSenderRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.FindSenderRequestsCalls())
|
|
||||||
func (mock *RepoMock) FindSenderRequestsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter sender.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Filter sender.FindRequestsFilter
|
|
||||||
ScopeMoqParam *scope.Scope
|
|
||||||
}
|
|
||||||
mock.lockFindSenderRequests.RLock()
|
|
||||||
calls = mock.calls.FindSenderRequests
|
|
||||||
mock.lockFindSenderRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreResponseLog calls StoreResponseLogFunc.
|
|
||||||
func (mock *RepoMock) StoreResponseLog(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error {
|
|
||||||
if mock.StoreResponseLogFunc == nil {
|
|
||||||
panic("RepoMock.StoreResponseLogFunc: method is nil but Repository.StoreResponseLog was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ReqLogID: reqLogID,
|
|
||||||
ResLog: resLog,
|
|
||||||
}
|
|
||||||
mock.lockStoreResponseLog.Lock()
|
|
||||||
mock.calls.StoreResponseLog = append(mock.calls.StoreResponseLog, callInfo)
|
|
||||||
mock.lockStoreResponseLog.Unlock()
|
|
||||||
return mock.StoreResponseLogFunc(ctx, reqLogID, resLog)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreResponseLogCalls gets all the calls that were made to StoreResponseLog.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.StoreResponseLogCalls())
|
|
||||||
func (mock *RepoMock) StoreResponseLogCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ReqLogID ulid.ULID
|
|
||||||
ResLog reqlog.ResponseLog
|
|
||||||
}
|
|
||||||
mock.lockStoreResponseLog.RLock()
|
|
||||||
calls = mock.calls.StoreResponseLog
|
|
||||||
mock.lockStoreResponseLog.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreSenderRequest calls StoreSenderRequestFunc.
|
|
||||||
func (mock *RepoMock) StoreSenderRequest(ctx context.Context, req sender.Request) error {
|
|
||||||
if mock.StoreSenderRequestFunc == nil {
|
|
||||||
panic("RepoMock.StoreSenderRequestFunc: method is nil but Repository.StoreSenderRequest was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Req sender.Request
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
Req: req,
|
|
||||||
}
|
|
||||||
mock.lockStoreSenderRequest.Lock()
|
|
||||||
mock.calls.StoreSenderRequest = append(mock.calls.StoreSenderRequest, callInfo)
|
|
||||||
mock.lockStoreSenderRequest.Unlock()
|
|
||||||
return mock.StoreSenderRequestFunc(ctx, req)
|
|
||||||
}
|
|
||||||
|
|
||||||
// StoreSenderRequestCalls gets all the calls that were made to StoreSenderRequest.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedRepository.StoreSenderRequestCalls())
|
|
||||||
func (mock *RepoMock) StoreSenderRequestCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Req sender.Request
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
Req sender.Request
|
|
||||||
}
|
|
||||||
mock.lockStoreSenderRequest.RLock()
|
|
||||||
calls = mock.calls.StoreSenderRequest
|
|
||||||
mock.lockStoreSenderRequest.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
@ -1,498 +0,0 @@
|
|||||||
// Code generated by moq; DO NOT EDIT.
|
|
||||||
// github.com/matryer/moq
|
|
||||||
|
|
||||||
package sender_test
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/dstotijn/hetty/pkg/proxy"
|
|
||||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
|
||||||
"github.com/oklog/ulid"
|
|
||||||
"sync"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Ensure, that ReqLogServiceMock does implement reqlog.Service.
|
|
||||||
// If this is not the case, regenerate this file with moq.
|
|
||||||
var _ reqlog.Service = &ReqLogServiceMock{}
|
|
||||||
|
|
||||||
// ReqLogServiceMock is a mock implementation of reqlog.Service.
|
|
||||||
//
|
|
||||||
// func TestSomethingThatUsesService(t *testing.T) {
|
|
||||||
//
|
|
||||||
// // make and configure a mocked reqlog.Service
|
|
||||||
// mockedService := &ReqLogServiceMock{
|
|
||||||
// ActiveProjectIDFunc: func() ulid.ULID {
|
|
||||||
// panic("mock out the ActiveProjectID method")
|
|
||||||
// },
|
|
||||||
// BypassOutOfScopeRequestsFunc: func() bool {
|
|
||||||
// panic("mock out the BypassOutOfScopeRequests method")
|
|
||||||
// },
|
|
||||||
// ClearRequestsFunc: func(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
// panic("mock out the ClearRequests method")
|
|
||||||
// },
|
|
||||||
// FindReqsFilterFunc: func() reqlog.FindRequestsFilter {
|
|
||||||
// panic("mock out the FindReqsFilter method")
|
|
||||||
// },
|
|
||||||
// FindRequestLogByIDFunc: func(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error) {
|
|
||||||
// panic("mock out the FindRequestLogByID method")
|
|
||||||
// },
|
|
||||||
// FindRequestsFunc: func(ctx context.Context) ([]reqlog.RequestLog, error) {
|
|
||||||
// panic("mock out the FindRequests method")
|
|
||||||
// },
|
|
||||||
// RequestModifierFunc: func(next proxy.RequestModifyFunc) proxy.RequestModifyFunc {
|
|
||||||
// panic("mock out the RequestModifier method")
|
|
||||||
// },
|
|
||||||
// ResponseModifierFunc: func(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc {
|
|
||||||
// panic("mock out the ResponseModifier method")
|
|
||||||
// },
|
|
||||||
// SetActiveProjectIDFunc: func(id ulid.ULID) {
|
|
||||||
// panic("mock out the SetActiveProjectID method")
|
|
||||||
// },
|
|
||||||
// SetBypassOutOfScopeRequestsFunc: func(b bool) {
|
|
||||||
// panic("mock out the SetBypassOutOfScopeRequests method")
|
|
||||||
// },
|
|
||||||
// SetFindReqsFilterFunc: func(filter reqlog.FindRequestsFilter) {
|
|
||||||
// panic("mock out the SetFindReqsFilter method")
|
|
||||||
// },
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// // use mockedService in code that requires reqlog.Service
|
|
||||||
// // and then make assertions.
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
type ReqLogServiceMock struct {
|
|
||||||
// ActiveProjectIDFunc mocks the ActiveProjectID method.
|
|
||||||
ActiveProjectIDFunc func() ulid.ULID
|
|
||||||
|
|
||||||
// BypassOutOfScopeRequestsFunc mocks the BypassOutOfScopeRequests method.
|
|
||||||
BypassOutOfScopeRequestsFunc func() bool
|
|
||||||
|
|
||||||
// ClearRequestsFunc mocks the ClearRequests method.
|
|
||||||
ClearRequestsFunc func(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
|
|
||||||
// FindReqsFilterFunc mocks the FindReqsFilter method.
|
|
||||||
FindReqsFilterFunc func() reqlog.FindRequestsFilter
|
|
||||||
|
|
||||||
// FindRequestLogByIDFunc mocks the FindRequestLogByID method.
|
|
||||||
FindRequestLogByIDFunc func(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error)
|
|
||||||
|
|
||||||
// FindRequestsFunc mocks the FindRequests method.
|
|
||||||
FindRequestsFunc func(ctx context.Context) ([]reqlog.RequestLog, error)
|
|
||||||
|
|
||||||
// RequestModifierFunc mocks the RequestModifier method.
|
|
||||||
RequestModifierFunc func(next proxy.RequestModifyFunc) proxy.RequestModifyFunc
|
|
||||||
|
|
||||||
// ResponseModifierFunc mocks the ResponseModifier method.
|
|
||||||
ResponseModifierFunc func(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc
|
|
||||||
|
|
||||||
// SetActiveProjectIDFunc mocks the SetActiveProjectID method.
|
|
||||||
SetActiveProjectIDFunc func(id ulid.ULID)
|
|
||||||
|
|
||||||
// SetBypassOutOfScopeRequestsFunc mocks the SetBypassOutOfScopeRequests method.
|
|
||||||
SetBypassOutOfScopeRequestsFunc func(b bool)
|
|
||||||
|
|
||||||
// SetFindReqsFilterFunc mocks the SetFindReqsFilter method.
|
|
||||||
SetFindReqsFilterFunc func(filter reqlog.FindRequestsFilter)
|
|
||||||
|
|
||||||
// calls tracks calls to the methods.
|
|
||||||
calls struct {
|
|
||||||
// ActiveProjectID holds details about calls to the ActiveProjectID method.
|
|
||||||
ActiveProjectID []struct {
|
|
||||||
}
|
|
||||||
// BypassOutOfScopeRequests holds details about calls to the BypassOutOfScopeRequests method.
|
|
||||||
BypassOutOfScopeRequests []struct {
|
|
||||||
}
|
|
||||||
// ClearRequests holds details about calls to the ClearRequests method.
|
|
||||||
ClearRequests []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ProjectID is the projectID argument value.
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindReqsFilter holds details about calls to the FindReqsFilter method.
|
|
||||||
FindReqsFilter []struct {
|
|
||||||
}
|
|
||||||
// FindRequestLogByID holds details about calls to the FindRequestLogByID method.
|
|
||||||
FindRequestLogByID []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
// ID is the id argument value.
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
// FindRequests holds details about calls to the FindRequests method.
|
|
||||||
FindRequests []struct {
|
|
||||||
// Ctx is the ctx argument value.
|
|
||||||
Ctx context.Context
|
|
||||||
}
|
|
||||||
// RequestModifier holds details about calls to the RequestModifier method.
|
|
||||||
RequestModifier []struct {
|
|
||||||
// Next is the next argument value.
|
|
||||||
Next proxy.RequestModifyFunc
|
|
||||||
}
|
|
||||||
// ResponseModifier holds details about calls to the ResponseModifier method.
|
|
||||||
ResponseModifier []struct {
|
|
||||||
// Next is the next argument value.
|
|
||||||
Next proxy.ResponseModifyFunc
|
|
||||||
}
|
|
||||||
// SetActiveProjectID holds details about calls to the SetActiveProjectID method.
|
|
||||||
SetActiveProjectID []struct {
|
|
||||||
// ID is the id argument value.
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
// SetBypassOutOfScopeRequests holds details about calls to the SetBypassOutOfScopeRequests method.
|
|
||||||
SetBypassOutOfScopeRequests []struct {
|
|
||||||
// B is the b argument value.
|
|
||||||
B bool
|
|
||||||
}
|
|
||||||
// SetFindReqsFilter holds details about calls to the SetFindReqsFilter method.
|
|
||||||
SetFindReqsFilter []struct {
|
|
||||||
// Filter is the filter argument value.
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
}
|
|
||||||
}
|
|
||||||
lockActiveProjectID sync.RWMutex
|
|
||||||
lockBypassOutOfScopeRequests sync.RWMutex
|
|
||||||
lockClearRequests sync.RWMutex
|
|
||||||
lockFindReqsFilter sync.RWMutex
|
|
||||||
lockFindRequestLogByID sync.RWMutex
|
|
||||||
lockFindRequests sync.RWMutex
|
|
||||||
lockRequestModifier sync.RWMutex
|
|
||||||
lockResponseModifier sync.RWMutex
|
|
||||||
lockSetActiveProjectID sync.RWMutex
|
|
||||||
lockSetBypassOutOfScopeRequests sync.RWMutex
|
|
||||||
lockSetFindReqsFilter sync.RWMutex
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActiveProjectID calls ActiveProjectIDFunc.
|
|
||||||
func (mock *ReqLogServiceMock) ActiveProjectID() ulid.ULID {
|
|
||||||
if mock.ActiveProjectIDFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.ActiveProjectIDFunc: method is nil but Service.ActiveProjectID was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
}{}
|
|
||||||
mock.lockActiveProjectID.Lock()
|
|
||||||
mock.calls.ActiveProjectID = append(mock.calls.ActiveProjectID, callInfo)
|
|
||||||
mock.lockActiveProjectID.Unlock()
|
|
||||||
return mock.ActiveProjectIDFunc()
|
|
||||||
}
|
|
||||||
|
|
||||||
// ActiveProjectIDCalls gets all the calls that were made to ActiveProjectID.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.ActiveProjectIDCalls())
|
|
||||||
func (mock *ReqLogServiceMock) ActiveProjectIDCalls() []struct {
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
}
|
|
||||||
mock.lockActiveProjectID.RLock()
|
|
||||||
calls = mock.calls.ActiveProjectID
|
|
||||||
mock.lockActiveProjectID.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// BypassOutOfScopeRequests calls BypassOutOfScopeRequestsFunc.
|
|
||||||
func (mock *ReqLogServiceMock) BypassOutOfScopeRequests() bool {
|
|
||||||
if mock.BypassOutOfScopeRequestsFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.BypassOutOfScopeRequestsFunc: method is nil but Service.BypassOutOfScopeRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
}{}
|
|
||||||
mock.lockBypassOutOfScopeRequests.Lock()
|
|
||||||
mock.calls.BypassOutOfScopeRequests = append(mock.calls.BypassOutOfScopeRequests, callInfo)
|
|
||||||
mock.lockBypassOutOfScopeRequests.Unlock()
|
|
||||||
return mock.BypassOutOfScopeRequestsFunc()
|
|
||||||
}
|
|
||||||
|
|
||||||
// BypassOutOfScopeRequestsCalls gets all the calls that were made to BypassOutOfScopeRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.BypassOutOfScopeRequestsCalls())
|
|
||||||
func (mock *ReqLogServiceMock) BypassOutOfScopeRequestsCalls() []struct {
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
}
|
|
||||||
mock.lockBypassOutOfScopeRequests.RLock()
|
|
||||||
calls = mock.calls.BypassOutOfScopeRequests
|
|
||||||
mock.lockBypassOutOfScopeRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearRequests calls ClearRequestsFunc.
|
|
||||||
func (mock *ReqLogServiceMock) ClearRequests(ctx context.Context, projectID ulid.ULID) error {
|
|
||||||
if mock.ClearRequestsFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.ClearRequestsFunc: method is nil but Service.ClearRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ProjectID: projectID,
|
|
||||||
}
|
|
||||||
mock.lockClearRequests.Lock()
|
|
||||||
mock.calls.ClearRequests = append(mock.calls.ClearRequests, callInfo)
|
|
||||||
mock.lockClearRequests.Unlock()
|
|
||||||
return mock.ClearRequestsFunc(ctx, projectID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ClearRequestsCalls gets all the calls that were made to ClearRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.ClearRequestsCalls())
|
|
||||||
func (mock *ReqLogServiceMock) ClearRequestsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ProjectID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockClearRequests.RLock()
|
|
||||||
calls = mock.calls.ClearRequests
|
|
||||||
mock.lockClearRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindReqsFilter calls FindReqsFilterFunc.
|
|
||||||
func (mock *ReqLogServiceMock) FindReqsFilter() reqlog.FindRequestsFilter {
|
|
||||||
if mock.FindReqsFilterFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.FindReqsFilterFunc: method is nil but Service.FindReqsFilter was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
}{}
|
|
||||||
mock.lockFindReqsFilter.Lock()
|
|
||||||
mock.calls.FindReqsFilter = append(mock.calls.FindReqsFilter, callInfo)
|
|
||||||
mock.lockFindReqsFilter.Unlock()
|
|
||||||
return mock.FindReqsFilterFunc()
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindReqsFilterCalls gets all the calls that were made to FindReqsFilter.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.FindReqsFilterCalls())
|
|
||||||
func (mock *ReqLogServiceMock) FindReqsFilterCalls() []struct {
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
}
|
|
||||||
mock.lockFindReqsFilter.RLock()
|
|
||||||
calls = mock.calls.FindReqsFilter
|
|
||||||
mock.lockFindReqsFilter.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogByID calls FindRequestLogByIDFunc.
|
|
||||||
func (mock *ReqLogServiceMock) FindRequestLogByID(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error) {
|
|
||||||
if mock.FindRequestLogByIDFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.FindRequestLogByIDFunc: method is nil but Service.FindRequestLogByID was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
ID: id,
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogByID.Lock()
|
|
||||||
mock.calls.FindRequestLogByID = append(mock.calls.FindRequestLogByID, callInfo)
|
|
||||||
mock.lockFindRequestLogByID.Unlock()
|
|
||||||
return mock.FindRequestLogByIDFunc(ctx, id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestLogByIDCalls gets all the calls that were made to FindRequestLogByID.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.FindRequestLogByIDCalls())
|
|
||||||
func (mock *ReqLogServiceMock) FindRequestLogByIDCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockFindRequestLogByID.RLock()
|
|
||||||
calls = mock.calls.FindRequestLogByID
|
|
||||||
mock.lockFindRequestLogByID.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequests calls FindRequestsFunc.
|
|
||||||
func (mock *ReqLogServiceMock) FindRequests(ctx context.Context) ([]reqlog.RequestLog, error) {
|
|
||||||
if mock.FindRequestsFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.FindRequestsFunc: method is nil but Service.FindRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Ctx context.Context
|
|
||||||
}{
|
|
||||||
Ctx: ctx,
|
|
||||||
}
|
|
||||||
mock.lockFindRequests.Lock()
|
|
||||||
mock.calls.FindRequests = append(mock.calls.FindRequests, callInfo)
|
|
||||||
mock.lockFindRequests.Unlock()
|
|
||||||
return mock.FindRequestsFunc(ctx)
|
|
||||||
}
|
|
||||||
|
|
||||||
// FindRequestsCalls gets all the calls that were made to FindRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.FindRequestsCalls())
|
|
||||||
func (mock *ReqLogServiceMock) FindRequestsCalls() []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Ctx context.Context
|
|
||||||
}
|
|
||||||
mock.lockFindRequests.RLock()
|
|
||||||
calls = mock.calls.FindRequests
|
|
||||||
mock.lockFindRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequestModifier calls RequestModifierFunc.
|
|
||||||
func (mock *ReqLogServiceMock) RequestModifier(next proxy.RequestModifyFunc) proxy.RequestModifyFunc {
|
|
||||||
if mock.RequestModifierFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.RequestModifierFunc: method is nil but Service.RequestModifier was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Next proxy.RequestModifyFunc
|
|
||||||
}{
|
|
||||||
Next: next,
|
|
||||||
}
|
|
||||||
mock.lockRequestModifier.Lock()
|
|
||||||
mock.calls.RequestModifier = append(mock.calls.RequestModifier, callInfo)
|
|
||||||
mock.lockRequestModifier.Unlock()
|
|
||||||
return mock.RequestModifierFunc(next)
|
|
||||||
}
|
|
||||||
|
|
||||||
// RequestModifierCalls gets all the calls that were made to RequestModifier.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.RequestModifierCalls())
|
|
||||||
func (mock *ReqLogServiceMock) RequestModifierCalls() []struct {
|
|
||||||
Next proxy.RequestModifyFunc
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Next proxy.RequestModifyFunc
|
|
||||||
}
|
|
||||||
mock.lockRequestModifier.RLock()
|
|
||||||
calls = mock.calls.RequestModifier
|
|
||||||
mock.lockRequestModifier.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResponseModifier calls ResponseModifierFunc.
|
|
||||||
func (mock *ReqLogServiceMock) ResponseModifier(next proxy.ResponseModifyFunc) proxy.ResponseModifyFunc {
|
|
||||||
if mock.ResponseModifierFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.ResponseModifierFunc: method is nil but Service.ResponseModifier was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Next proxy.ResponseModifyFunc
|
|
||||||
}{
|
|
||||||
Next: next,
|
|
||||||
}
|
|
||||||
mock.lockResponseModifier.Lock()
|
|
||||||
mock.calls.ResponseModifier = append(mock.calls.ResponseModifier, callInfo)
|
|
||||||
mock.lockResponseModifier.Unlock()
|
|
||||||
return mock.ResponseModifierFunc(next)
|
|
||||||
}
|
|
||||||
|
|
||||||
// ResponseModifierCalls gets all the calls that were made to ResponseModifier.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.ResponseModifierCalls())
|
|
||||||
func (mock *ReqLogServiceMock) ResponseModifierCalls() []struct {
|
|
||||||
Next proxy.ResponseModifyFunc
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Next proxy.ResponseModifyFunc
|
|
||||||
}
|
|
||||||
mock.lockResponseModifier.RLock()
|
|
||||||
calls = mock.calls.ResponseModifier
|
|
||||||
mock.lockResponseModifier.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetActiveProjectID calls SetActiveProjectIDFunc.
|
|
||||||
func (mock *ReqLogServiceMock) SetActiveProjectID(id ulid.ULID) {
|
|
||||||
if mock.SetActiveProjectIDFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.SetActiveProjectIDFunc: method is nil but Service.SetActiveProjectID was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
ID ulid.ULID
|
|
||||||
}{
|
|
||||||
ID: id,
|
|
||||||
}
|
|
||||||
mock.lockSetActiveProjectID.Lock()
|
|
||||||
mock.calls.SetActiveProjectID = append(mock.calls.SetActiveProjectID, callInfo)
|
|
||||||
mock.lockSetActiveProjectID.Unlock()
|
|
||||||
mock.SetActiveProjectIDFunc(id)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetActiveProjectIDCalls gets all the calls that were made to SetActiveProjectID.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.SetActiveProjectIDCalls())
|
|
||||||
func (mock *ReqLogServiceMock) SetActiveProjectIDCalls() []struct {
|
|
||||||
ID ulid.ULID
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
ID ulid.ULID
|
|
||||||
}
|
|
||||||
mock.lockSetActiveProjectID.RLock()
|
|
||||||
calls = mock.calls.SetActiveProjectID
|
|
||||||
mock.lockSetActiveProjectID.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetBypassOutOfScopeRequests calls SetBypassOutOfScopeRequestsFunc.
|
|
||||||
func (mock *ReqLogServiceMock) SetBypassOutOfScopeRequests(b bool) {
|
|
||||||
if mock.SetBypassOutOfScopeRequestsFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.SetBypassOutOfScopeRequestsFunc: method is nil but Service.SetBypassOutOfScopeRequests was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
B bool
|
|
||||||
}{
|
|
||||||
B: b,
|
|
||||||
}
|
|
||||||
mock.lockSetBypassOutOfScopeRequests.Lock()
|
|
||||||
mock.calls.SetBypassOutOfScopeRequests = append(mock.calls.SetBypassOutOfScopeRequests, callInfo)
|
|
||||||
mock.lockSetBypassOutOfScopeRequests.Unlock()
|
|
||||||
mock.SetBypassOutOfScopeRequestsFunc(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetBypassOutOfScopeRequestsCalls gets all the calls that were made to SetBypassOutOfScopeRequests.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.SetBypassOutOfScopeRequestsCalls())
|
|
||||||
func (mock *ReqLogServiceMock) SetBypassOutOfScopeRequestsCalls() []struct {
|
|
||||||
B bool
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
B bool
|
|
||||||
}
|
|
||||||
mock.lockSetBypassOutOfScopeRequests.RLock()
|
|
||||||
calls = mock.calls.SetBypassOutOfScopeRequests
|
|
||||||
mock.lockSetBypassOutOfScopeRequests.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetFindReqsFilter calls SetFindReqsFilterFunc.
|
|
||||||
func (mock *ReqLogServiceMock) SetFindReqsFilter(filter reqlog.FindRequestsFilter) {
|
|
||||||
if mock.SetFindReqsFilterFunc == nil {
|
|
||||||
panic("ReqLogServiceMock.SetFindReqsFilterFunc: method is nil but Service.SetFindReqsFilter was just called")
|
|
||||||
}
|
|
||||||
callInfo := struct {
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
}{
|
|
||||||
Filter: filter,
|
|
||||||
}
|
|
||||||
mock.lockSetFindReqsFilter.Lock()
|
|
||||||
mock.calls.SetFindReqsFilter = append(mock.calls.SetFindReqsFilter, callInfo)
|
|
||||||
mock.lockSetFindReqsFilter.Unlock()
|
|
||||||
mock.SetFindReqsFilterFunc(filter)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SetFindReqsFilterCalls gets all the calls that were made to SetFindReqsFilter.
|
|
||||||
// Check the length with:
|
|
||||||
// len(mockedService.SetFindReqsFilterCalls())
|
|
||||||
func (mock *ReqLogServiceMock) SetFindReqsFilterCalls() []struct {
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
} {
|
|
||||||
var calls []struct {
|
|
||||||
Filter reqlog.FindRequestsFilter
|
|
||||||
}
|
|
||||||
mock.lockSetFindReqsFilter.RLock()
|
|
||||||
calls = mock.calls.SetFindReqsFilter
|
|
||||||
mock.lockSetFindReqsFilter.RUnlock()
|
|
||||||
return calls
|
|
||||||
}
|
|
@ -30,24 +30,12 @@ var (
|
|||||||
ErrRequestNotFound = errors.New("sender: request not found")
|
ErrRequestNotFound = errors.New("sender: request not found")
|
||||||
)
|
)
|
||||||
|
|
||||||
type Service interface {
|
type Service struct {
|
||||||
FindRequestByID(ctx context.Context, id ulid.ULID) (Request, error)
|
|
||||||
FindRequests(ctx context.Context) ([]Request, error)
|
|
||||||
CreateOrUpdateRequest(ctx context.Context, req Request) (Request, error)
|
|
||||||
CloneFromRequestLog(ctx context.Context, reqLogID ulid.ULID) (Request, error)
|
|
||||||
DeleteRequests(ctx context.Context, projectID ulid.ULID) error
|
|
||||||
SendRequest(ctx context.Context, id ulid.ULID) (Request, error)
|
|
||||||
SetActiveProjectID(ulid.ULID)
|
|
||||||
SetFindReqsFilter(filter FindRequestsFilter)
|
|
||||||
FindReqsFilter() FindRequestsFilter
|
|
||||||
}
|
|
||||||
|
|
||||||
type service struct {
|
|
||||||
activeProjectID ulid.ULID
|
activeProjectID ulid.ULID
|
||||||
findReqsFilter FindRequestsFilter
|
findReqsFilter FindRequestsFilter
|
||||||
scope *scope.Scope
|
scope *scope.Scope
|
||||||
repo Repository
|
repo Repository
|
||||||
reqLogSvc reqlog.Service
|
reqLogSvc *reqlog.Service
|
||||||
httpClient *http.Client
|
httpClient *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +48,7 @@ type FindRequestsFilter struct {
|
|||||||
type Config struct {
|
type Config struct {
|
||||||
Scope *scope.Scope
|
Scope *scope.Scope
|
||||||
Repository Repository
|
Repository Repository
|
||||||
ReqLogService reqlog.Service
|
ReqLogService *reqlog.Service
|
||||||
HTTPClient *http.Client
|
HTTPClient *http.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,8 +56,8 @@ type SendError struct {
|
|||||||
err error
|
err error
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewService(cfg Config) Service {
|
func NewService(cfg Config) *Service {
|
||||||
svc := &service{
|
svc := &Service{
|
||||||
repo: cfg.Repository,
|
repo: cfg.Repository,
|
||||||
reqLogSvc: cfg.ReqLogService,
|
reqLogSvc: cfg.ReqLogService,
|
||||||
httpClient: defaultHTTPClient,
|
httpClient: defaultHTTPClient,
|
||||||
@ -97,7 +85,7 @@ type Request struct {
|
|||||||
Response *reqlog.ResponseLog
|
Response *reqlog.ResponseLog
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindRequestByID(ctx context.Context, id ulid.ULID) (Request, error) {
|
func (svc *Service) FindRequestByID(ctx context.Context, id ulid.ULID) (Request, error) {
|
||||||
req, err := svc.repo.FindSenderRequestByID(ctx, id)
|
req, err := svc.repo.FindSenderRequestByID(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Request{}, fmt.Errorf("sender: failed to find request: %w", err)
|
return Request{}, fmt.Errorf("sender: failed to find request: %w", err)
|
||||||
@ -106,11 +94,11 @@ func (svc *service) FindRequestByID(ctx context.Context, id ulid.ULID) (Request,
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindRequests(ctx context.Context) ([]Request, error) {
|
func (svc *Service) FindRequests(ctx context.Context) ([]Request, error) {
|
||||||
return svc.repo.FindSenderRequests(ctx, svc.findReqsFilter, svc.scope)
|
return svc.repo.FindSenderRequests(ctx, svc.findReqsFilter, svc.scope)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) CreateOrUpdateRequest(ctx context.Context, req Request) (Request, error) {
|
func (svc *Service) CreateOrUpdateRequest(ctx context.Context, req Request) (Request, error) {
|
||||||
if svc.activeProjectID.Compare(ulid.ULID{}) == 0 {
|
if svc.activeProjectID.Compare(ulid.ULID{}) == 0 {
|
||||||
return Request{}, ErrProjectIDMustBeSet
|
return Request{}, ErrProjectIDMustBeSet
|
||||||
}
|
}
|
||||||
@ -141,7 +129,7 @@ func (svc *service) CreateOrUpdateRequest(ctx context.Context, req Request) (Req
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) CloneFromRequestLog(ctx context.Context, reqLogID ulid.ULID) (Request, error) {
|
func (svc *Service) CloneFromRequestLog(ctx context.Context, reqLogID ulid.ULID) (Request, error) {
|
||||||
if svc.activeProjectID.Compare(ulid.ULID{}) == 0 {
|
if svc.activeProjectID.Compare(ulid.ULID{}) == 0 {
|
||||||
return Request{}, ErrProjectIDMustBeSet
|
return Request{}, ErrProjectIDMustBeSet
|
||||||
}
|
}
|
||||||
@ -170,15 +158,15 @@ func (svc *service) CloneFromRequestLog(ctx context.Context, reqLogID ulid.ULID)
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetFindReqsFilter(filter FindRequestsFilter) {
|
func (svc *Service) SetFindReqsFilter(filter FindRequestsFilter) {
|
||||||
svc.findReqsFilter = filter
|
svc.findReqsFilter = filter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) FindReqsFilter() FindRequestsFilter {
|
func (svc *Service) FindReqsFilter() FindRequestsFilter {
|
||||||
return svc.findReqsFilter
|
return svc.findReqsFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SendRequest(ctx context.Context, id ulid.ULID) (Request, error) {
|
func (svc *Service) SendRequest(ctx context.Context, id ulid.ULID) (Request, error) {
|
||||||
req, err := svc.repo.FindSenderRequestByID(ctx, id)
|
req, err := svc.repo.FindSenderRequestByID(ctx, id)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return Request{}, fmt.Errorf("sender: failed to find request: %w", err)
|
return Request{}, fmt.Errorf("sender: failed to find request: %w", err)
|
||||||
@ -219,7 +207,7 @@ func parseHTTPRequest(ctx context.Context, req Request) (*http.Request, error) {
|
|||||||
return httpReq, nil
|
return httpReq, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) sendHTTPRequest(httpReq *http.Request) (reqlog.ResponseLog, error) {
|
func (svc *Service) sendHTTPRequest(httpReq *http.Request) (reqlog.ResponseLog, error) {
|
||||||
res, err := svc.httpClient.Do(httpReq)
|
res, err := svc.httpClient.Do(httpReq)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return reqlog.ResponseLog{}, &SendError{err}
|
return reqlog.ResponseLog{}, &SendError{err}
|
||||||
@ -234,11 +222,11 @@ func (svc *service) sendHTTPRequest(httpReq *http.Request) (reqlog.ResponseLog,
|
|||||||
return resLog, err
|
return resLog, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) SetActiveProjectID(id ulid.ULID) {
|
func (svc *Service) SetActiveProjectID(id ulid.ULID) {
|
||||||
svc.activeProjectID = id
|
svc.activeProjectID = id
|
||||||
}
|
}
|
||||||
|
|
||||||
func (svc *service) DeleteRequests(ctx context.Context, projectID ulid.ULID) error {
|
func (svc *Service) DeleteRequests(ctx context.Context, projectID ulid.ULID) error {
|
||||||
return svc.repo.DeleteSenderRequests(ctx, projectID)
|
return svc.repo.DeleteSenderRequests(ctx, projectID)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,5 @@
|
|||||||
package sender_test
|
package sender_test
|
||||||
|
|
||||||
//go:generate go run github.com/matryer/moq -out reqlog_mock_test.go -pkg sender_test ../reqlog Service:ReqLogServiceMock
|
|
||||||
//go:generate go run github.com/matryer/moq -out repo_mock_test.go -pkg sender_test . Repository:RepoMock
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
@ -14,9 +11,12 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
badgerdb "github.com/dgraph-io/badger/v3"
|
||||||
"github.com/google/go-cmp/cmp"
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"github.com/google/go-cmp/cmp/cmpopts"
|
||||||
"github.com/oklog/ulid"
|
"github.com/oklog/ulid"
|
||||||
|
|
||||||
|
"github.com/dstotijn/hetty/pkg/db/badger"
|
||||||
"github.com/dstotijn/hetty/pkg/reqlog"
|
"github.com/dstotijn/hetty/pkg/reqlog"
|
||||||
"github.com/dstotijn/hetty/pkg/sender"
|
"github.com/dstotijn/hetty/pkg/sender"
|
||||||
)
|
)
|
||||||
@ -54,13 +54,13 @@ func TestStoreRequest(t *testing.T) {
|
|||||||
t.Run("with active project", func(t *testing.T) {
|
t.Run("with active project", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
repoMock := &RepoMock{
|
db, err := badger.OpenDatabase(badgerdb.DefaultOptions("").WithInMemory(true))
|
||||||
StoreSenderRequestFunc: func(ctx context.Context, req sender.Request) error {
|
if err != nil {
|
||||||
return nil
|
t.Fatalf("failed to open database: %v", err)
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := sender.NewService(sender.Config{
|
svc := sender.NewService(sender.Config{
|
||||||
Repository: repoMock,
|
Repository: db,
|
||||||
})
|
})
|
||||||
|
|
||||||
projectID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
projectID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
||||||
@ -94,18 +94,18 @@ func TestStoreRequest(t *testing.T) {
|
|||||||
t.Fatal("expected request ID to be non-empty value")
|
t.Fatal("expected request ID to be non-empty value")
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(repoMock.StoreSenderRequestCalls()) != 1 {
|
diff := cmp.Diff(exp, got, cmpopts.IgnoreFields(sender.Request{}, "ID"))
|
||||||
t.Fatal("expected `svc.repo.StoreSenderRequest()` to have been called 1 time")
|
if diff != "" {
|
||||||
|
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
||||||
}
|
}
|
||||||
|
|
||||||
if diff := cmp.Diff(got, repoMock.StoreSenderRequestCalls()[0].Req); diff != "" {
|
got, err = db.FindSenderRequestByID(context.Background(), got.ID)
|
||||||
t.Fatalf("repo call arg not equal (-exp, +got):\n%v", diff)
|
if err != nil {
|
||||||
|
t.Fatalf("failed to find request by ID: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset ID to make comparison with expected easier.
|
diff = cmp.Diff(exp, got, cmpopts.IgnoreFields(sender.Request{}, "ID"))
|
||||||
got.ID = ulid.ULID{}
|
if diff != "" {
|
||||||
|
|
||||||
if diff := cmp.Diff(exp, got); diff != "" {
|
|
||||||
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -130,6 +130,13 @@ func TestCloneFromRequestLog(t *testing.T) {
|
|||||||
t.Run("with active project", func(t *testing.T) {
|
t.Run("with active project", func(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
db, err := badger.OpenDatabase(badgerdb.DefaultOptions("").WithInMemory(true))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to open database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
defer db.Close()
|
||||||
|
|
||||||
reqLog := reqlog.RequestLog{
|
reqLog := reqlog.RequestLog{
|
||||||
ID: reqLogID,
|
ID: reqLogID,
|
||||||
ProjectID: ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy),
|
ProjectID: ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy),
|
||||||
@ -142,19 +149,15 @@ func TestCloneFromRequestLog(t *testing.T) {
|
|||||||
Body: []byte("foobar"),
|
Body: []byte("foobar"),
|
||||||
}
|
}
|
||||||
|
|
||||||
reqLogMock := &ReqLogServiceMock{
|
if err := db.StoreRequestLog(context.Background(), reqLog); err != nil {
|
||||||
FindRequestLogByIDFunc: func(ctx context.Context, id ulid.ULID) (reqlog.RequestLog, error) {
|
t.Fatalf("failed to store request log: %v", err)
|
||||||
return reqLog, nil
|
|
||||||
},
|
|
||||||
}
|
|
||||||
repoMock := &RepoMock{
|
|
||||||
StoreSenderRequestFunc: func(ctx context.Context, req sender.Request) error {
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := sender.NewService(sender.Config{
|
svc := sender.NewService(sender.Config{
|
||||||
ReqLogService: reqLogMock,
|
ReqLogService: reqlog.NewService(reqlog.Config{
|
||||||
Repository: repoMock,
|
Repository: db,
|
||||||
|
}),
|
||||||
|
Repository: db,
|
||||||
})
|
})
|
||||||
|
|
||||||
projectID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
projectID := ulid.MustNew(ulid.Timestamp(time.Now()), ulidEntropy)
|
||||||
@ -177,30 +180,8 @@ func TestCloneFromRequestLog(t *testing.T) {
|
|||||||
t.Fatalf("unexpected error cloning from request log: %v", err)
|
t.Fatalf("unexpected error cloning from request log: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(reqLogMock.FindRequestLogByIDCalls()) != 1 {
|
diff := cmp.Diff(exp, got, cmpopts.IgnoreFields(sender.Request{}, "ID"))
|
||||||
t.Fatal("expected `svc.reqLogSvc.FindRequestLogByID()` to have been called 1 time")
|
if diff != "" {
|
||||||
}
|
|
||||||
|
|
||||||
if got := reqLogMock.FindRequestLogByIDCalls()[0].ID; reqLogID.Compare(got) != 0 {
|
|
||||||
t.Fatalf("reqlog service call arg `id` not equal (expected: %q, got: %q)", reqLogID, got)
|
|
||||||
}
|
|
||||||
|
|
||||||
if got.ID.Compare(ulid.ULID{}) == 0 {
|
|
||||||
t.Fatal("expected request ID to be non-empty value")
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(repoMock.StoreSenderRequestCalls()) != 1 {
|
|
||||||
t.Fatal("expected `svc.repo.StoreSenderRequest()` to have been called 1 time")
|
|
||||||
}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(got, repoMock.StoreSenderRequestCalls()[0].Req); diff != "" {
|
|
||||||
t.Fatalf("repo call arg not equal (-exp, +got):\n%v", diff)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reset ID to make comparison with expected easier.
|
|
||||||
got.ID = ulid.ULID{}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(exp, got); diff != "" {
|
|
||||||
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -209,6 +190,11 @@ func TestCloneFromRequestLog(t *testing.T) {
|
|||||||
func TestSendRequest(t *testing.T) {
|
func TestSendRequest(t *testing.T) {
|
||||||
t.Parallel()
|
t.Parallel()
|
||||||
|
|
||||||
|
db, err := badger.OpenDatabase(badgerdb.DefaultOptions("").WithInMemory(true))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("failed to open database: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
date := time.Now().Format(http.TimeFormat)
|
date := time.Now().Format(http.TimeFormat)
|
||||||
|
|
||||||
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
@ -233,19 +219,18 @@ func TestSendRequest(t *testing.T) {
|
|||||||
Body: []byte("foobar"),
|
Body: []byte("foobar"),
|
||||||
}
|
}
|
||||||
|
|
||||||
repoMock := &RepoMock{
|
if err := db.StoreSenderRequest(context.Background(), req); err != nil {
|
||||||
FindSenderRequestByIDFunc: func(ctx context.Context, id ulid.ULID) (sender.Request, error) {
|
t.Fatalf("failed to store request: %v", err)
|
||||||
return req, nil
|
|
||||||
},
|
|
||||||
StoreResponseLogFunc: func(ctx context.Context, reqLogID ulid.ULID, resLog reqlog.ResponseLog) error {
|
|
||||||
return nil
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
svc := sender.NewService(sender.Config{
|
svc := sender.NewService(sender.Config{
|
||||||
Repository: repoMock,
|
ReqLogService: reqlog.NewService(reqlog.Config{
|
||||||
|
Repository: db,
|
||||||
|
}),
|
||||||
|
Repository: db,
|
||||||
})
|
})
|
||||||
|
|
||||||
exp := reqlog.ResponseLog{
|
exp := &reqlog.ResponseLog{
|
||||||
Proto: "HTTP/1.1",
|
Proto: "HTTP/1.1",
|
||||||
StatusCode: http.StatusOK,
|
StatusCode: http.StatusOK,
|
||||||
Status: "200 OK",
|
Status: "200 OK",
|
||||||
@ -263,27 +248,8 @@ func TestSendRequest(t *testing.T) {
|
|||||||
t.Fatalf("unexpected error sending request: %v", err)
|
t.Fatalf("unexpected error sending request: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(repoMock.FindSenderRequestByIDCalls()) != 1 {
|
diff := cmp.Diff(exp, got.Response, cmpopts.IgnoreFields(sender.Request{}, "ID"))
|
||||||
t.Fatal("expected `svc.repo.FindSenderRequestByID()` to have been called 1 time")
|
if diff != "" {
|
||||||
}
|
t.Fatalf("request not equal (-exp, +got):\n%v", diff)
|
||||||
|
|
||||||
if diff := cmp.Diff(reqID, repoMock.FindSenderRequestByIDCalls()[0].ID); diff != "" {
|
|
||||||
t.Fatalf("call arg `id` for `svc.repo.FindSenderRequestByID()` not equal (-exp, +got):\n%v", diff)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(repoMock.StoreResponseLogCalls()) != 1 {
|
|
||||||
t.Fatal("expected `svc.repo.StoreResponseLog()` to have been called 1 time")
|
|
||||||
}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(reqID, repoMock.StoreResponseLogCalls()[0].ReqLogID); diff != "" {
|
|
||||||
t.Fatalf("call arg `reqLogID` for `svc.repo.StoreResponseLog()` not equal (-exp, +got):\n%v", diff)
|
|
||||||
}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(exp, repoMock.StoreResponseLogCalls()[0].ResLog); diff != "" {
|
|
||||||
t.Fatalf("call arg `resLog` for `svc.repo.StoreResponseLog()` not equal (-exp, +got):\n%v", diff)
|
|
||||||
}
|
|
||||||
|
|
||||||
if diff := cmp.Diff(repoMock.StoreResponseLogCalls()[0].ResLog, *got.Response); diff != "" {
|
|
||||||
t.Fatalf("returned response log value and persisted value not equal (-exp, +got):\n%v", diff)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user