ooni-probe-cli/internal/tutorial/experiment/torsf/chapter02/main.go

66 lines
1.8 KiB
Go
Raw Normal View History

package main
import (
"context"
"encoding/json"
"fmt"
"io/ioutil"
"github.com/apex/log"
"github.com/ooni/probe-cli/v3/internal/engine/mockable"
"github.com/ooni/probe-cli/v3/internal/model"
"golang.org/x/sys/execabs"
)
func main() {
if _, err := execabs.LookPath("tor"); err != nil {
log.Fatal("cannot find the tor executable in path")
}
tempdir, err := ioutil.TempDir("", "")
if err != nil {
log.WithError(err).Fatal("cannot create temporary directory")
}
// -=-=- StartHere -=-=-
//
// # Chapter II: creating an empty experiment
//
// In this chapter we will create an empty experiment and replace
// the code calling the real `torsf` experiment in `main.go` to
// call our empty experiment instead.
//
// (This file is auto-generated from the corresponding source file,
// so make sure you don't edit it manually.)
//
// ## Changes in main.go
//
// In `main.go` we will simply replace the call to the
// `torsf.NewExperimentMeasurer` function with a call to
// a `NewExperimentMeasurer` function that we are going
// to implement as part of this chapter.
//
// After you do this, you also need to remove the now-unneded
// import of the `torsf` package.
//
// There are no additional changes to `main.go`.
//
// ```Go
m := NewExperimentMeasurer(Config{})
// ```
// -=-=- StopHere -=-=-
ctx := context.Background()
measurement := &model.Measurement{}
callbacks := model.NewPrinterCallbacks(log.Log)
sess := &mockable.Session{
MockableLogger: log.Log,
MockableTempDir: tempdir,
}
if err = m.Run(ctx, sess, measurement, callbacks); err != nil {
log.WithError(err).Fatal("torsf experiment failed")
}
data, err := json.Marshal(measurement)
if err != nil {
log.WithError(err).Fatal("json.Marshal failed")
}
fmt.Printf("%s\n", data)
}