diff --git a/nettests/performance/dash.go b/nettests/dash.go similarity index 92% rename from nettests/performance/dash.go rename to nettests/dash.go index d6096d6..9c6a81e 100644 --- a/nettests/performance/dash.go +++ b/nettests/dash.go @@ -1,9 +1,7 @@ -package performance +package nettests import ( "github.com/pkg/errors" - - "github.com/ooni/probe-cli/nettests" ) // Dash test implementation @@ -11,7 +9,7 @@ type Dash struct { } // Run starts the test -func (d Dash) Run(ctl *nettests.Controller) error { +func (d Dash) Run(ctl *Controller) error { builder, err := ctl.Ctx.Session.NewExperimentBuilder("dash") if err != nil { return err diff --git a/nettests/groups.go b/nettests/groups.go new file mode 100644 index 0000000..6ddc6ad --- /dev/null +++ b/nettests/groups.go @@ -0,0 +1,39 @@ +package nettests + +// NettestGroup base structure +type NettestGroup struct { + Label string + Nettests []Nettest +} + +// NettestGroups that can be run by the user +var NettestGroups = map[string]NettestGroup{ + "websites": NettestGroup{ + Label: "Websites", + Nettests: []Nettest{ + WebConnectivity{}, + }, + }, + "performance": NettestGroup{ + Label: "Performance", + Nettests: []Nettest{ + Dash{}, + NDT{}, + }, + }, + "middlebox": NettestGroup{ + Label: "Middleboxes", + Nettests: []Nettest{ + HTTPInvalidRequestLine{}, + HTTPHeaderFieldManipulation{}, + }, + }, + "im": NettestGroup{ + Label: "Instant Messaging", + Nettests: []Nettest{ + FacebookMessenger{}, + Telegram{}, + WhatsApp{}, + }, + }, +} diff --git a/nettests/groups/groups.go b/nettests/groups/groups.go deleted file mode 100644 index e209c55..0000000 --- a/nettests/groups/groups.go +++ /dev/null @@ -1,47 +0,0 @@ -package groups - -import ( - "github.com/ooni/probe-cli/nettests" - "github.com/ooni/probe-cli/nettests/im" - "github.com/ooni/probe-cli/nettests/middlebox" - "github.com/ooni/probe-cli/nettests/performance" - "github.com/ooni/probe-cli/nettests/websites" -) - -// NettestGroup base structure -type NettestGroup struct { - Label string - Nettests []nettests.Nettest -} - -// NettestGroups that can be run by the user -var NettestGroups = map[string]NettestGroup{ - "websites": NettestGroup{ - Label: "Websites", - Nettests: []nettests.Nettest{ - websites.WebConnectivity{}, - }, - }, - "performance": NettestGroup{ - Label: "Performance", - Nettests: []nettests.Nettest{ - performance.Dash{}, - performance.NDT{}, - }, - }, - "middlebox": NettestGroup{ - Label: "Middleboxes", - Nettests: []nettests.Nettest{ - middlebox.HTTPInvalidRequestLine{}, - middlebox.HTTPHeaderFieldManipulation{}, - }, - }, - "im": NettestGroup{ - Label: "Instant Messaging", - Nettests: []nettests.Nettest{ - im.FacebookMessenger{}, - im.Telegram{}, - im.WhatsApp{}, - }, - }, -} diff --git a/nettests/middlebox/http_header_field_manipulation.go b/nettests/http_header_field_manipulation.go similarity index 90% rename from nettests/middlebox/http_header_field_manipulation.go rename to nettests/http_header_field_manipulation.go index fe4d59e..f9d20bc 100644 --- a/nettests/middlebox/http_header_field_manipulation.go +++ b/nettests/http_header_field_manipulation.go @@ -1,9 +1,7 @@ -package middlebox +package nettests import ( "errors" - - "github.com/ooni/probe-cli/nettests" ) // HTTPHeaderFieldManipulation test implementation @@ -11,7 +9,7 @@ type HTTPHeaderFieldManipulation struct { } // Run starts the test -func (h HTTPHeaderFieldManipulation) Run(ctl *nettests.Controller) error { +func (h HTTPHeaderFieldManipulation) Run(ctl *Controller) error { builder, err := ctl.Ctx.Session.NewExperimentBuilder( "http_header_field_manipulation", ) diff --git a/nettests/middlebox/http_invalid_request_line.go b/nettests/http_invalid_request_line.go similarity index 88% rename from nettests/middlebox/http_invalid_request_line.go rename to nettests/http_invalid_request_line.go index 89ff081..4dcff14 100644 --- a/nettests/middlebox/http_invalid_request_line.go +++ b/nettests/http_invalid_request_line.go @@ -1,9 +1,7 @@ -package middlebox +package nettests import ( "errors" - - "github.com/ooni/probe-cli/nettests" ) // HTTPInvalidRequestLine test implementation @@ -11,7 +9,7 @@ type HTTPInvalidRequestLine struct { } // Run starts the test -func (h HTTPInvalidRequestLine) Run(ctl *nettests.Controller) error { +func (h HTTPInvalidRequestLine) Run(ctl *Controller) error { builder, err := ctl.Ctx.Session.NewExperimentBuilder( "http_invalid_request_line", ) diff --git a/nettests/performance/ndt.go b/nettests/ndt.go similarity index 95% rename from nettests/performance/ndt.go rename to nettests/ndt.go index cc6cb4d..9ca4c61 100644 --- a/nettests/performance/ndt.go +++ b/nettests/ndt.go @@ -1,7 +1,6 @@ -package performance +package nettests import ( - "github.com/ooni/probe-cli/nettests" "github.com/pkg/errors" ) @@ -10,7 +9,7 @@ type NDT struct { } // Run starts the test -func (n NDT) Run(ctl *nettests.Controller) error { +func (n NDT) Run(ctl *Controller) error { builder, err := ctl.Ctx.Session.NewExperimentBuilder("ndt") if err != nil { return err diff --git a/nettests/nettests_test.go b/nettests/nettests_test.go new file mode 100644 index 0000000..df10cb6 --- /dev/null +++ b/nettests/nettests_test.go @@ -0,0 +1,52 @@ +package nettests + +import ( + "io/ioutil" + "path" + "testing" + + ooni "github.com/ooni/probe-cli" + "github.com/ooni/probe-cli/internal/database" + "github.com/ooni/probe-cli/utils/shutil" +) + +func newTestingContext(t *testing.T) *ooni.Context { + homePath, err := ioutil.TempDir("", "ooniprobetests") + if err != nil { + t.Fatal(err) + } + configPath := path.Join(homePath, "config.json") + testingConfig := path.Join("..", "testdata", "testing-config.json") + shutil.Copy(testingConfig, configPath, false) + ctx := ooni.NewContext(configPath, homePath) + err = ctx.Init() + if err != nil { + t.Fatal(err) + } + return ctx +} + +func TestCreateContext(t *testing.T) { + newTestingContext(t) +} + +func TestRun(t *testing.T) { + ctx := newTestingContext(t) + network, err := database.CreateNetwork(ctx.DB, ctx.Session) + if err != nil { + t.Fatal(err) + } + res, err := database.CreateResult(ctx.DB, ctx.Home, tg, network.ID) + if err != nil { + t.Fatal(err) + } + builder, err := ctl.Ctx.Session.NewExperimentBuilder( + "telegram", + ) + if err != nil { + t.Fatal(err) + } + ctl := NewController(nt, ctx, res) + ctl.Run(builder, []string{""}) + nt.Run(ctl) +} diff --git a/nettests/websites/web_connectivity.go b/nettests/web_connectivity.go similarity index 91% rename from nettests/websites/web_connectivity.go rename to nettests/web_connectivity.go index 63a457a..2cf53d4 100644 --- a/nettests/websites/web_connectivity.go +++ b/nettests/web_connectivity.go @@ -1,12 +1,11 @@ -package websites +package nettests import ( "github.com/apex/log" "github.com/ooni/probe-cli/internal/database" - "github.com/ooni/probe-cli/nettests" ) -func lookupURLs(ctl *nettests.Controller, limit int64) ([]string, map[int64]int64, error) { +func lookupURLs(ctl *Controller, limit int64) ([]string, map[int64]int64, error) { var urls []string urlIDMap := make(map[int64]int64) config := ctl.Ctx.Session.NewTestListsConfig() @@ -37,7 +36,7 @@ type WebConnectivity struct { } // Run starts the test -func (n WebConnectivity) Run(ctl *nettests.Controller) error { +func (n WebConnectivity) Run(ctl *Controller) error { urls, urlIDMap, err := lookupURLs(ctl, ctl.Ctx.Config.Nettests.WebsitesURLLimit) if err != nil { return err