diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54c6009..f2e9c6f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -68,6 +68,9 @@ run `go mod tidy` to minimize such changes. - use `./internal/netxlite.ReadAllContext` instead of `io.ReadAll` and `./internal/netxlite.CopyContext` instead of `io.Copy` +- use `./internal/model.ErrorToStringOrOK` when +an experiment logs intermediate results + ## Code testing requirements Make sure all tests pass with `go test -race ./...` run from the diff --git a/docs/branching.png b/docs/branching.png index aee5038..d8e48f1 100644 Binary files a/docs/branching.png and b/docs/branching.png differ diff --git a/internal/engine/experiment/dnscheck/dnscheck.go b/internal/engine/experiment/dnscheck/dnscheck.go index ade7c1e..7aaf6e3 100644 --- a/internal/engine/experiment/dnscheck/dnscheck.go +++ b/internal/engine/experiment/dnscheck/dnscheck.go @@ -272,7 +272,7 @@ func Collect(ctx context.Context, multi urlgetter.Multi, inputs []urlgetter.Mult count++ percentage := float64(count) / float64(expect) callbacks.OnProgress(percentage, fmt.Sprintf( - "dnscheck: measure %s: %+v", entry.Input.Config.ResolverURL, entry.Err, + "dnscheck: measure %s: %+v", entry.Input.Config.ResolverURL, model.ErrorToStringOrOK(entry.Err), )) outputch <- entry } diff --git a/internal/model/logger.go b/internal/model/logger.go index aa5448f..9ee383c 100644 --- a/internal/model/logger.go +++ b/internal/model/logger.go @@ -61,3 +61,11 @@ func (logDiscarder) Warn(msg string) {} // Warnf implements Logger.Warnf func (logDiscarder) Warnf(format string, v ...interface{}) {} + +// ErrorToStringOrOK emits "ok" on """ values for success. +func ErrorToStringOrOK(err error) string { + if err != nil { + return err.Error() + } + return "ok" +} diff --git a/internal/model/logger_test.go b/internal/model/logger_test.go index 055e884..343ddf1 100644 --- a/internal/model/logger_test.go +++ b/internal/model/logger_test.go @@ -1,6 +1,9 @@ package model -import "testing" +import ( + "io" + "testing" +) func TestDiscardLoggerWorksAsIntended(t *testing.T) { logger := DiscardLogger @@ -11,3 +14,20 @@ func TestDiscardLoggerWorksAsIntended(t *testing.T) { logger.Warn("foo") logger.Warnf("%s", "foo") } + +func TestErrorToStringOrOK(t *testing.T) { + t.Run("on success", func(t *testing.T) { + expectedResult := ErrorToStringOrOK(nil) + if expectedResult != "ok" { + t.Fatal("expected ok") + } + }) + + t.Run("on failure", func(t *testing.T) { + err := io.EOF + expectedResult := ErrorToStringOrOK(err) + if expectedResult != err.Error() { + t.Fatal("not the result we expected", expectedResult) + } + }) +}