| package publicparams |
| |
| import ( |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/paramtools" |
| "go.skia.org/infra/golden/go/types" |
| ) |
| |
| const ( |
| test = types.PrimaryKeyField |
| corpus = types.CorpusField |
| model = "model" |
| sdk = "sdk" |
| |
| alphaCorpus = "alpha" |
| betaCorpus = "beta" |
| |
| modelOne = "model1" |
| modelTwo = "model2" |
| |
| sdkOne = "sdk1" |
| sdkTwo = "sdk2" |
| sdkThree = "sdk3" |
| |
| testOne = "test1" |
| testTwo = "test2" |
| ) |
| |
| var ( |
| // These are effectively test cases, representing possible traces that could be compared against |
| // the various matchers. "known" means the value matches a constant, "ambivalent" means the value |
| // matches a constant (but shouldn't affect any Matcher), "unknown" means the value does not |
| // match a constant, "missing" means the key doesn't exist, and "empty" means the value is "". |
| // The final _True or _False indicates the expected value of Matches() given the rules in |
| // jsonConfig. |
| knownCorpus_True = paramtools.Params{corpus: alphaCorpus, test: testOne} |
| knownCorpusModelSDK_True = paramtools.Params{corpus: betaCorpus, model: modelOne, sdk: sdkOne, test: testOne} |
| knownCorpusModelSDK2_True = paramtools.Params{corpus: betaCorpus, model: modelTwo, sdk: sdkTwo, test: testTwo} |
| |
| knownCorpus_AmbivalentSDK_True = paramtools.Params{corpus: alphaCorpus, sdk: sdkThree, test: testOne} |
| |
| knownCorpusModel_UnknownSDK_False = paramtools.Params{corpus: betaCorpus, model: modelOne, sdk: "unknown", test: testOne} |
| knownCorpusSDK_UnknownModel_False = paramtools.Params{corpus: betaCorpus, model: "unknown", sdk: sdkThree, test: testTwo} |
| knownCorpus_UnknownModelSDK_False = paramtools.Params{corpus: betaCorpus, model: "unknown", sdk: "unknown", test: testTwo} |
| knownModelSDK_UnknownCorpus_False = paramtools.Params{corpus: "unknown", model: modelOne, sdk: sdkTwo, test: testOne} |
| |
| knownCorpusModel_MissingSDK_False = paramtools.Params{corpus: betaCorpus, model: modelOne, test: testOne} |
| knownCorpus_MissingModelSDK_False = paramtools.Params{corpus: betaCorpus, test: testOne} |
| knownModelSDK_MissingCorpus_False = paramtools.Params{model: modelTwo, sdk: sdkTwo, test: testTwo} |
| |
| knownCorpusModel_EmptySDK_False = paramtools.Params{corpus: betaCorpus, model: modelOne, sdk: "", test: testOne} |
| knownModelSDK_EmptyCorpus_False = paramtools.Params{corpus: "", model: modelOne, sdk: sdkTwo, test: testOne} |
| ) |
| |
| func TestMatcherFromRules_ValidConfig_RulesAreFollowed(t *testing.T) { |
| m, err := MatcherFromRules(MatchingRules{ |
| "alpha": {}, |
| "beta": { |
| "model": {"model1", "model2"}, |
| "sdk": {"sdk1", "sdk2", "sdk3"}, |
| }, |
| }) |
| require.NoError(t, err) |
| |
| assert.True(t, m.Matches(knownCorpus_True)) |
| assert.True(t, m.Matches(knownCorpusModelSDK_True)) |
| assert.True(t, m.Matches(knownCorpusModelSDK2_True)) |
| assert.True(t, m.Matches(knownCorpus_AmbivalentSDK_True)) |
| |
| assert.False(t, m.Matches(knownCorpusModel_UnknownSDK_False)) |
| assert.False(t, m.Matches(knownCorpusSDK_UnknownModel_False)) |
| assert.False(t, m.Matches(knownCorpus_UnknownModelSDK_False)) |
| assert.False(t, m.Matches(knownModelSDK_UnknownCorpus_False)) |
| assert.False(t, m.Matches(knownCorpusModel_MissingSDK_False)) |
| assert.False(t, m.Matches(knownCorpus_MissingModelSDK_False)) |
| assert.False(t, m.Matches(knownModelSDK_MissingCorpus_False)) |
| assert.False(t, m.Matches(knownCorpusModel_EmptySDK_False)) |
| assert.False(t, m.Matches(knownModelSDK_EmptyCorpus_False)) |
| assert.False(t, m.Matches(nil)) |
| } |
| |
| func TestMatcherFromRules_EmptyConfig_ReturnsError(t *testing.T) { |
| _, err := MatcherFromRules(MatchingRules{}) |
| require.Error(t, err) |
| assert.Contains(t, err.Error(), "No rules detected") |
| } |
| |
| func TestMatcherFromRules_EmptyCorpus_ReturnsError(t *testing.T) { |
| _, err := MatcherFromRules(MatchingRules{ |
| "": {}, |
| }) |
| require.Error(t, err) |
| assert.Contains(t, err.Error(), "empty") |
| } |