fix: move preventMistakes in InputLoader (#304)
This fixes an issue where URLs provided with --input are not accepted by the preventMistakes filter. The filter itself needs to execute _only_ on URLs returned by the checkIn API, rather than on URLs returned by the InputLoader, which may instead be user provided. Reference issue: https://github.com/ooni/probe/issues/1435
This commit is contained in:
@@ -9,30 +9,6 @@ import (
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/model"
|
||||
)
|
||||
|
||||
// preventMistakes makes the code more robust with respect to any possible
|
||||
// integration issue where the backend returns to us URLs that don't
|
||||
// belong to the category codes we requested.
|
||||
func preventMistakes(input []model.URLInfo, categories []string) (output []model.URLInfo) {
|
||||
if len(categories) <= 0 {
|
||||
return input
|
||||
}
|
||||
for _, entry := range input {
|
||||
var found bool
|
||||
for _, cat := range categories {
|
||||
if entry.CategoryCode == cat {
|
||||
found = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
log.Warnf("URL %+v not in %+v; skipping", entry, categories)
|
||||
continue
|
||||
}
|
||||
output = append(output, entry)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func lookupURLs(ctl *Controller, categories []string) ([]string, map[int64]int64, error) {
|
||||
inputloader := &engine.InputLoader{
|
||||
CheckInConfig: &model.CheckInConfig{
|
||||
@@ -56,7 +32,6 @@ func lookupURLs(ctl *Controller, categories []string) ([]string, map[int64]int64
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
testlist = preventMistakes(testlist, categories)
|
||||
var urls []string
|
||||
urlIDMap := make(map[int64]int64)
|
||||
for idx, url := range testlist {
|
||||
|
||||
@@ -1,77 +0,0 @@
|
||||
package nettests
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
"github.com/ooni/probe-cli/v3/internal/engine/model"
|
||||
)
|
||||
|
||||
func TestPreventMistakesWithCategories(t *testing.T) {
|
||||
input := []model.URLInfo{{
|
||||
CategoryCode: "NEWS",
|
||||
URL: "https://repubblica.it/",
|
||||
CountryCode: "IT",
|
||||
}, {
|
||||
CategoryCode: "HACK",
|
||||
URL: "https://2600.com",
|
||||
CountryCode: "XX",
|
||||
}, {
|
||||
CategoryCode: "FILE",
|
||||
URL: "https://addons.mozilla.org/",
|
||||
CountryCode: "XX",
|
||||
}}
|
||||
desired := []model.URLInfo{{
|
||||
CategoryCode: "NEWS",
|
||||
URL: "https://repubblica.it/",
|
||||
CountryCode: "IT",
|
||||
}, {
|
||||
CategoryCode: "FILE",
|
||||
URL: "https://addons.mozilla.org/",
|
||||
CountryCode: "XX",
|
||||
}}
|
||||
output := preventMistakes(input, []string{"NEWS", "FILE"})
|
||||
if diff := cmp.Diff(desired, output); diff != "" {
|
||||
t.Fatal(diff)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreventMistakesWithoutCategoriesAndNil(t *testing.T) {
|
||||
input := []model.URLInfo{{
|
||||
CategoryCode: "NEWS",
|
||||
URL: "https://repubblica.it/",
|
||||
CountryCode: "IT",
|
||||
}, {
|
||||
CategoryCode: "HACK",
|
||||
URL: "https://2600.com",
|
||||
CountryCode: "XX",
|
||||
}, {
|
||||
CategoryCode: "FILE",
|
||||
URL: "https://addons.mozilla.org/",
|
||||
CountryCode: "XX",
|
||||
}}
|
||||
output := preventMistakes(input, nil)
|
||||
if diff := cmp.Diff(input, output); diff != "" {
|
||||
t.Fatal(diff)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPreventMistakesWithoutCategoriesAndEmpty(t *testing.T) {
|
||||
input := []model.URLInfo{{
|
||||
CategoryCode: "NEWS",
|
||||
URL: "https://repubblica.it/",
|
||||
CountryCode: "IT",
|
||||
}, {
|
||||
CategoryCode: "HACK",
|
||||
URL: "https://2600.com",
|
||||
CountryCode: "XX",
|
||||
}, {
|
||||
CategoryCode: "FILE",
|
||||
URL: "https://addons.mozilla.org/",
|
||||
CountryCode: "XX",
|
||||
}}
|
||||
output := preventMistakes(input, []string{})
|
||||
if diff := cmp.Diff(input, output); diff != "" {
|
||||
t.Fatal(diff)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user