ooni-probe-cli/internal/cmd/miniooni/oonirun.go
Simone Basso c420c8bb29
feat(miniooni): run local oonirun v2 descriptor (#966)
We introduce the -f, --input-file FILE option with which we
are able to run an OONI Run v2 descriptor stored locally.

In this running mode, there are no checks related to whether the
descriptor has changed, since we're dealing with a local file.

Closes https://github.com/ooni/probe/issues/2328
2022-09-29 11:43:23 +02:00

62 lines
1.9 KiB
Go

package main
//
// OONI Run
//
import (
"context"
"encoding/json"
"errors"
"os"
"github.com/ooni/probe-cli/v3/internal/engine"
"github.com/ooni/probe-cli/v3/internal/oonirun"
)
// ooniRunMain runs the experiments described by the given OONI Run URLs. This
// function works with both v1 and v2 OONI Run URLs.
func ooniRunMain(ctx context.Context,
sess *engine.Session, currentOptions *Options, annotations map[string]string) {
logger := sess.Logger()
cfg := &oonirun.LinkConfig{
AcceptChanges: currentOptions.Yes,
Annotations: annotations,
KVStore: sess.KeyValueStore(),
MaxRuntime: currentOptions.MaxRuntime,
NoCollector: currentOptions.NoCollector,
NoJSON: currentOptions.NoJSON,
Random: currentOptions.Random,
ReportFile: currentOptions.ReportFile,
Session: sess,
}
for _, URL := range currentOptions.Inputs {
r := oonirun.NewLinkRunner(cfg, URL)
if err := r.Run(ctx); err != nil {
if errors.Is(err, oonirun.ErrNeedToAcceptChanges) {
logger.Warnf("oonirun: to accept these changes, rerun adding `-y` to the command line")
logger.Warnf("oonirun: we'll show this error every time the upstream link changes")
panic("oonirun: need to accept changes using `-y`")
}
logger.Warnf("oonirun: running link failed: %s", err.Error())
continue
}
}
for _, filename := range currentOptions.InputFilePaths {
data, err := os.ReadFile(filename)
if err != nil {
logger.Warnf("oonirun: reading OONI Run v2 descriptor failed: %s", err.Error())
continue
}
var descr oonirun.V2Descriptor
if err := json.Unmarshal(data, &descr); err != nil {
logger.Warnf("oonirun: parsing OONI Run v2 descriptor failed: %s", err.Error())
continue
}
if err := oonirun.V2MeasureDescriptor(ctx, cfg, &descr); err != nil {
logger.Warnf("oonirun: running link failed: %s", err.Error())
continue
}
}
}