Skip to content

Commit

Permalink
cleanup(pkg/oonimkall): simplify test code
Browse files Browse the repository at this point in the history
This diff simplifies test code in pkg/oonimkall in preparation
for further richer-input related changes.

Part of ooni/probe#2607
  • Loading branch information
bassosimone committed Jun 7, 2024
1 parent 6a86d43 commit 8b710f6
Show file tree
Hide file tree
Showing 8 changed files with 292 additions and 582 deletions.
30 changes: 30 additions & 0 deletions internal/mocks/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,16 @@ type Session struct {

MockCheckIn func(ctx context.Context,
config *model.OOAPICheckInConfig) (*model.OOAPICheckInResult, error)

MockClose func() error

MockMaybeLookupBackendsContext func(ctx context.Context) error

MockMaybeLookupLocationContext func(ctx context.Context) error

MockResolverASNString func() string

MockResolverNetworkName func() string
}

func (sess *Session) GetTestHelpersByName(name string) ([]model.OOAPIService, bool) {
Expand Down Expand Up @@ -159,3 +169,23 @@ func (sess *Session) CheckIn(ctx context.Context,
config *model.OOAPICheckInConfig) (*model.OOAPICheckInResult, error) {
return sess.MockCheckIn(ctx, config)
}

func (sess *Session) Close() error {
return sess.MockClose()
}

func (sess *Session) MaybeLookupBackendsContext(ctx context.Context) error {
return sess.MockMaybeLookupBackendsContext(ctx)
}

func (sess *Session) MaybeLookupLocationContext(ctx context.Context) error {
return sess.MockMaybeLookupLocationContext(ctx)
}

func (sess *Session) ResolverASNString() string {
return sess.MockResolverASNString()
}

func (sess *Session) ResolverNetworkName() string {
return sess.MockResolverNetworkName()
}
61 changes: 61 additions & 0 deletions internal/mocks/session_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -354,4 +354,65 @@ func TestSession(t *testing.T) {
t.Fatal("unexpected out")
}
})

t.Run("Close", func(t *testing.T) {
expected := errors.New("mocked err")
s := &Session{
MockClose: func() error {
return expected
},
}
err := s.Close()
if !errors.Is(err, expected) {
t.Fatal("unexpected err")
}
})

t.Run("MaybeLookupBackendsContext", func(t *testing.T) {
expected := errors.New("mocked err")
s := &Session{
MockMaybeLookupBackendsContext: func(ctx context.Context) error {
return expected
},
}
err := s.MaybeLookupBackendsContext(context.Background())
if !errors.Is(err, expected) {
t.Fatal("unexpected err")
}
})

t.Run("MaybeLookupLocationContext", func(t *testing.T) {
expected := errors.New("mocked err")
s := &Session{
MockMaybeLookupLocationContext: func(ctx context.Context) error {
return expected
},
}
err := s.MaybeLookupLocationContext(context.Background())
if !errors.Is(err, expected) {
t.Fatal("unexpected err")
}
})

t.Run("ResolverASNString", func(t *testing.T) {
s := &Session{
MockResolverASNString: func() string {
return "xx"
},
}
if s.ResolverASNString() != "xx" {
t.Fatal("unexpected result")
}
})

t.Run("ResolverNetworkName", func(t *testing.T) {
s := &Session{
MockResolverNetworkName: func() string {
return "xx"
},
}
if s.ResolverNetworkName() != "xx" {
t.Fatal("unexpected result")
}
})
}
187 changes: 4 additions & 183 deletions pkg/oonimkall/taskmocks_test.go
Original file line number Diff line number Diff line change
@@ -1,19 +1,14 @@
package oonimkall

import (
"context"
"errors"
"sync"

"github.com/ooni/probe-cli/v3/internal/engine"
"github.com/ooni/probe-cli/v3/internal/model"
)

//
// This file contains mocks for types used by tasks. Because
// we only use mocks when testing, this file is a `_test.go` file.
//

import (
"sync"
)

