Skip to content

Commit

Permalink
engine: implement loading measurement from []byte (#100)
Browse files Browse the repository at this point in the history
Required to implement resubmission.
  • Loading branch information
bassosimone committed Oct 28, 2019
1 parent c87abaa commit 5dd8f2c
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 0 deletions.
14 changes: 14 additions & 0 deletions experiment.go
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,19 @@ func (e *Experiment) Measure(input string) (*Measurement, error) {
return &Measurement{m: measurement}, err
}

// LoadMeasurement loads a measurement from a byte stream. The measurement
// must be a measurement for this experiment.
func (e *Experiment) LoadMeasurement(data []byte) (*Measurement, error) {
var measurement model.Measurement
if err := json.Unmarshal(data, &measurement); err != nil {
return nil, err
}
if measurement.TestName != e.Name() {
return nil, errors.New("not a measurement for this experiment")
}
return &Measurement{m: measurement}, nil
}

// SubmitAndUpdateMeasurement submits a measurement and updates the
// fields whose value has changed as part of the submission.
func (e *Experiment) SubmitAndUpdateMeasurement(measurement *Measurement) error {
Expand Down Expand Up @@ -284,6 +297,7 @@ var experimentsByName = map[string]func(*Session) *ExperimentBuilder{
return example.NewExperiment(session.session, *config.(*example.Config))
},
config: &example.Config{
Message: "Good day from the example experiment!",
SleepTime: int64(2 * time.Second),
},
needsInput: false,
Expand Down
54 changes: 54 additions & 0 deletions experiment_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package engine

import (
"errors"
"fmt"
"io/ioutil"
"testing"

"github.com/ooni/probe-engine/experiment/example"
Expand Down Expand Up @@ -344,3 +346,55 @@ func TestSetOption(t *testing.T) {
}
})
}

func TestLoadMeasurement(t *testing.T) {
sess := newSessionForTesting(t)
builder, err := sess.NewExperimentBuilder("example")
if err != nil {
t.Fatal(err)
}
experiment := builder.Build()
testflow := func(t *testing.T, name string) (*Measurement, error) {
path := fmt.Sprintf(
"testdata/loadable-measurement-%s.jsonl", name,
)
data, err := ioutil.ReadFile(path)
if err != nil {
t.Fatal(err)
}
return experiment.LoadMeasurement(data)
}
t.Run("with correct name", func(t *testing.T) {
measurement, err := testflow(t, "example")
if err != nil {
t.Fatal(err)
}
if measurement == nil {
t.Fatal("expected non nil measurement here")
}
})
t.Run("with invalid name", func(t *testing.T) {
measurement, err := testflow(t, "wrongname")
if err == nil {
t.Fatal("expected error here")
}
if measurement != nil {
t.Fatal("expected nil measurement here")
}
if err.Error() != "not a measurement for this experiment" {
t.Fatal("unexpected error value")
}
})
t.Run("with invalid JSON", func(t *testing.T) {
measurement, err := testflow(t, "notjson")
if err == nil {
t.Fatal("expected error here")
}
if measurement != nil {
t.Fatal("expected nil measurement here")
}
if err.Error() == "not a measurement for this experiment" {
t.Fatal("unexpected error value")
}
})
}
1 change: 1 addition & 0 deletions testdata/loadable-measurement-example.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"data_format_version":"0.2.1","measurement_start_time":"2019-10-28 12:51:07","test_runtime":2.00335395,"probe_asn":"AS30722","probe_cc":"IT","probe_ip":"127.0.0.1","report_id":"20191028T125107Z_AS30722_Hq2A17CsJ3HbCcA7DsVgjLRDbm52YD72RV8jnsV4PAwW4Yay8G","resolver_ip":"172.217.33.129","software_name":"miniooni","software_version":"0.1.0-dev","test_keys":{"success":true},"test_name":"example","test_start_time":"2019-10-28 12:51:06","test_version":"0.0.1"}
1 change: 1 addition & 0 deletions testdata/loadable-measurement-notjson.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"data_format_version":"0.2.1","measurement_start_time":"2019-10-28 12:51:07","test_runtime":2.00335395,"probe_asn":"AS30722","probe_cc":"IT","probe_ip":"127.0.0.1","report_id":"20191028T125107Z_AS30722_Hq2A17CsJ3HbCcA7DsVgjLRDbm52YD72RV8jnsV4PAwW4Yay8G","resolver_ip":"172.217.33.129","software_name":"miniooni","software_version":"0.1.0-dev","test_keys":{"success":true},"test_name":"example","test_start_time":"2019-10-28 12:51:06","test_version":"0.0.1"
1 change: 1 addition & 0 deletions testdata/loadable-measurement-wrongname.jsonl
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"data_format_version":"0.2.1","measurement_start_time":"2019-10-28 12:51:07","test_runtime":2.00335395,"probe_asn":"AS30722","probe_cc":"IT","probe_ip":"127.0.0.1","report_id":"20191028T125107Z_AS30722_Hq2A17CsJ3HbCcA7DsVgjLRDbm52YD72RV8jnsV4PAwW4Yay8G","resolver_ip":"172.217.33.129","software_name":"miniooni","software_version":"0.1.0-dev","test_keys":{"success":true},"test_name":"wrongname","test_start_time":"2019-10-28 12:51:06","test_version":"0.0.1"}

0 comments on commit 5dd8f2c

Please sign in to comment.