blob: 509f5a16e968ed1dfb949610e4f9ef4a3acf1254 [file] [log] [blame]
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")
}