package webhook
import (
"testing"
"github.com/openshift/origin/pkg/build/api"
)
func newBuildSource(ref string) *api.BuildSource {
return &api.BuildSource{
Git: &api.GitBuildSource{
Ref: ref,
},
}
}
func newBuildConfig() *api.BuildConfig {
return &api.BuildConfig{
Spec: api.BuildConfigSpec{
Triggers: []api.BuildTriggerPolicy{
{
Type: api.GenericWebHookBuildTriggerType,
GenericWebHook: &api.WebHookTrigger{
Secret: "secret101",
},
},
{
Type: api.GenericWebHookBuildTriggerType,
GenericWebHook: &api.WebHookTrigger{
Secret: "secret100",
AllowEnv: true,
},
},
{
Type: api.GenericWebHookBuildTriggerType,
GenericWebHook: &api.WebHookTrigger{
Secret: "secret102",
},
},
{
Type: api.GitHubWebHookBuildTriggerType,
GitHubWebHook: &api.WebHookTrigger{
Secret: "secret201",
},
},
{
Type: api.GitHubWebHookBuildTriggerType,
GitHubWebHook: &api.WebHookTrigger{
Secret: "secret200",
},
},
{
Type: api.GitHubWebHookBuildTriggerType,
GitHubWebHook: &api.WebHookTrigger{
Secret: "secret202",
},
},
},
},
}
}
func TestWebHookEventUnmatchedRef(t *testing.T) {
buildSourceGit := newBuildSource("wrongref")
refMatch := GitRefMatches("master", DefaultConfigRef, buildSourceGit)
if refMatch {
t.Errorf("Expected Event Ref to not match BuildConfig Git Ref")
}
}
func TestWebHookEventMatchedRef(t *testing.T) {
buildSourceGit := newBuildSource("master")
refMatch := GitRefMatches("master", DefaultConfigRef, buildSourceGit)
if !refMatch {
t.Errorf("Expected WebHook Event Ref to match BuildConfig Git Ref")
}
}
func TestWebHookEventNoRef(t *testing.T) {
buildSourceGit := newBuildSource("")
refMatch := GitRefMatches("master", DefaultConfigRef, buildSourceGit)
if !refMatch {
t.Errorf("Expected WebHook Event Ref to match BuildConfig Git Ref")
}
}
func TestFindTriggerPolicyWebHookError(t *testing.T) {
buildConfig := newBuildConfig()
_, err := FindTriggerPolicy(api.ImageChangeBuildTriggerType, buildConfig)
if err != ErrHookNotEnabled {
t.Errorf("Expected error %s got %s", ErrHookNotEnabled, err)
}
}
func TestFindTriggerPolicyMatchedGenericWebHook(t *testing.T) {
buildConfig := newBuildConfig()
triggers, err := FindTriggerPolicy(api.GenericWebHookBuildTriggerType, buildConfig)
if err != nil {
t.Errorf("Expected error to be nil, got %s", err)
}
if triggers == nil {
t.Error("Expected a slice of matched 'triggers', got nil")
}
if len(triggers) != 3 {
t.Errorf("Expected a slice of 3 matched triggers, got %d", len(triggers))
}
}
func TestFindTriggerPolicyMatchedGithubWebHook(t *testing.T) {
buildConfig := newBuildConfig()
triggers, err := FindTriggerPolicy(api.GitHubWebHookBuildTriggerType, buildConfig)
if err != nil {
t.Errorf("Expected error to be nil, got %s", err)
}
if triggers == nil {
t.Error("Expected a slice of matched 'triggers', got nil")
}
if len(triggers) != 3 {
t.Errorf("Expected a slice of 3 matched triggers, got %d", len(triggers))
}
}
func TestValidateWrongWebHookSecretError(t *testing.T) {
buildConfig := newBuildConfig()
_, err := ValidateWebHookSecret(buildConfig.Spec.Triggers, "wrongsecret")
if err != ErrSecretMismatch {
t.Errorf("Expected error %s, got %s", ErrSecretMismatch, err)
}
}
func TestValidateMatchGenericWebHookSecret(t *testing.T) {
secret := "secret101"
buildconfig := newBuildConfig()
trigger, err := ValidateWebHookSecret(buildconfig.Spec.Triggers, secret)
if err != nil {
t.Errorf("Expected error to be nil, got %s", err)
}
if trigger.Secret != secret {
t.Errorf("Expected returned 'secret'(%s) to match %s", trigger.Secret, secret)
}
if trigger.AllowEnv {
t.Errorf("Expected AllowEnv to be false for %s", secret)
}
}
func TestValidateMatchGitHubWebHookSecret(t *testing.T) {
secret := "secret201"
buildconfig := newBuildConfig()
trigger, err := ValidateWebHookSecret(buildconfig.Spec.Triggers, secret)
if err != nil {
t.Errorf("Expected error to be nil, got %s", err)
}
if trigger.Secret != secret {
t.Errorf("Expected returned 'secret'(%s) to match %s", trigger.Secret, secret)
}
if trigger.AllowEnv {
t.Errorf("Expected AllowEnv to be false for %s", secret)
}
}
func TestValidateEnvVarsGenericWebHook(t *testing.T) {
secret := "secret100"
buildconfig := newBuildConfig()
trigger, err := ValidateWebHookSecret(buildconfig.Spec.Triggers, secret)
if err != nil {
t.Errorf("Expected error to be nil, got %s", err)
}
if trigger.Secret != secret {
t.Errorf("Expected returned 'secret'(%s) to match %s", trigger.Secret, secret)
}
if !trigger.AllowEnv {
t.Errorf("Expected AllowEnv to be true for %s", secret)
}
}