chore: merge probe-engine into probe-cli (#201)
This is how I did it: 1. `git clone https://github.com/ooni/probe-engine internal/engine` 2. ``` (cd internal/engine && git describe --tags) v0.23.0 ``` 3. `nvim go.mod` (merging `go.mod` with `internal/engine/go.mod` 4. `rm -rf internal/.git internal/engine/go.{mod,sum}` 5. `git add internal/engine` 6. `find . -type f -name \*.go -exec sed -i 's@/ooni/probe-engine@/ooni/probe-cli/v3/internal/engine@g' {} \;` 7. `go build ./...` (passes) 8. `go test -race ./...` (temporary failure on RiseupVPN) 9. `go mod tidy` 10. this commit message Once this piece of work is done, we can build a new version of `ooniprobe` that is using `internal/engine` directly. We need to do more work to ensure all the other functionality in `probe-engine` (e.g. making mobile packages) are still WAI. Part of https://github.com/ooni/probe/issues/1335
This commit is contained in:
parent
b1ce300c8d
commit
d57c78bc71
535 changed files with 66182 additions and 23 deletions
190
internal/engine/experimentbuilder_test.go
Normal file
190
internal/engine/experimentbuilder_test.go
Normal file
|
|
@ -0,0 +1,190 @@
|
|||
package engine
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/experiment/example"
|
||||
)
|
||||
|
||||
func TestExperimentBuilderOptions(t *testing.T) {
|
||||
t.Run("when config is not a pointer", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: 17,
|
||||
}
|
||||
options, err := b.Options()
|
||||
if err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if options != nil {
|
||||
t.Fatal("expected nil here")
|
||||
}
|
||||
})
|
||||
t.Run("when config is not a struct", func(t *testing.T) {
|
||||
number := 17
|
||||
b := &ExperimentBuilder{
|
||||
config: &number,
|
||||
}
|
||||
options, err := b.Options()
|
||||
if err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if options != nil {
|
||||
t.Fatal("expected nil here")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestExperimentBuilderSetOption(t *testing.T) {
|
||||
t.Run("when config is not a pointer", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: 17,
|
||||
}
|
||||
if err := b.SetOptionBool("antani", false); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when config is not a struct", func(t *testing.T) {
|
||||
number := 17
|
||||
b := &ExperimentBuilder{
|
||||
config: &number,
|
||||
}
|
||||
if err := b.SetOptionBool("antani", false); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when field is not valid", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: &ExperimentBuilder{},
|
||||
}
|
||||
if err := b.SetOptionBool("antani", false); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when field is not bool", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: new(example.Config),
|
||||
}
|
||||
if err := b.SetOptionBool("Message", false); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when field is not string", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: new(example.Config),
|
||||
}
|
||||
if err := b.SetOptionString("ReturnError", "xx"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when field is not int", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: new(example.Config),
|
||||
}
|
||||
if err := b.SetOptionInt("ReturnError", 17); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when int field does not exist", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: new(example.Config),
|
||||
}
|
||||
if err := b.SetOptionInt("antani", 17); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("when string field does not exist", func(t *testing.T) {
|
||||
b := &ExperimentBuilder{
|
||||
config: new(example.Config),
|
||||
}
|
||||
if err := b.SetOptionString("antani", "xx"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestExperimentBuilderSetOptionGuessType(t *testing.T) {
|
||||
type fiction struct {
|
||||
String string
|
||||
Truth bool
|
||||
Value int64
|
||||
}
|
||||
b := &ExperimentBuilder{config: &fiction{}}
|
||||
t.Run("we correctly guess a boolean", func(t *testing.T) {
|
||||
if err := b.SetOptionGuessType("Truth", "true"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := b.SetOptionGuessType("Truth", "false"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := b.SetOptionGuessType("Truth", "1234"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("Truth", "yoloyolo"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("we correctly guess an integer", func(t *testing.T) {
|
||||
if err := b.SetOptionGuessType("Value", "true"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("Value", "false"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("Value", "1234"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := b.SetOptionGuessType("Value", "yoloyolo"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
t.Run("we correctly guess a string", func(t *testing.T) {
|
||||
if err := b.SetOptionGuessType("String", "true"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("String", "false"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("String", "1234"); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
if err := b.SetOptionGuessType("String", "yoloyolo"); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
t.Run("we correctly handle an empty map", func(t *testing.T) {
|
||||
if err := b.SetOptionsGuessType(nil); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
})
|
||||
t.Run("we correctly handle a map containing options", func(t *testing.T) {
|
||||
f := &fiction{}
|
||||
privateb := &ExperimentBuilder{config: f}
|
||||
opts := map[string]string{
|
||||
"String": "yoloyolo",
|
||||
"Value": "174",
|
||||
"Truth": "true",
|
||||
}
|
||||
if err := privateb.SetOptionsGuessType(opts); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if f.String != "yoloyolo" {
|
||||
t.Fatal("cannot set string value")
|
||||
}
|
||||
if f.Value != 174 {
|
||||
t.Fatal("cannot set integer value")
|
||||
}
|
||||
if f.Truth != true {
|
||||
t.Fatal("cannot set bool value")
|
||||
}
|
||||
})
|
||||
t.Run("we handle mistakes in a map containing options", func(t *testing.T) {
|
||||
opts := map[string]string{
|
||||
"String": "yoloyolo",
|
||||
"Value": "antani;",
|
||||
"Truth": "true",
|
||||
}
|
||||
if err := b.SetOptionsGuessType(opts); err == nil {
|
||||
t.Fatal("expected an error here")
|
||||
}
|
||||
})
|
||||
}
|
||||
Loading…
Reference in a new issue