1package engine
2
3import (
4	"context"
5	"errors"
6	"sync/atomic"
7	"testing"
8
9	"github.com/apex/log"
10	"github.com/ooni/probe-engine/model"
11)
12
13func TestSubmitterNotEnabled(t *testing.T) {
14	ctx := context.Background()
15	submitter, err := NewSubmitter(ctx, SubmitterConfig{
16		Enabled: false,
17	})
18	if err != nil {
19		t.Fatal(err)
20	}
21	if _, ok := submitter.(stubSubmitter); !ok {
22		t.Fatal("we did not get a stubSubmitter instance")
23	}
24	m := new(model.Measurement)
25	if err := submitter.Submit(ctx, m); err != nil {
26		t.Fatal(err)
27	}
28}
29
30type FakeSubmitter struct {
31	Calls uint32
32	Error error
33}
34
35func (fs *FakeSubmitter) Submit(ctx context.Context, m *model.Measurement) error {
36	atomic.AddUint32(&fs.Calls, 1)
37	return fs.Error
38}
39
40var _ Submitter = &FakeSubmitter{}
41
42type FakeSubmitterSession struct {
43	Error     error
44	Submitter Submitter
45}
46
47func (fse FakeSubmitterSession) NewSubmitter(ctx context.Context) (Submitter, error) {
48	return fse.Submitter, fse.Error
49}
50
51var _ SubmitterSession = FakeSubmitterSession{}
52
53func TestNewSubmitterFails(t *testing.T) {
54	expected := errors.New("mocked error")
55	ctx := context.Background()
56	submitter, err := NewSubmitter(ctx, SubmitterConfig{
57		Enabled: true,
58		Session: FakeSubmitterSession{Error: expected},
59	})
60	if !errors.Is(err, expected) {
61		t.Fatalf("not the error we expected: %+v", err)
62	}
63	if submitter != nil {
64		t.Fatal("expected nil submitter here")
65	}
66}
67
68func TestNewSubmitterWithFailedSubmission(t *testing.T) {
69	expected := errors.New("mocked error")
70	ctx := context.Background()
71	fakeSubmitter := &FakeSubmitter{Error: expected}
72	submitter, err := NewSubmitter(ctx, SubmitterConfig{
73		Enabled: true,
74		Logger:  log.Log,
75		Session: FakeSubmitterSession{Submitter: fakeSubmitter},
76	})
77	if err != nil {
78		t.Fatal(err)
79	}
80	m := new(model.Measurement)
81	err = submitter.Submit(context.Background(), m)
82	if !errors.Is(err, expected) {
83		t.Fatalf("not the error we expected: %+v", err)
84	}
85	if fakeSubmitter.Calls != 1 {
86		t.Fatal("unexpected number of calls")
87	}
88}
89