| package validate |
| |
| import ( |
| "path/filepath" |
| "regexp" |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/go/testutils" |
| "go.skia.org/infra/perf/go/config" |
| "go.skia.org/infra/perf/go/notifytypes" |
| ) |
| |
| func TestInstanceConfigBytes_AllExistingConfigs_ShouldBeValid(t *testing.T) { |
| allExistingConfigs, err := filepath.Glob(filepath.Join("..", "..", "..", "configs", "*.json")) |
| require.Greater(t, len(allExistingConfigs), 0) |
| require.NoError(t, err) |
| for _, filename := range allExistingConfigs { |
| instanceConfig, schemaErrors, err := InstanceConfigFromFile(filename) |
| require.Empty(t, schemaErrors, filename) |
| require.NoError(t, err, filename) |
| |
| if instanceConfig.InvalidParamCharRegex != "" { |
| _, err := regexp.Compile(instanceConfig.InvalidParamCharRegex) |
| require.NoError(t, err) |
| |
| assert.NotContains(t, instanceConfig.InvalidParamCharRegex, ',') |
| assert.NotContains(t, instanceConfig.InvalidParamCharRegex, '=') |
| } |
| |
| if instanceConfig.GitRepoConfig.CommitNumberRegex != "" { |
| _, err := regexp.Compile(instanceConfig.GitRepoConfig.CommitNumberRegex) |
| require.NoError(t, err) |
| } |
| } |
| } |
| |
| func TestInstanceConfigBytes_EmptyJSONObject_ShouldBeInValid(t *testing.T) { |
| _, _, err := InstanceConfigFromFile(testutils.TestDataFilename(t, "empty.json")) |
| require.Error(t, err) |
| } |
| |
| func TestInstanceConfig_WithInvalidRegex_CauseError(t *testing.T) { |
| _, schemaErrors, err := InstanceConfigFromFile(testutils.TestDataFilename(t, "invalid_regex.json")) |
| require.Empty(t, schemaErrors) |
| require.Contains(t, err.Error(), "compiling invalid_param_char_regex") |
| } |
| |
| func TestInstanceConfigBytes_ContainsValidNotificationTemplates_ShouldBeValid(t *testing.T) { |
| _, _, err := InstanceConfigFromFile(testutils.TestDataFilename(t, "valid-notify-template.json")) |
| require.NoError(t, err) |
| } |
| |
| func TestInstanceConfigBytes_ContainsInValidNotificationTemplates_ShouldBeInValid(t *testing.T) { |
| _, _, err := InstanceConfigFromFile(testutils.TestDataFilename(t, "invalid-notify-template.json")) |
| require.Contains(t, err.Error(), "can't evaluate field FOO") |
| } |
| |
| func TestInstanceConfigValidate_MarkdownIssueTrackerButAPIKeySecretProjectNotSet_ReturnsError(t *testing.T) { |
| i := config.InstanceConfig{ |
| NotifyConfig: config.NotifyConfig{ |
| Notifications: notifytypes.MarkdownIssueTracker, |
| }, |
| } |
| require.Contains(t, Validate(i).Error(), "issue_tracker_api_key_secret_project must be supplied") |
| } |
| |
| func TestInstanceConfigValidate_MarkdownIssueTrackerButAPIKeySecretNameNotSet_ReturnsError(t *testing.T) { |
| i := config.InstanceConfig{ |
| NotifyConfig: config.NotifyConfig{ |
| Notifications: notifytypes.MarkdownIssueTracker, |
| IssueTrackerAPIKeySecretProject: "skia-public", |
| }, |
| } |
| require.Contains(t, Validate(i).Error(), "issue_tracker_api_key_secret_name must be supplied") |
| } |
| |
| func TestInstanceConfigValidate_InvalidParamCharRegexMatchesComma_ReturnsError(t *testing.T) { |
| i := config.InstanceConfig{ |
| InvalidParamCharRegex: ",", |
| } |
| require.Contains(t, Validate(i).Error(), "invalid_param_char_regex must match") |
| } |
| |
| func TestInstanceConfigValidate_InvalidParamCharRegexMatchesEqual_ReturnsError(t *testing.T) { |
| i := config.InstanceConfig{ |
| InvalidParamCharRegex: "=", |
| } |
| require.Contains(t, Validate(i).Error(), "invalid_param_char_regex must match") |
| } |