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