// CollectorTaskEmitter is a thread-safe taskEmitter
// that stores all the events inside itself.
type CollectorTaskEmitter struct {
Expand Down Expand Up @@ -46,177 +41,3 @@ func (e *CollectorTaskEmitter) Collect() (out []*event) {
e.mu.Unlock()
return
}

// SessionBuilderConfigSaver is a session builder that
// saves the received config and returns an error.
type SessionBuilderConfigSaver struct {
Config engine.SessionConfig
}

var _ taskSessionBuilder = &SessionBuilderConfigSaver{}

func (b *SessionBuilderConfigSaver) NewSession(
ctx context.Context, config engine.SessionConfig) (taskSession, error) {
b.Config = config
return nil, errors.New("mocked error")
}

// MockableTaskRunnerDependencies allows to mock all the
// dependencies of taskRunner using a single structure.
type MockableTaskRunnerDependencies struct {

// taskSessionBuilder:

MockNewSession func(ctx context.Context,
config engine.SessionConfig) (taskSession, error)

// taskSession:

MockClose func() error
MockNewExperimentBuilderByName func(name string) (taskExperimentBuilder, error)
MockMaybeLookupBackendsContext func(ctx context.Context) error
MockMaybeLookupLocationContext func(ctx context.Context) error
MockProbeIP func() string
MockProbeASNString func() string
MockProbeCC func() string
MockProbeNetworkName func() string
MockResolverASNString func() string
MockResolverIP func() string
MockResolverNetworkName func() string

// taskExperimentBuilder:

MockableSetCallbacks func(callbacks model.ExperimentCallbacks)
MockableInputPolicy func() model.InputPolicy
MockableNewExperimentInstance func() taskExperiment
MockableInterruptible func() bool

// taskExperiment:

MockableKibiBytesReceived func() float64
MockableKibiBytesSent func() float64
MockableOpenReportContext func(ctx context.Context) error
MockableReportID func() string
MockableMeasureWithContext func(ctx context.Context, target model.ExperimentTarget) (
measurement *model.Measurement, err error)
MockableSubmitAndUpdateMeasurementContext func(
ctx context.Context, measurement *model.Measurement) error
}

var (
_ taskSessionBuilder = &MockableTaskRunnerDependencies{}
_ taskSession = &MockableTaskRunnerDependencies{}
_ taskExperimentBuilder = &MockableTaskRunnerDependencies{}
_ taskExperiment = &MockableTaskRunnerDependencies{}
)

func (dep *MockableTaskRunnerDependencies) NewSession(
ctx context.Context, config engine.SessionConfig) (taskSession, error) {
if f := dep.MockNewSession; f != nil {
return f(ctx, config)
}
return dep, nil
}

func (dep *MockableTaskRunnerDependencies) Close() error {
return dep.MockClose()
}

func (dep *MockableTaskRunnerDependencies) NewExperimentBuilderByName(name string) (taskExperimentBuilder, error) {
if f := dep.MockNewExperimentBuilderByName; f != nil {
return f(name)
}
return dep, nil
}

func (dep *MockableTaskRunnerDependencies) MaybeLookupBackendsContext(ctx context.Context) error {
return dep.MockMaybeLookupBackendsContext(ctx)
}

func (dep *MockableTaskRunnerDependencies) MaybeLookupLocationContext(ctx context.Context) error {
return dep.MockMaybeLookupLocationContext(ctx)
}

func (dep *MockableTaskRunnerDependencies) ProbeIP() string {
return dep.MockProbeIP()
}

func (dep *MockableTaskRunnerDependencies) ProbeASNString() string {
return dep.MockProbeASNString()
}

func (dep *MockableTaskRunnerDependencies) ProbeCC() string {
return dep.MockProbeCC()
}

func (dep *MockableTaskRunnerDependencies) ProbeNetworkName() string {
return dep.MockProbeNetworkName()
}

func (dep *MockableTaskRunnerDependencies) ResolverASNString() string {
return dep.MockResolverASNString()
}

func (dep *MockableTaskRunnerDependencies) ResolverIP() string {
return dep.MockResolverIP()
}

func (dep *MockableTaskRunnerDependencies) ResolverNetworkName() string {
return dep.MockResolverNetworkName()
}

func (dep *MockableTaskRunnerDependencies) SetCallbacks(callbacks model.ExperimentCallbacks) {
dep.MockableSetCallbacks(callbacks)
}

func (dep *MockableTaskRunnerDependencies) InputPolicy() model.InputPolicy {
return dep.MockableInputPolicy()
}

func (dep *MockableTaskRunnerDependencies) NewExperimentInstance() taskExperiment {
if f := dep.MockableNewExperimentInstance; f != nil {
return f()
}
return dep
}

func (dep *MockableTaskRunnerDependencies) Interruptible() bool {
return dep.MockableInterruptible()
}

func (dep *MockableTaskRunnerDependencies) KibiBytesReceived() float64 {
return dep.MockableKibiBytesReceived()
}

func (dep *MockableTaskRunnerDependencies) KibiBytesSent() float64 {
return dep.MockableKibiBytesSent()
}

func (dep *MockableTaskRunnerDependencies) OpenReportContext(ctx context.Context) error {
return dep.MockableOpenReportContext(ctx)
}

func (dep *MockableTaskRunnerDependencies) ReportID() string {
return dep.MockableReportID()
}

func (dep *MockableTaskRunnerDependencies) MeasureWithContext(
ctx context.Context, target model.ExperimentTarget) (measurement *model.Measurement, err error) {
return dep.MockableMeasureWithContext(ctx, target)
}

func (dep *MockableTaskRunnerDependencies) SubmitAndUpdateMeasurementContext(
ctx context.Context, measurement *model.Measurement) error {
return dep.MockableSubmitAndUpdateMeasurementContext(ctx, measurement)
}

// MockableKVStoreFSBuilder is a mockable taskKVStoreFSBuilder.
type MockableKVStoreFSBuilder struct {
MockNewFS func(path string) (model.KeyValueStore, error)
}

var _ taskKVStoreFSBuilder = &MockableKVStoreFSBuilder{}

func (m *MockableKVStoreFSBuilder) NewFS(path string) (model.KeyValueStore, error) {
return m.MockNewFS(path)
}
Loading

0 comments on commit 8b710f6

Please sign in to comment.