package bittorrent import ( "context" "errors" "fmt" "log" "testing" "github.com/anacrolix/dht/v2" "github.com/ooni/probe-cli/v3/internal/engine/mockable" "github.com/ooni/probe-cli/v3/internal/model" ) func TestMeasurer_run(t *testing.T) { // expectedPings is the expected number of pings const expectedPings = 4 // runHelper is an helper function to run this set of tests. runHelper := func(input string) (*model.Measurement, model.ExperimentMeasurer, error) { m := NewExperimentMeasurer(Config{}) if m.ExperimentName() != "dht" { t.Fatal("invalid experiment name") } if m.ExperimentVersion() != "0.0.1" { t.Fatal("invalid experiment version") } ctx := context.Background() meas := &model.Measurement{ Input: model.MeasurementTarget(input), } sess := &mockable.Session{ MockableLogger: model.DiscardLogger, } callbacks := model.NewPrinterCallbacks(model.DiscardLogger) err := m.Run(ctx, sess, meas, callbacks) return meas, m, err } t.Run("with empty input", func(t *testing.T) { _, _, err := runHelper("") if !errors.Is(err, errNoInputProvided) { t.Fatal("unexpected error", err) } }) t.Run("with invalid URL", func(t *testing.T) { _, _, err := runHelper("\t") if !errors.Is(err, errInputIsNotAnURL) { t.Fatal("unexpected error", err) } }) t.Run("with invalid scheme", func(t *testing.T) { _, _, err := runHelper("https://8.8.8.8:443/") if !errors.Is(err, errInvalidScheme) { t.Fatal("unexpected error", err) } }) }