5973c88a05
* ongoing work * reduce diff with master * feat(inputloader): use the check-in API Part of https://github.com/ooni/probe/issues/1299 * fix: better naming for a variable * chore: add more tests * fix: add one more TODO
75 lines
2.2 KiB
Go
75 lines
2.2 KiB
Go
package nettests
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/apex/log"
|
|
"github.com/ooni/probe-cli/v3/cmd/ooniprobe/internal/database"
|
|
engine "github.com/ooni/probe-cli/v3/internal/engine"
|
|
"github.com/ooni/probe-cli/v3/internal/engine/model"
|
|
)
|
|
|
|
// TODO(bassosimone): we should remove the limit argument and
|
|
// we should also remove it from the config.
|
|
|
|
// TODO(bassosimone): we should propagate the kind of run
|
|
// to here such that we get the right runType.
|
|
|
|
// TODO(bassosimone): we are breaking the use case in which
|
|
// someone choose the number of URLs explicitly via the config.
|
|
|
|
func lookupURLs(ctl *Controller, limit int64, categories []string) ([]string, map[int64]int64, error) {
|
|
inputloader := engine.NewInputLoader(engine.InputLoaderConfig{
|
|
CheckInConfig: &model.CheckInConfig{
|
|
WebConnectivity: model.CheckInConfigWebConnectivity{
|
|
CategoryCodes: categories,
|
|
},
|
|
},
|
|
InputPolicy: engine.InputOrQueryBackend,
|
|
Session: ctl.Session,
|
|
SourceFiles: ctl.InputFiles,
|
|
StaticInputs: ctl.Inputs,
|
|
})
|
|
testlist, err := inputloader.Load(context.Background())
|
|
var urls []string
|
|
urlIDMap := make(map[int64]int64)
|
|
if err != nil {
|
|
return nil, nil, err
|
|
}
|
|
for idx, url := range testlist {
|
|
log.Debugf("Going over URL %d", idx)
|
|
urlID, err := database.CreateOrUpdateURL(
|
|
ctl.Probe.DB(), url.URL, url.CategoryCode, url.CountryCode,
|
|
)
|
|
if err != nil {
|
|
log.Error("failed to add to the URL table")
|
|
return nil, nil, err
|
|
}
|
|
log.Debugf("Mapped URL %s to idx %d and urlID %d", url.URL, idx, urlID)
|
|
urlIDMap[int64(idx)] = urlID
|
|
urls = append(urls, url.URL)
|
|
}
|
|
return urls, urlIDMap, nil
|
|
}
|
|
|
|
// WebConnectivity test implementation
|
|
type WebConnectivity struct {
|
|
}
|
|
|
|
// Run starts the test
|
|
func (n WebConnectivity) Run(ctl *Controller) error {
|
|
log.Debugf("Enabled category codes are the following %v", ctl.Probe.Config().Nettests.WebsitesEnabledCategoryCodes)
|
|
urls, urlIDMap, err := lookupURLs(ctl, ctl.Probe.Config().Nettests.WebsitesURLLimit, ctl.Probe.Config().Nettests.WebsitesEnabledCategoryCodes)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
ctl.SetInputIdxMap(urlIDMap)
|
|
builder, err := ctl.Session.NewExperimentBuilder(
|
|
"web_connectivity",
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return ctl.Run(builder, urls)
|
|
}
|