refactor: pass experiment arguments using a struct (#983)
Closes https://github.com/ooni/probe/issues/2358.
This commit is contained in:
parent
c2ea0b4704
commit
a0dc65641d
internal
engine
experiment.goexperiment_integration_test.go
experiment
dash
dnscheck
dnsping
example
fbmessenger
hhfm
hirl
httphostheader
ndt7
portfiltering
psiphon
quicping
riseupvpn
run
signal
simplequicping
sniblocking
stunreachability
tcpping
telegram
tlsmiddlebox
tlsping
tlstool
tor
torsf
urlgetter
vanillator
webconnectivity
whatsapp
experiment/webconnectivity
model
tutorial/experiment/torsf
@ -92,7 +92,12 @@ func (eaw *experimentAsyncWrapper) RunAsync(
|
|||||||
out := make(chan *model.ExperimentAsyncTestKeys)
|
out := make(chan *model.ExperimentAsyncTestKeys)
|
||||||
measurement := eaw.experiment.newMeasurement(input)
|
measurement := eaw.experiment.newMeasurement(input)
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
err := eaw.experiment.measurer.Run(ctx, eaw.session, measurement, eaw.callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: eaw.callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: eaw.session,
|
||||||
|
}
|
||||||
|
err := eaw.experiment.measurer.Run(ctx, args)
|
||||||
stop := time.Now()
|
stop := time.Now()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -249,10 +249,10 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements model.ExperimentMeasurer.Run.
|
// Run implements model.ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
measurement.TestKeys = tk
|
measurement.TestKeys = tk
|
||||||
saver := &tracex.Saver{}
|
saver := &tracex.Saver{}
|
||||||
|
@ -270,15 +270,15 @@ func TestMeasureWithCancelledContext(t *testing.T) {
|
|||||||
cancel() // cause failure
|
cancel() // cause failure
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
m := &Measurer{}
|
m := &Measurer{}
|
||||||
err := m.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableHTTPClient: http.DefaultClient,
|
MockableHTTPClient: http.DefaultClient,
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := m.Run(ctx, args)
|
||||||
)
|
|
||||||
// See corresponding comment in Measurer.Run implementation to
|
// See corresponding comment in Measurer.Run implementation to
|
||||||
// understand why here it's correct to return nil.
|
// understand why here it's correct to return nil.
|
||||||
if !errors.Is(err, nil) {
|
if !errors.Is(err, nil) {
|
||||||
|
@ -120,10 +120,11 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements model.ExperimentSession.Run
|
// Run implements model.ExperimentSession.Run
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
_ = args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
|
|
||||||
// 1. fill the measurement with test keys
|
// 1. fill the measurement with test keys
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
tk.Lookups = make(map[string]urlgetter.TestKeys)
|
tk.Lookups = make(map[string]urlgetter.TestKeys)
|
||||||
|
@ -56,12 +56,12 @@ func TestExperimentNameAndVersion(t *testing.T) {
|
|||||||
|
|
||||||
func TestDNSCheckFailsWithoutInput(t *testing.T) {
|
func TestDNSCheckFailsWithoutInput(t *testing.T) {
|
||||||
measurer := NewExperimentMeasurer(Config{Domain: "example.com"})
|
measurer := NewExperimentMeasurer(Config{Domain: "example.com"})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: new(model.Measurement),
|
||||||
new(model.Measurement),
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, ErrInputRequired) {
|
if !errors.Is(err, ErrInputRequired) {
|
||||||
t.Fatal("expected no input error")
|
t.Fatal("expected no input error")
|
||||||
}
|
}
|
||||||
@ -69,12 +69,12 @@ func TestDNSCheckFailsWithoutInput(t *testing.T) {
|
|||||||
|
|
||||||
func TestDNSCheckFailsWithInvalidURL(t *testing.T) {
|
func TestDNSCheckFailsWithInvalidURL(t *testing.T) {
|
||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &model.Measurement{Input: "Not a valid URL \x7f"},
|
||||||
&model.Measurement{Input: "Not a valid URL \x7f"},
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, ErrInvalidURL) {
|
if !errors.Is(err, ErrInvalidURL) {
|
||||||
t.Fatal("expected invalid input error")
|
t.Fatal("expected invalid input error")
|
||||||
}
|
}
|
||||||
@ -82,12 +82,12 @@ func TestDNSCheckFailsWithInvalidURL(t *testing.T) {
|
|||||||
|
|
||||||
func TestDNSCheckFailsWithUnsupportedProtocol(t *testing.T) {
|
func TestDNSCheckFailsWithUnsupportedProtocol(t *testing.T) {
|
||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &model.Measurement{Input: "file://1.1.1.1"},
|
||||||
&model.Measurement{Input: "file://1.1.1.1"},
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, ErrUnsupportedURLScheme) {
|
if !errors.Is(err, ErrUnsupportedURLScheme) {
|
||||||
t.Fatal("expected unsupported scheme error")
|
t.Fatal("expected unsupported scheme error")
|
||||||
}
|
}
|
||||||
@ -100,12 +100,12 @@ func TestWithCancelledContext(t *testing.T) {
|
|||||||
DefaultAddrs: "1.1.1.1 1.0.0.1",
|
DefaultAddrs: "1.1.1.1 1.0.0.1",
|
||||||
})
|
})
|
||||||
measurement := &model.Measurement{Input: "dot://one.one.one.one"}
|
measurement := &model.Measurement{Input: "dot://one.one.one.one"}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: measurement,
|
||||||
measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -147,12 +147,12 @@ func TestDNSCheckValid(t *testing.T) {
|
|||||||
DefaultAddrs: "1.1.1.1 1.0.0.1",
|
DefaultAddrs: "1.1.1.1 1.0.0.1",
|
||||||
})
|
})
|
||||||
measurement := model.Measurement{Input: "dot://one.one.one.one:853"}
|
measurement := model.Measurement{Input: "dot://one.one.one.one:853"}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &measurement,
|
||||||
&measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %s", err.Error())
|
t.Fatalf("unexpected error: %s", err.Error())
|
||||||
}
|
}
|
||||||
@ -195,12 +195,12 @@ func TestDNSCheckWait(t *testing.T) {
|
|||||||
measurer := &Measurer{Endpoints: endpoints}
|
measurer := &Measurer{Endpoints: endpoints}
|
||||||
run := func(input string) {
|
run := func(input string) {
|
||||||
measurement := model.Measurement{Input: model.MeasurementTarget(input)}
|
measurement := model.Measurement{Input: model.MeasurementTarget(input)}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &measurement,
|
||||||
&measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %s", err.Error())
|
t.Fatalf("unexpected error: %s", err.Error())
|
||||||
}
|
}
|
||||||
|
@ -85,12 +85,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errNoInputProvided
|
return errNoInputProvided
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,12 @@ func TestMeasurer_run(t *testing.T) {
|
|||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
return meas, m, err
|
return meas, m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,10 +57,10 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
var ErrFailure = errors.New("mocked error")
|
var ErrFailure = errors.New("mocked error")
|
||||||
|
|
||||||
// Run implements model.ExperimentMeasurer.Run.
|
// Run implements model.ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
var err error
|
var err error
|
||||||
if m.config.ReturnError {
|
if m.config.ReturnError {
|
||||||
err = ErrFailure
|
err = ErrFailure
|
||||||
|
@ -26,7 +26,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(sess.Logger())
|
callbacks := model.NewPrinterCallbacks(sess.Logger())
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := m.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -47,7 +52,12 @@ func TestFailure(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(sess.Logger())
|
callbacks := model.NewPrinterCallbacks(sess.Logger())
|
||||||
err := m.Run(ctx, sess, new(model.Measurement), callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: new(model.Measurement),
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if !errors.Is(err, example.ErrFailure) {
|
if !errors.Is(err, example.ErrFailure) {
|
||||||
t.Fatal("expected an error here")
|
t.Fatal("expected an error here")
|
||||||
}
|
}
|
||||||
|
@ -157,10 +157,10 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run
|
// Run implements ExperimentMeasurer.Run
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
urlgetter.RegisterExtensions(measurement)
|
urlgetter.RegisterExtensions(measurement)
|
||||||
|
@ -35,7 +35,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
sess := newsession(t)
|
sess := newsession(t)
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -97,7 +102,12 @@ func TestWithCancelledContext(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -90,10 +90,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
urlgetter.RegisterExtensions(measurement)
|
urlgetter.RegisterExtensions(measurement)
|
||||||
|
@ -45,7 +45,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -153,7 +158,12 @@ func TestCancelledContext(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -259,7 +269,12 @@ func TestNoHelpers(t *testing.T) {
|
|||||||
sess := &mockable.Session{}
|
sess := &mockable.Session{}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hhfm.ErrNoAvailableTestHelpers) {
|
if !errors.Is(err, hhfm.ErrNoAvailableTestHelpers) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -309,7 +324,12 @@ func TestNoActualHelpersInList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hhfm.ErrNoAvailableTestHelpers) {
|
if !errors.Is(err, hhfm.ErrNoAvailableTestHelpers) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -362,7 +382,12 @@ func TestWrongTestHelperType(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hhfm.ErrInvalidHelperType) {
|
if !errors.Is(err, hhfm.ErrInvalidHelperType) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -415,7 +440,12 @@ func TestNewRequestFailure(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err == nil || !strings.HasSuffix(err.Error(), "invalid control character in URL") {
|
if err == nil || !strings.HasSuffix(err.Error(), "invalid control character in URL") {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -472,7 +502,12 @@ func TestInvalidJSONBody(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -78,10 +78,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
measurement.TestKeys = tk
|
measurement.TestKeys = tk
|
||||||
if len(m.Methods) < 1 {
|
if len(m.Methods) < 1 {
|
||||||
|
@ -42,7 +42,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -91,7 +96,12 @@ func TestCancelledContext(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -190,7 +200,12 @@ func TestWithFakeMethods(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -251,7 +266,12 @@ func TestWithNoMethods(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hirl.ErrNoMeasurementMethod) {
|
if !errors.Is(err, hirl.ErrNoMeasurementMethod) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -279,7 +299,12 @@ func TestNoHelpers(t *testing.T) {
|
|||||||
sess := &mockable.Session{}
|
sess := &mockable.Session{}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hirl.ErrNoAvailableTestHelpers) {
|
if !errors.Is(err, hirl.ErrNoAvailableTestHelpers) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -311,7 +336,12 @@ func TestNoActualHelperInList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hirl.ErrNoAvailableTestHelpers) {
|
if !errors.Is(err, hirl.ErrNoAvailableTestHelpers) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -346,7 +376,12 @@ func TestWrongTestHelperType(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, hirl.ErrInvalidHelperType) {
|
if !errors.Is(err, hirl.ErrInvalidHelperType) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
|
@ -46,12 +46,10 @@ func (m *Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errors.New("experiment requires input")
|
return errors.New("experiment requires input")
|
||||||
}
|
}
|
||||||
|
@ -30,12 +30,12 @@ func TestMeasurerMeasureNoMeasurementInput(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{
|
measurer := NewExperimentMeasurer(Config{
|
||||||
TestHelperURL: "http://www.google.com",
|
TestHelperURL: "http://www.google.com",
|
||||||
})
|
})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &model.Measurement{},
|
||||||
new(model.Measurement),
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err == nil || err.Error() != "experiment requires input" {
|
if err == nil || err.Error() != "experiment requires input" {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -44,12 +44,12 @@ func TestMeasurerMeasureNoMeasurementInput(t *testing.T) {
|
|||||||
func TestMeasurerMeasureNoTestHelper(t *testing.T) {
|
func TestMeasurerMeasureNoTestHelper(t *testing.T) {
|
||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := &model.Measurement{Input: "x.org"}
|
measurement := &model.Measurement{Input: "x.org"}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: measurement,
|
||||||
measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -75,12 +75,12 @@ func TestRunnerHTTPSetHostHeader(t *testing.T) {
|
|||||||
measurement := &model.Measurement{
|
measurement := &model.Measurement{
|
||||||
Input: "x.org",
|
Input: "x.org",
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: measurement,
|
||||||
measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if host != "x.org" {
|
if host != "x.org" {
|
||||||
t.Fatal("not the host we expected")
|
t.Fatal("not the host we expected")
|
||||||
}
|
}
|
||||||
|
@ -210,10 +210,10 @@ func (m *Measurer) doUpload(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
tk.Protocol = 7
|
tk.Protocol = 7
|
||||||
measurement.TestKeys = tk
|
measurement.TestKeys = tk
|
||||||
|
@ -84,7 +84,12 @@ func TestRunWithCancelledContext(t *testing.T) {
|
|||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
cancel() // immediately cancel
|
cancel() // immediately cancel
|
||||||
meas := &model.Measurement{}
|
meas := &model.Measurement{}
|
||||||
err := m.Run(ctx, sess, meas, model.NewPrinterCallbacks(log.Log))
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
// Here we get nil because we still want to submit this measurement
|
// Here we get nil because we still want to submit this measurement
|
||||||
if !errors.Is(err, nil) {
|
if !errors.Is(err, nil) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
@ -104,15 +109,15 @@ func TestGood(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableHTTPClient: http.DefaultClient,
|
MockableHTTPClient: http.DefaultClient,
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -133,15 +138,15 @@ func TestFailDownload(t *testing.T) {
|
|||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
meas := &model.Measurement{}
|
meas := &model.Measurement{}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: meas,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableHTTPClient: http.DefaultClient,
|
MockableHTTPClient: http.DefaultClient,
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
meas,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(ctx, args)
|
||||||
)
|
|
||||||
// We expect a nil failure here because we want to submit anyway
|
// We expect a nil failure here because we want to submit anyway
|
||||||
// a measurement that failed to connect to m-lab.
|
// a measurement that failed to connect to m-lab.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -164,15 +169,15 @@ func TestFailUpload(t *testing.T) {
|
|||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
meas := &model.Measurement{}
|
meas := &model.Measurement{}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: meas,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableHTTPClient: http.DefaultClient,
|
MockableHTTPClient: http.DefaultClient,
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
meas,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(ctx, args)
|
||||||
)
|
|
||||||
// Here we expect a nil error because we want to submit this measurement
|
// Here we expect a nil error because we want to submit this measurement
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
@ -197,15 +202,15 @@ func TestDownloadJSONUnmarshalFail(t *testing.T) {
|
|||||||
seenError = true
|
seenError = true
|
||||||
return expected
|
return expected
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: &model.Measurement{},
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableHTTPClient: http.DefaultClient,
|
MockableHTTPClient: http.DefaultClient,
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
new(model.Measurement),
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
// TODO(DecFox): Replace the localhost deployment with an OONI testhelper
|
// TODO(DecFox): Replace the localhost deployment with an OONI testhelper
|
||||||
// Ensure that we only do this once we have a deployed testhelper
|
// Ensure that we only do this once we have a deployed testhelper
|
||||||
testhelper := "http://127.0.0.1"
|
testhelper := "http://127.0.0.1"
|
||||||
|
@ -29,7 +29,12 @@ func TestMeasurer_run(t *testing.T) {
|
|||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -66,10 +66,10 @@ func (m *Measurer) printprogress(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run runs the measurement
|
// Run runs the measurement
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
const maxruntime = 300
|
const maxruntime = 300
|
||||||
ctx, cancel := context.WithTimeout(ctx, maxruntime*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, maxruntime*time.Second)
|
||||||
var (
|
var (
|
||||||
|
@ -33,8 +33,12 @@ func TestRunWithCancelledContext(t *testing.T) {
|
|||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
cancel() // fail immediately
|
cancel() // fail immediately
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(ctx, newfakesession(), measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: newfakesession(),
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
||||||
t.Fatal("expected another error here")
|
t.Fatal("expected another error here")
|
||||||
}
|
}
|
||||||
@ -64,8 +68,12 @@ func TestRunWithCustomInputAndCancelledContext(t *testing.T) {
|
|||||||
}
|
}
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
cancel() // fail immediately
|
cancel() // fail immediately
|
||||||
err := measurer.Run(ctx, newfakesession(), measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: newfakesession(),
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
||||||
t.Fatal("expected another error here")
|
t.Fatal("expected another error here")
|
||||||
}
|
}
|
||||||
@ -84,7 +92,12 @@ func TestRunWillPrintSomethingWithCancelledContext(t *testing.T) {
|
|||||||
cancel() // fail after we've given the printer a chance to run
|
cancel() // fail after we've given the printer a chance to run
|
||||||
}
|
}
|
||||||
observer := observerCallbacks{progress: &atomicx.Int64{}}
|
observer := observerCallbacks{progress: &atomicx.Int64{}}
|
||||||
err := measurer.Run(ctx, newfakesession(), measurement, observer)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: observer,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: newfakesession(),
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
||||||
t.Fatal("expected another error here")
|
t.Fatal("expected another error here")
|
||||||
}
|
}
|
||||||
|
@ -221,12 +221,11 @@ func (m *Measurer) receiver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
host := string(measurement.Input)
|
host := string(measurement.Input)
|
||||||
// allow URL input
|
// allow URL input
|
||||||
if u, err := url.ParseRequestURI(host); err == nil {
|
if u, err := url.ParseRequestURI(host); err == nil {
|
||||||
|
@ -33,8 +33,12 @@ func TestInvalidHost(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("a.a.a.a")
|
measurement.Input = model.MeasurementTarget("a.a.a.a")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected an error here")
|
t.Fatal("expected an error here")
|
||||||
}
|
}
|
||||||
@ -53,8 +57,12 @@ func TestURLInput(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("https://google.com/")
|
measurement.Input = model.MeasurementTarget("https://google.com/")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("unexpected error")
|
t.Fatal("unexpected error")
|
||||||
}
|
}
|
||||||
@ -73,8 +81,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("google.com")
|
measurement.Input = model.MeasurementTarget("google.com")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("did not expect an error here")
|
t.Fatal("did not expect an error here")
|
||||||
}
|
}
|
||||||
@ -117,8 +129,12 @@ func TestWithCancelledContext(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
cancel()
|
cancel()
|
||||||
err := measurer.Run(ctx, sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("did not expect an error here")
|
t.Fatal("did not expect an error here")
|
||||||
}
|
}
|
||||||
@ -138,8 +154,12 @@ func TestListenFails(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("google.com")
|
measurement.Input = model.MeasurementTarget("google.com")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected an error here")
|
t.Fatal("expected an error here")
|
||||||
}
|
}
|
||||||
@ -182,8 +202,12 @@ func TestWriteFails(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("google.com")
|
measurement.Input = model.MeasurementTarget("google.com")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("unexpected error")
|
t.Fatal("unexpected error")
|
||||||
}
|
}
|
||||||
@ -239,8 +263,12 @@ func TestReadFails(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("google.com")
|
measurement.Input = model.MeasurementTarget("google.com")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("unexpected error")
|
t.Fatal("unexpected error")
|
||||||
}
|
}
|
||||||
@ -271,8 +299,12 @@ func TestNoResponse(t *testing.T) {
|
|||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("ooni.org")
|
measurement.Input = model.MeasurementTarget("ooni.org")
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
err := measurer.Run(context.Background(), sess, measurement,
|
args := &model.ExperimentArgs{
|
||||||
model.NewPrinterCallbacks(log.Log))
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal("did not expect an error here")
|
t.Fatal("did not expect an error here")
|
||||||
}
|
}
|
||||||
|
@ -175,8 +175,11 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(ctx context.Context, sess model.ExperimentSession,
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks) error {
|
callbacks := args.Callbacks
|
||||||
|
measurement := args.Measurement
|
||||||
|
sess := args.Session
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(ctx, 90*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 90*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
testkeys := NewTestKeys()
|
testkeys := NewTestKeys()
|
||||||
|
@ -100,7 +100,7 @@ const (
|
|||||||
"cert": "XXXXXXXXXXXXXXXXXXXXXXXXX",
|
"cert": "XXXXXXXXXXXXXXXXXXXXXXXXX",
|
||||||
"iatMode": "0"
|
"iatMode": "0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type":"openvpn",
|
"type":"openvpn",
|
||||||
"protocols":[
|
"protocols":[
|
||||||
@ -328,7 +328,12 @@ func TestInvalidCaCert(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -599,7 +604,12 @@ func TestMissingTransport(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err = measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err = measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -790,14 +800,14 @@ func runDefaultMockTest(t *testing.T, multiGetter urlgetter.MultiGetter) *model.
|
|||||||
}
|
}
|
||||||
|
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
|
@ -21,5 +21,10 @@ func (m *dnsCheckMain) do(ctx context.Context, input StructuredInput,
|
|||||||
measurement.TestName = exp.ExperimentName()
|
measurement.TestName = exp.ExperimentName()
|
||||||
measurement.TestVersion = exp.ExperimentVersion()
|
measurement.TestVersion = exp.ExperimentVersion()
|
||||||
measurement.Input = model.MeasurementTarget(input.Input)
|
measurement.Input = model.MeasurementTarget(input.Input)
|
||||||
return exp.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
return exp.Run(ctx, args)
|
||||||
}
|
}
|
||||||
|
@ -46,10 +46,10 @@ type StructuredInput struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.ExperimentVersion.
|
// Run implements ExperimentMeasurer.ExperimentVersion.
|
||||||
func (Measurer) Run(
|
func (Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
var input StructuredInput
|
var input StructuredInput
|
||||||
if err := json.Unmarshal([]byte(measurement.Input), &input); err != nil {
|
if err := json.Unmarshal([]byte(measurement.Input), &input); err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -31,7 +31,12 @@ func TestRunDNSCheckWithCancelledContext(t *testing.T) {
|
|||||||
cancel() // fail immediately
|
cancel() // fail immediately
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
// TODO(bassosimone): here we could improve the tests by checking
|
// TODO(bassosimone): here we could improve the tests by checking
|
||||||
// whether the result makes sense for a cancelled context.
|
// whether the result makes sense for a cancelled context.
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -62,7 +67,12 @@ func TestRunURLGetterWithCancelledContext(t *testing.T) {
|
|||||||
cancel() // fail immediately
|
cancel() // fail immediately
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil { // here we expected nil b/c we want to submit the measurement
|
if err != nil { // here we expected nil b/c we want to submit the measurement
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -86,7 +96,12 @@ func TestRunWithInvalidJSON(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err == nil || err.Error() != "invalid character '}' looking for beginning of value" {
|
if err == nil || err.Error() != "invalid character '}' looking for beginning of value" {
|
||||||
t.Fatalf("not the error we expected: %+v", err)
|
t.Fatalf("not the error we expected: %+v", err)
|
||||||
}
|
}
|
||||||
@ -100,7 +115,12 @@ func TestRunWithUnknownExperiment(t *testing.T) {
|
|||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err == nil || err.Error() != "no such experiment: antani" {
|
if err == nil || err.Error() != "no such experiment: antani" {
|
||||||
t.Fatalf("not the error we expected: %+v", err)
|
t.Fatalf("not the error we expected: %+v", err)
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,10 @@ func (m *urlGetterMain) do(ctx context.Context, input StructuredInput,
|
|||||||
measurement.TestName = exp.ExperimentName()
|
measurement.TestName = exp.ExperimentName()
|
||||||
measurement.TestVersion = exp.ExperimentVersion()
|
measurement.TestVersion = exp.ExperimentVersion()
|
||||||
measurement.Input = model.MeasurementTarget(input.Input)
|
measurement.Input = model.MeasurementTarget(input.Input)
|
||||||
return exp.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
return exp.Run(ctx, args)
|
||||||
}
|
}
|
||||||
|
@ -141,8 +141,10 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run
|
// Run implements ExperimentMeasurer.Run
|
||||||
func (m Measurer) Run(ctx context.Context, sess model.ExperimentSession,
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks) error {
|
callbacks := args.Callbacks
|
||||||
|
measurement := args.Measurement
|
||||||
|
sess := args.Session
|
||||||
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
urlgetter.RegisterExtensions(measurement)
|
urlgetter.RegisterExtensions(measurement)
|
||||||
|
@ -25,14 +25,14 @@ func TestNewExperimentMeasurer(t *testing.T) {
|
|||||||
func TestGood(t *testing.T) {
|
func TestGood(t *testing.T) {
|
||||||
measurer := signal.NewExperimentMeasurer(signal.Config{})
|
measurer := signal.NewExperimentMeasurer(signal.Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -103,14 +103,14 @@ func TestBadSignalCA(t *testing.T) {
|
|||||||
SignalCA: "INVALIDCA",
|
SignalCA: "INVALIDCA",
|
||||||
})
|
})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err.Error() != "AppendCertsFromPEM failed" {
|
if err.Error() != "AppendCertsFromPEM failed" {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
|
@ -112,12 +112,11 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errNoInputProvided
|
return errNoInputProvided
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,12 @@ func TestMeasurer_run(t *testing.T) {
|
|||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
return meas, m, err
|
return meas, m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -233,12 +233,10 @@ func maybeURLToSNI(input model.MeasurementTarget) (model.MeasurementTarget, erro
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
callbacks := args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
m.mu.Lock()
|
m.mu.Lock()
|
||||||
if m.cache == nil {
|
if m.cache == nil {
|
||||||
m.cache = make(map[string]Subresult)
|
m.cache = make(map[string]Subresult)
|
||||||
|
@ -116,12 +116,12 @@ func TestMeasurerMeasureNoMeasurementInput(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{
|
measurer := NewExperimentMeasurer(Config{
|
||||||
ControlSNI: "example.com",
|
ControlSNI: "example.com",
|
||||||
})
|
})
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: &model.Measurement{},
|
||||||
new(model.Measurement),
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err.Error() != "Experiment requires measurement.Input" {
|
if err.Error() != "Experiment requires measurement.Input" {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -136,12 +136,12 @@ func TestMeasurerMeasureWithInvalidInput(t *testing.T) {
|
|||||||
measurement := &model.Measurement{
|
measurement := &model.Measurement{
|
||||||
Input: "\t",
|
Input: "\t",
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: measurement,
|
||||||
measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatal("expected an error here")
|
t.Fatal("expected an error here")
|
||||||
}
|
}
|
||||||
@ -156,12 +156,12 @@ func TestMeasurerMeasureWithCancelledContext(t *testing.T) {
|
|||||||
measurement := &model.Measurement{
|
measurement := &model.Measurement{
|
||||||
Input: "kernel.org",
|
Input: "kernel.org",
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
newsession(),
|
Measurement: measurement,
|
||||||
measurement,
|
Session: newsession(),
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -73,10 +73,10 @@ var errStunMissingPortInURL = errors.New("stun: missing port in URL")
|
|||||||
var errUnsupportedURLScheme = errors.New("stun: unsupported URL scheme")
|
var errUnsupportedURLScheme = errors.New("stun: unsupported URL scheme")
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
measurement.TestKeys = tk
|
measurement.TestKeys = tk
|
||||||
registerExtensions(measurement)
|
registerExtensions(measurement)
|
||||||
|
@ -32,12 +32,12 @@ func TestMeasurerExperimentNameVersion(t *testing.T) {
|
|||||||
func TestRunWithoutInput(t *testing.T) {
|
func TestRunWithoutInput(t *testing.T) {
|
||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, errStunMissingInput) {
|
if !errors.Is(err, errStunMissingInput) {
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
@ -47,12 +47,12 @@ func TestRunWithInvalidURL(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("\t") // <- invalid URL
|
measurement.Input = model.MeasurementTarget("\t") // <- invalid URL
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err == nil || !strings.HasSuffix(err.Error(), "invalid control character in URL") {
|
if err == nil || !strings.HasSuffix(err.Error(), "invalid control character in URL") {
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
@ -62,12 +62,12 @@ func TestRunWithNoPort(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("stun://stun.ekiga.net")
|
measurement.Input = model.MeasurementTarget("stun://stun.ekiga.net")
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, errStunMissingPortInURL) {
|
if !errors.Is(err, errStunMissingPortInURL) {
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
@ -77,12 +77,12 @@ func TestRunWithUnsupportedURLScheme(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget("https://stun.ekiga.net:3478")
|
measurement.Input = model.MeasurementTarget("https://stun.ekiga.net:3478")
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if !errors.Is(err, errUnsupportedURLScheme) {
|
if !errors.Is(err, errUnsupportedURLScheme) {
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
@ -92,14 +92,14 @@ func TestRunWithInput(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget(defaultInput)
|
measurement.Input = model.MeasurementTarget(defaultInput)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -124,14 +124,14 @@ func TestCancelledContext(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(Config{})
|
measurer := NewExperimentMeasurer(Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget(defaultInput)
|
measurement.Input = model.MeasurementTarget(defaultInput)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(ctx, args)
|
||||||
)
|
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit
|
if !errors.Is(err, nil) { // nil because we want to submit
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
@ -166,14 +166,14 @@ func TestNewClientFailure(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(*config)
|
measurer := NewExperimentMeasurer(*config)
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget(defaultInput)
|
measurement.Input = model.MeasurementTarget(defaultInput)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit
|
if !errors.Is(err, nil) { // nil because we want to submit
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -202,14 +202,14 @@ func TestStartFailure(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(*config)
|
measurer := NewExperimentMeasurer(*config)
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget(defaultInput)
|
measurement.Input = model.MeasurementTarget(defaultInput)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit
|
if !errors.Is(err, nil) { // nil because we want to submit
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -242,14 +242,14 @@ func TestReadFailure(t *testing.T) {
|
|||||||
measurer := NewExperimentMeasurer(*config)
|
measurer := NewExperimentMeasurer(*config)
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = model.MeasurementTarget(defaultInput)
|
measurement.Input = model.MeasurementTarget(defaultInput)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit
|
if !errors.Is(err, nil) { // nil because we want to submit
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
|
@ -82,12 +82,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errNoInputProvided
|
return errNoInputProvided
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,12 @@ func TestMeasurer_run(t *testing.T) {
|
|||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
return meas, m, err
|
return meas, m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -101,8 +101,11 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run
|
// Run implements ExperimentMeasurer.Run
|
||||||
func (m Measurer) Run(ctx context.Context, sess model.ExperimentSession,
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks) error {
|
callbacks := args.Callbacks
|
||||||
|
measurement := args.Measurement
|
||||||
|
sess := args.Session
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
urlgetter.RegisterExtensions(measurement)
|
urlgetter.RegisterExtensions(measurement)
|
||||||
|
@ -28,14 +28,14 @@ func TestNewExperimentMeasurer(t *testing.T) {
|
|||||||
func TestGood(t *testing.T) {
|
func TestGood(t *testing.T) {
|
||||||
measurer := telegram.NewExperimentMeasurer(telegram.Config{})
|
measurer := telegram.NewExperimentMeasurer(telegram.Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -297,7 +297,12 @@ func TestWeConfigureWebChecksToFailOnHTTPError(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
if err := measurer.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := measurer.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if called.Load() < 1 {
|
if called.Load() < 1 {
|
||||||
|
@ -52,12 +52,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// // Run implements ExperimentMeasurer.Run.
|
// // Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errNoInputProvided
|
return errNoInputProvided
|
||||||
}
|
}
|
||||||
|
@ -38,7 +38,12 @@ func TestMeasurer_input_failure(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
return meas, m, err
|
return meas, m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,12 +112,10 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
if measurement.Input == "" {
|
if measurement.Input == "" {
|
||||||
return errNoInputProvided
|
return errNoInputProvided
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,12 @@ func TestMeasurer_run(t *testing.T) {
|
|||||||
MockableLogger: model.DiscardLogger,
|
MockableLogger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
callbacks := model.NewPrinterCallbacks(model.DiscardLogger)
|
||||||
err := m.Run(ctx, sess, meas, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: meas,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
return meas, m, err
|
return meas, m, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -78,12 +78,11 @@ var allMethods = []method{{
|
|||||||
}}
|
}}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
callbacks := args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
// TODO(bassosimone): wondering whether this experiment should
|
// TODO(bassosimone): wondering whether this experiment should
|
||||||
// actually be merged with sniblocking instead?
|
// actually be merged with sniblocking instead?
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
|
@ -27,12 +27,12 @@ func TestRunWithExplicitSNI(t *testing.T) {
|
|||||||
})
|
})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = "8.8.8.8:853"
|
measurement.Input = "8.8.8.8:853"
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -43,12 +43,12 @@ func TestRunWithImplicitSNI(t *testing.T) {
|
|||||||
measurer := tlstool.NewExperimentMeasurer(tlstool.Config{})
|
measurer := tlstool.NewExperimentMeasurer(tlstool.Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = "dns.google:853"
|
measurement.Input = "dns.google:853"
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -60,12 +60,12 @@ func TestRunWithCancelledContext(t *testing.T) {
|
|||||||
measurer := tlstool.NewExperimentMeasurer(tlstool.Config{})
|
measurer := tlstool.NewExperimentMeasurer(tlstool.Config{})
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = "dns.google:853"
|
measurement.Input = "dns.google:853"
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx,
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{},
|
Measurement: measurement,
|
||||||
measurement,
|
Session: &mockable.Session{},
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -166,12 +166,10 @@ func (m *Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
callbacks := args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
targets, err := m.gimmeTargets(ctx, sess)
|
targets, err := m.gimmeTargets(ctx, sess)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err // fail the measurement if we cannot get any target
|
return err // fail the measurement if we cannot get any target
|
||||||
|
@ -36,14 +36,14 @@ func TestMeasurerMeasureFetchTorTargetsError(t *testing.T) {
|
|||||||
measurer.fetchTorTargets = func(ctx context.Context, sess model.ExperimentSession, cc string) (map[string]model.OOAPITorTarget, error) {
|
measurer.fetchTorTargets = func(ctx context.Context, sess model.ExperimentSession, cc string) (map[string]model.OOAPITorTarget, error) {
|
||||||
return nil, expected
|
return nil, expected
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: &model.Measurement{},
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
new(model.Measurement),
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if !errors.Is(err, expected) {
|
if !errors.Is(err, expected) {
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -55,14 +55,14 @@ func TestMeasurerMeasureFetchTorTargetsEmptyList(t *testing.T) {
|
|||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: measurement,
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
measurement,
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -79,14 +79,14 @@ func TestMeasurerMeasureGoodWithMockedOrchestra(t *testing.T) {
|
|||||||
measurer.fetchTorTargets = func(ctx context.Context, sess model.ExperimentSession, cc string) (map[string]model.OOAPITorTarget, error) {
|
measurer.fetchTorTargets = func(ctx context.Context, sess model.ExperimentSession, cc string) (map[string]model.OOAPITorTarget, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
&mockable.Session{
|
Measurement: &model.Measurement{},
|
||||||
|
Session: &mockable.Session{
|
||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
},
|
},
|
||||||
new(model.Measurement),
|
}
|
||||||
model.NewPrinterCallbacks(log.Log),
|
err := measurer.Run(context.Background(), args)
|
||||||
)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -99,12 +99,12 @@ func TestMeasurerMeasureGood(t *testing.T) {
|
|||||||
measurer := NewMeasurer(Config{})
|
measurer := NewMeasurer(Config{})
|
||||||
sess := newsession()
|
sess := newsession()
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
sess,
|
Measurement: measurement,
|
||||||
measurement,
|
Session: sess,
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -142,12 +142,12 @@ func TestMeasurerMeasureSanitiseOutput(t *testing.T) {
|
|||||||
key: staticPrivateTestingTarget,
|
key: staticPrivateTestingTarget,
|
||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
err := measurer.Run(
|
args := &model.ExperimentArgs{
|
||||||
context.Background(),
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
sess,
|
Measurement: measurement,
|
||||||
measurement,
|
Session: sess,
|
||||||
model.NewPrinterCallbacks(log.Log),
|
}
|
||||||
)
|
err := measurer.Run(context.Background(), args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,12 @@ func TestRunWithExistingTor(t *testing.T) {
|
|||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
MockableTempDir: tempdir,
|
MockableTempDir: tempdir,
|
||||||
}
|
}
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -124,10 +124,10 @@ const maxRuntime = 600 * time.Second
|
|||||||
// set the relevant OONI error inside of the measurement and
|
// set the relevant OONI error inside of the measurement and
|
||||||
// return nil. This is important because the caller may not submit
|
// return nil. This is important because the caller may not submit
|
||||||
// the measurement if this method returns an error.
|
// the measurement if this method returns an error.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
ptl, sfdialer, err := m.setup(ctx, sess.Logger())
|
ptl, sfdialer, err := m.setup(ctx, sess.Logger())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// we cannot setup the experiment
|
// we cannot setup the experiment
|
||||||
|
@ -47,7 +47,12 @@ func TestFailureWithInvalidRendezvousMethod(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
err := m.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if !errors.Is(err, ptx.ErrSnowflakeNoSuchRendezvousMethod) {
|
if !errors.Is(err, ptx.ErrSnowflakeNoSuchRendezvousMethod) {
|
||||||
t.Fatal("unexpected error", err)
|
t.Fatal("unexpected error", err)
|
||||||
}
|
}
|
||||||
@ -70,7 +75,12 @@ func TestFailureToStartPTXListener(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); !errors.Is(err, expected) {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); !errors.Is(err, expected) {
|
||||||
t.Fatal("not the error we expected", err)
|
t.Fatal("not the error we expected", err)
|
||||||
}
|
}
|
||||||
if tk := measurement.TestKeys; tk != nil {
|
if tk := measurement.TestKeys; tk != nil {
|
||||||
@ -108,7 +118,12 @@ func TestSuccessWithMockedTunnelStart(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if called.Load() != 1 {
|
if called.Load() != 1 {
|
||||||
@ -168,7 +183,12 @@ func TestWithCancelledContext(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
tk := measurement.TestKeys.(*TestKeys)
|
tk := measurement.TestKeys.(*TestKeys)
|
||||||
@ -231,7 +251,12 @@ func TestFailureToStartTunnel(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
tk := measurement.TestKeys.(*TestKeys)
|
tk := measurement.TestKeys.(*TestKeys)
|
||||||
|
@ -97,10 +97,10 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements model.ExperimentSession.Run
|
// Run implements model.ExperimentSession.Run
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
_ = args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
// When using the urlgetter experiment directly, there is a nonconfigurable
|
// When using the urlgetter experiment directly, there is a nonconfigurable
|
||||||
// default timeout that applies. When urlgetter is used as a library, it's
|
// default timeout that applies. When urlgetter is used as a library, it's
|
||||||
// instead the responsibility of the user of urlgetter to set timeouts. Note
|
// instead the responsibility of the user of urlgetter to set timeouts. Note
|
||||||
|
@ -23,10 +23,12 @@ func TestMeasurer(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = "https://www.google.com"
|
measurement.Input = "https://www.google.com"
|
||||||
err := m.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx, &mockable.Session{},
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
measurement, model.NewPrinterCallbacks(log.Log),
|
Measurement: measurement,
|
||||||
)
|
Session: &mockable.Session{},
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
@ -60,10 +62,12 @@ func TestMeasurerDNSCache(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
measurement.Input = "https://www.google.com"
|
measurement.Input = "https://www.google.com"
|
||||||
err := m.Run(
|
args := &model.ExperimentArgs{
|
||||||
ctx, &mockable.Session{},
|
Callbacks: model.NewPrinterCallbacks(log.Log),
|
||||||
measurement, model.NewPrinterCallbacks(log.Log),
|
Measurement: measurement,
|
||||||
)
|
Session: &mockable.Session{},
|
||||||
|
}
|
||||||
|
err := m.Run(ctx, args)
|
||||||
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
if !errors.Is(err, nil) { // nil because we want to submit the measurement
|
||||||
t.Fatal("not the error we expected")
|
t.Fatal("not the error we expected")
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,12 @@ func TestRunWithExistingTor(t *testing.T) {
|
|||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
MockableTempDir: tempdir,
|
MockableTempDir: tempdir,
|
||||||
}
|
}
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -106,10 +106,10 @@ const maxRuntime = 200 * time.Second
|
|||||||
// set the relevant OONI error inside of the measurement and
|
// set the relevant OONI error inside of the measurement and
|
||||||
// return nil. This is important because the caller may not submit
|
// return nil. This is important because the caller may not submit
|
||||||
// the measurement if this method returns an error.
|
// the measurement if this method returns an error.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
m.registerExtensions(measurement)
|
m.registerExtensions(measurement)
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
ctx, cancel := context.WithTimeout(ctx, maxRuntime)
|
ctx, cancel := context.WithTimeout(ctx, maxRuntime)
|
||||||
|
@ -59,7 +59,12 @@ func TestSuccessWithMockedTunnelStart(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if called.Load() != 1 {
|
if called.Load() != 1 {
|
||||||
@ -113,7 +118,12 @@ func TestWithCancelledContext(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
tk := measurement.TestKeys.(*TestKeys)
|
tk := measurement.TestKeys.(*TestKeys)
|
||||||
@ -170,7 +180,12 @@ func TestFailureToStartTunnel(t *testing.T) {
|
|||||||
callbacks := &model.PrinterCallbacks{
|
callbacks := &model.PrinterCallbacks{
|
||||||
Logger: model.DiscardLogger,
|
Logger: model.DiscardLogger,
|
||||||
}
|
}
|
||||||
if err := m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := m.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
tk := measurement.TestKeys.(*TestKeys)
|
tk := measurement.TestKeys.(*TestKeys)
|
||||||
|
@ -121,12 +121,11 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context,
|
_ = args.Callbacks
|
||||||
sess model.ExperimentSession,
|
measurement := args.Measurement
|
||||||
measurement *model.Measurement,
|
sess := args.Session
|
||||||
callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
tk := new(TestKeys)
|
tk := new(TestKeys)
|
||||||
|
@ -37,7 +37,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
sess := newsession(t, true)
|
sess := newsession(t, true)
|
||||||
measurement := &model.Measurement{Input: "http://www.example.com"}
|
measurement := &model.Measurement{Input: "http://www.example.com"}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -65,7 +70,12 @@ func TestMeasureWithCancelledContext(t *testing.T) {
|
|||||||
sess := newsession(t, true)
|
sess := newsession(t, true)
|
||||||
measurement := &model.Measurement{Input: "http://www.example.com"}
|
measurement := &model.Measurement{Input: "http://www.example.com"}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
if err := measurer.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := measurer.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
tk := measurement.TestKeys.(*webconnectivity.TestKeys)
|
tk := measurement.TestKeys.(*webconnectivity.TestKeys)
|
||||||
@ -99,7 +109,12 @@ func TestMeasureWithNoInput(t *testing.T) {
|
|||||||
sess := newsession(t, true)
|
sess := newsession(t, true)
|
||||||
measurement := &model.Measurement{Input: ""}
|
measurement := &model.Measurement{Input: ""}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, webconnectivity.ErrNoInput) {
|
if !errors.Is(err, webconnectivity.ErrNoInput) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -127,7 +142,12 @@ func TestMeasureWithInputNotBeingAnURL(t *testing.T) {
|
|||||||
sess := newsession(t, true)
|
sess := newsession(t, true)
|
||||||
measurement := &model.Measurement{Input: "\t\t\t\t\t\t"}
|
measurement := &model.Measurement{Input: "\t\t\t\t\t\t"}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, webconnectivity.ErrInputIsNotAnURL) {
|
if !errors.Is(err, webconnectivity.ErrInputIsNotAnURL) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -155,7 +175,12 @@ func TestMeasureWithUnsupportedInput(t *testing.T) {
|
|||||||
sess := newsession(t, true)
|
sess := newsession(t, true)
|
||||||
measurement := &model.Measurement{Input: "dnslookup://example.com"}
|
measurement := &model.Measurement{Input: "dnslookup://example.com"}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, webconnectivity.ErrUnsupportedInput) {
|
if !errors.Is(err, webconnectivity.ErrUnsupportedInput) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -183,7 +208,12 @@ func TestMeasureWithNoAvailableTestHelpers(t *testing.T) {
|
|||||||
sess := newsession(t, false)
|
sess := newsession(t, false)
|
||||||
measurement := &model.Measurement{Input: "https://www.example.com"}
|
measurement := &model.Measurement{Input: "https://www.example.com"}
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if !errors.Is(err, webconnectivity.ErrNoAvailableTestHelpers) {
|
if !errors.Is(err, webconnectivity.ErrNoAvailableTestHelpers) {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
@ -154,10 +154,11 @@ func (m Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run
|
// Run implements ExperimentMeasurer.Run
|
||||||
func (m Measurer) Run(
|
func (m Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
ctx, cancel := context.WithTimeout(ctx, 60*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
urlgetter.RegisterExtensions(measurement)
|
urlgetter.RegisterExtensions(measurement)
|
||||||
|
@ -35,7 +35,12 @@ func TestSuccess(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -70,7 +75,12 @@ func TestFailureAllEndpoints(t *testing.T) {
|
|||||||
sess := &mockable.Session{MockableLogger: log.Log}
|
sess := &mockable.Session{MockableLogger: log.Log}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
err := measurer.Run(ctx, sess, measurement, callbacks)
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
err := measurer.Run(ctx, args)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
@ -598,7 +608,12 @@ func TestWeConfigureWebChecksCorrectly(t *testing.T) {
|
|||||||
}
|
}
|
||||||
measurement := new(model.Measurement)
|
measurement := new(model.Measurement)
|
||||||
callbacks := model.NewPrinterCallbacks(log.Log)
|
callbacks := model.NewPrinterCallbacks(log.Log)
|
||||||
if err := measurer.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err := measurer.Run(ctx, args); err != nil {
|
||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
if called.Load() != 263 {
|
if called.Load() != 263 {
|
||||||
|
@ -475,10 +475,7 @@ func (am *antaniMeasurer) ExperimentVersion() string {
|
|||||||
return "0.1.1"
|
return "0.1.1"
|
||||||
}
|
}
|
||||||
|
|
||||||
func (am *antaniMeasurer) Run(
|
func (am *antaniMeasurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
|
||||||
) error {
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,11 +40,13 @@ func (m *Measurer) ExperimentVersion() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements model.ExperimentMeasurer.
|
// Run implements model.ExperimentMeasurer.
|
||||||
func (m *Measurer) Run(ctx context.Context, sess model.ExperimentSession,
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks) error {
|
|
||||||
// Reminder: when this function returns an error, the measurement result
|
// Reminder: when this function returns an error, the measurement result
|
||||||
// WILL NOT be submitted to the OONI backend. You SHOULD only return an error
|
// WILL NOT be submitted to the OONI backend. You SHOULD only return an error
|
||||||
// for fundamental errors (e.g., the input is invalid or missing).
|
// for fundamental errors (e.g., the input is invalid or missing).
|
||||||
|
_ = args.Callbacks
|
||||||
|
measurement := args.Measurement
|
||||||
|
sess := args.Session
|
||||||
|
|
||||||
// make sure we have a cancellable context such that we can stop any
|
// make sure we have a cancellable context such that we can stop any
|
||||||
// goroutine running in the background (e.g., priority.go's ones)
|
// goroutine running in the background (e.g., priority.go's ones)
|
||||||
|
@ -117,6 +117,19 @@ func (d PrinterCallbacks) OnProgress(percentage float64, message string) {
|
|||||||
d.Logger.Infof("[%5.1f%%] %s", percentage*100, message)
|
d.Logger.Infof("[%5.1f%%] %s", percentage*100, message)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ExperimentArgs contains the arguments passed to an experiment.
|
||||||
|
type ExperimentArgs struct {
|
||||||
|
// Callbacks contains MANDATORY experiment callbacks.
|
||||||
|
Callbacks ExperimentCallbacks
|
||||||
|
|
||||||
|
// Measurement is the MANDATORY measurement in which the experiment
|
||||||
|
// must write the results of the measurement.
|
||||||
|
Measurement *Measurement
|
||||||
|
|
||||||
|
// Session is the MANDATORY session the experiment can use.
|
||||||
|
Session ExperimentSession
|
||||||
|
}
|
||||||
|
|
||||||
// ExperimentMeasurer is the interface that allows to run a
|
// ExperimentMeasurer is the interface that allows to run a
|
||||||
// measurement for a specific experiment.
|
// measurement for a specific experiment.
|
||||||
type ExperimentMeasurer interface {
|
type ExperimentMeasurer interface {
|
||||||
@ -133,10 +146,7 @@ type ExperimentMeasurer interface {
|
|||||||
// set the relevant OONI error inside of the measurement and
|
// set the relevant OONI error inside of the measurement and
|
||||||
// return nil. This is important because the caller WILL NOT submit
|
// return nil. This is important because the caller WILL NOT submit
|
||||||
// the measurement if this method returns an error.
|
// the measurement if this method returns an error.
|
||||||
Run(
|
Run(ctx context.Context, args *ExperimentArgs) error
|
||||||
ctx context.Context, sess ExperimentSession,
|
|
||||||
measurement *Measurement, callbacks ExperimentCallbacks,
|
|
||||||
) error
|
|
||||||
|
|
||||||
// GetSummaryKeys returns summary keys expected by ooni/probe-cli.
|
// GetSummaryKeys returns summary keys expected by ooni/probe-cli.
|
||||||
GetSummaryKeys(*Measurement) (interface{}, error)
|
GetSummaryKeys(*Measurement) (interface{}, error)
|
||||||
|
@ -211,7 +211,12 @@ need any fancy context and we pass a `context.Background` to `Run`.
|
|||||||
|
|
||||||
```Go
|
```Go
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
log.WithError(err).Fatal("torsf experiment failed")
|
log.WithError(err).Fatal("torsf experiment failed")
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
@ -212,7 +212,12 @@ func main() {
|
|||||||
//
|
//
|
||||||
// ```Go
|
// ```Go
|
||||||
ctx := context.Background()
|
ctx := context.Background()
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
log.WithError(err).Fatal("torsf experiment failed")
|
log.WithError(err).Fatal("torsf experiment failed")
|
||||||
}
|
}
|
||||||
// ```
|
// ```
|
||||||
|
@ -117,10 +117,10 @@ chapters, finally, we will modify this function until it is a
|
|||||||
minimal implementation of the `torsf` experiment.
|
minimal implementation of the `torsf` experiment.
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
_ = args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
_ = args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
```
|
```
|
||||||
As you can see, this is just a stub implementation that sleeps
|
As you can see, this is just a stub implementation that sleeps
|
||||||
for one second and prints a logging message.
|
for one second and prints a logging message.
|
||||||
|
@ -54,7 +54,12 @@ func main() {
|
|||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
MockableTempDir: tempdir,
|
MockableTempDir: tempdir,
|
||||||
}
|
}
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
log.WithError(err).Fatal("torsf experiment failed")
|
log.WithError(err).Fatal("torsf experiment failed")
|
||||||
}
|
}
|
||||||
data, err := json.Marshal(measurement)
|
data, err := json.Marshal(measurement)
|
||||||
|
@ -93,10 +93,10 @@ func (m *Measurer) ExperimentVersion() string {
|
|||||||
// minimal implementation of the `torsf` experiment.
|
// minimal implementation of the `torsf` experiment.
|
||||||
//
|
//
|
||||||
// ```Go
|
// ```Go
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
_ = args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
_ = args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
// ```
|
// ```
|
||||||
// As you can see, this is just a stub implementation that sleeps
|
// As you can see, this is just a stub implementation that sleeps
|
||||||
// for one second and prints a logging message.
|
// for one second and prints a logging message.
|
||||||
|
@ -32,10 +32,10 @@ print periodic updates via the `callbacks`. We will defer the
|
|||||||
real work to a private function called `run`.
|
real work to a private function called `run`.
|
||||||
|
|
||||||
```Go
|
```Go
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
```
|
```
|
||||||
|
|
||||||
Let's create an instance of `TestKeys` and let's modify
|
Let's create an instance of `TestKeys` and let's modify
|
||||||
|
@ -28,7 +28,12 @@ func main() {
|
|||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
MockableTempDir: tempdir,
|
MockableTempDir: tempdir,
|
||||||
}
|
}
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
log.WithError(err).Fatal("torsf experiment failed")
|
log.WithError(err).Fatal("torsf experiment failed")
|
||||||
}
|
}
|
||||||
data, err := json.Marshal(measurement)
|
data, err := json.Marshal(measurement)
|
||||||
|
@ -65,10 +65,10 @@ type TestKeys struct {
|
|||||||
// real work to a private function called `run`.
|
// real work to a private function called `run`.
|
||||||
//
|
//
|
||||||
// ```Go
|
// ```Go
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
// ```
|
// ```
|
||||||
//
|
//
|
||||||
// Let's create an instance of `TestKeys` and let's modify
|
// Let's create an instance of `TestKeys` and let's modify
|
||||||
|
@ -28,7 +28,12 @@ func main() {
|
|||||||
MockableLogger: log.Log,
|
MockableLogger: log.Log,
|
||||||
MockableTempDir: tempdir,
|
MockableTempDir: tempdir,
|
||||||
}
|
}
|
||||||
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
|
args := &model.ExperimentArgs{
|
||||||
|
Callbacks: callbacks,
|
||||||
|
Measurement: measurement,
|
||||||
|
Session: sess,
|
||||||
|
}
|
||||||
|
if err = m.Run(ctx, args); err != nil {
|
||||||
log.WithError(err).Fatal("torsf experiment failed")
|
log.WithError(err).Fatal("torsf experiment failed")
|
||||||
}
|
}
|
||||||
data, err := json.Marshal(measurement)
|
data, err := json.Marshal(measurement)
|
||||||
|
@ -99,10 +99,10 @@ type TestKeys struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Run implements ExperimentMeasurer.Run.
|
// Run implements ExperimentMeasurer.Run.
|
||||||
func (m *Measurer) Run(
|
func (m *Measurer) Run(ctx context.Context, args *model.ExperimentArgs) error {
|
||||||
ctx context.Context, sess model.ExperimentSession,
|
callbacks := args.Callbacks
|
||||||
measurement *model.Measurement, callbacks model.ExperimentCallbacks,
|
measurement := args.Measurement
|
||||||
) error {
|
sess := args.Session
|
||||||
testkeys := &TestKeys{}
|
testkeys := &TestKeys{}
|
||||||
measurement.TestKeys = testkeys
|
measurement.TestKeys = testkeys
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user