| package ignore |
| |
| import ( |
| "testing" |
| "time" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| |
| "go.skia.org/infra/go/paramtools" |
| "go.skia.org/infra/go/testutils/unittest" |
| data "go.skia.org/infra/golden/go/testutils/data_three_devices" |
| ) |
| |
| func TestAsMatcherSunnyDay(t *testing.T) { |
| unittest.SmallTest(t) |
| r1 := NewRule("jon@example.com", time.Now().Add(time.Hour), "config=gpu", "good") |
| r2 := NewRule("jon@example.com", time.Now().Add(time.Hour), "os=linux&config=cpu", "reason") |
| |
| m, err := AsMatcher([]Rule{r1, r2}) |
| require.NoError(t, err) |
| // matches the first rule |
| assert.True(t, m.MatchAnyParams(paramtools.Params{ |
| "config": "gpu", |
| })) |
| // matches the second rule |
| assert.True(t, m.MatchAnyParams(paramtools.Params{ |
| "config": "cpu", |
| "os": "linux", |
| })) |
| // matches the first rule, but with some extra |
| assert.True(t, m.MatchAnyParams(paramtools.Params{ |
| "config": "gpu", |
| "snicker": "poodle", |
| })) |
| // completely wrong |
| assert.False(t, m.MatchAnyParams(paramtools.Params{ |
| "snicker": "doodle", |
| })) |
| // almost matches second rule, but not an exact match |
| assert.False(t, m.MatchAnyParams(paramtools.Params{ |
| "os": "linux", |
| })) |
| } |
| |
| func TestAsMatcherWithSpaces(t *testing.T) { |
| unittest.SmallTest(t) |
| r := NewRule("jon@example.com", time.Now().Add(time.Hour), "os=linux&name=There's%20a%20space%20in%20my%20boot", "reason") |
| |
| m, err := AsMatcher([]Rule{r}) |
| require.NoError(t, err) |
| assert.False(t, m.MatchAnyParams(paramtools.Params{ |
| "os": "not-linux", |
| })) |
| assert.True(t, m.MatchAnyParams(paramtools.Params{ |
| "os": "linux", |
| "name": "There's a space in my boot", |
| "extra": "thing", |
| })) |
| } |
| |
| func TestAsMatcherEmpty(t *testing.T) { |
| unittest.SmallTest(t) |
| queries, err := AsMatcher([]Rule{}) |
| require.NoError(t, err) |
| assert.Len(t, queries, 0) |
| } |
| |
| func TestAsMatcherInvalidRule(t *testing.T) { |
| unittest.SmallTest(t) |
| // A bad rule won't get converted |
| r := NewRule("jon@example.com", time.Now().Add(time.Hour), "bad=%", "reason") |
| _, err := AsMatcher([]Rule{r}) |
| require.Error(t, err) |
| } |
| |
| func TestFilterIgnored(t *testing.T) { |
| unittest.SmallTest(t) |
| |
| // With no ignore rules, nothing is filtered |
| ft, pm, err := FilterIgnored(data.MakeTestTile(), nil) |
| require.NoError(t, err) |
| require.Empty(t, pm) |
| require.Equal(t, data.MakeTestTile(), ft) |
| |
| future := time.Now().Add(time.Hour) |
| ignores := []Rule{ |
| NewRule("user@example.com", future, "device=crosshatch", "note"), |
| } |
| |
| // Now filter the tile and make sure those traces are filtered out. |
| ft, pm, err = FilterIgnored(data.MakeTestTile(), ignores) |
| require.NoError(t, err) |
| require.Equal(t, paramtools.ParamMatcher{ |
| { |
| "device": {"crosshatch"}, |
| }, |
| }, pm) |
| require.Len(t, ft.Traces, 4) |
| require.NotContains(t, ft.Traces, data.CrosshatchAlphaTraceID) |
| require.NotContains(t, ft.Traces, data.CrosshatchBetaTraceID) |
| } |