Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

allow build request override of pipeline strategy envs #13160

Merged
merged 1 commit into from
Mar 3, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pkg/build/generator/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,8 @@ func updateBuildEnv(strategy *buildapi.BuildStrategy, env []kapi.EnvVar) {
buildEnv = &strategy.DockerStrategy.Env
case strategy.CustomStrategy != nil:
buildEnv = &strategy.CustomStrategy.Env
case strategy.JenkinsPipelineStrategy != nil:
buildEnv = &strategy.JenkinsPipelineStrategy.Env
}

newEnv := []kapi.EnvVar{}
Expand Down
118 changes: 118 additions & 0 deletions pkg/build/generator/generator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -445,6 +445,124 @@ func TestInstantiateWithImageTrigger(t *testing.T) {
}
}

func TestInstantiateWithBuildRequestEnvs(t *testing.T) {
buildRequestWithEnv := buildapi.BuildRequest{
Env: []kapi.EnvVar{{Name: "FOO", Value: "BAR"}},
}
buildRequestWithoutEnv := buildapi.BuildRequest{}

tests := []struct {
bcfunc func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error)
req buildapi.BuildRequest
expectedEnvValue string
}{
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockSourceStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithEnv,
expectedEnvValue: "BAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockDockerStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithEnv,
expectedEnvValue: "BAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockCustomStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithEnv,
expectedEnvValue: "BAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockJenkinsStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithEnv,
expectedEnvValue: "BAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockSourceStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithoutEnv,
expectedEnvValue: "VAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockDockerStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithoutEnv,
expectedEnvValue: "VAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockCustomStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithoutEnv,
expectedEnvValue: "VAR",
},
{
bcfunc: func(ctx kapi.Context, name string) (*buildapi.BuildConfig, error) {
return mocks.MockBuildConfig(mocks.MockSource(), mocks.MockJenkinsStrategyForEnvs(), mocks.MockOutput()), nil
},
req: buildRequestWithoutEnv,
expectedEnvValue: "VAR",
},
}

for _, tc := range tests {
generator := mockBuildGenerator()
client := generator.Client.(Client)
client.GetBuildConfigFunc = tc.bcfunc
generator.Client = client
build, err := generator.Instantiate(kapi.NewDefaultContext(), &tc.req)
if err != nil {
t.Errorf("unexpected error %v", err)
} else {
switch {
case build.Spec.Strategy.SourceStrategy != nil:
if len(build.Spec.Strategy.SourceStrategy.Env) == 0 {
t.Errorf("no envs set for src bc and req %#v, expected %s", tc.req, tc.expectedEnvValue)
} else if build.Spec.Strategy.SourceStrategy.Env[0].Value != tc.expectedEnvValue {
t.Errorf("unexpected value %s for src bc and req %#v, expected %s", build.Spec.Strategy.SourceStrategy.Env[0].Value, tc.req, tc.expectedEnvValue)
}
case build.Spec.Strategy.DockerStrategy != nil:
if len(build.Spec.Strategy.DockerStrategy.Env) == 0 {
t.Errorf("no envs set for dock bc and req %#v, expected %s", tc.req, tc.expectedEnvValue)
} else if build.Spec.Strategy.DockerStrategy.Env[0].Value != tc.expectedEnvValue {
t.Errorf("unexpected value %s for dock bc and req %#v, expected %s", build.Spec.Strategy.DockerStrategy.Env[0].Value, tc.req, tc.expectedEnvValue)
}
case build.Spec.Strategy.CustomStrategy != nil:
if len(build.Spec.Strategy.CustomStrategy.Env) == 0 {
t.Errorf("no envs set for cust bc and req %#v, expected %s", tc.req, tc.expectedEnvValue)
} else {
// custom strategy will also have OPENSHIFT_CUSTOM_BUILD_BASE_IMAGE injected, could be in either order
found := false
for _, env := range build.Spec.Strategy.CustomStrategy.Env {
if env.Value == tc.expectedEnvValue {
found = true
break
}
}
if !found {
t.Errorf("unexpected values %#v for cust bc and req %#v, expected %s", build.Spec.Strategy.CustomStrategy.Env, tc.req, tc.expectedEnvValue)
}
}
case build.Spec.Strategy.JenkinsPipelineStrategy != nil:
if len(build.Spec.Strategy.JenkinsPipelineStrategy.Env) == 0 {
t.Errorf("no envs set for jenk bc and req %#v, expected %s", tc.req, tc.expectedEnvValue)
} else if build.Spec.Strategy.JenkinsPipelineStrategy.Env[0].Value != tc.expectedEnvValue {
t.Errorf("unexpected value %s for jenk bc and req %#v, expected %s", build.Spec.Strategy.JenkinsPipelineStrategy.Env[0].Value, tc.req, tc.expectedEnvValue)
}
}
}
}
}

func TestInstantiateWithLastVersion(t *testing.T) {
g := mockBuildGenerator()
c := g.Client.(Client)
Expand Down
47 changes: 47 additions & 0 deletions pkg/build/generator/test/mocks.go
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,53 @@ func MockSourceStrategyForImageRepository() buildapi.BuildStrategy {
}
}

func MockSourceStrategyForEnvs() buildapi.BuildStrategy {
return buildapi.BuildStrategy{
SourceStrategy: &buildapi.SourceBuildStrategy{
Env: []kapi.EnvVar{{Name: "FOO", Value: "VAR"}},
From: kapi.ObjectReference{
Kind: "ImageStreamTag",
Name: imageRepoName + ":" + tagName,
Namespace: imageRepoNamespace,
},
},
}
}

func MockDockerStrategyForEnvs() buildapi.BuildStrategy {
return buildapi.BuildStrategy{
DockerStrategy: &buildapi.DockerBuildStrategy{
Env: []kapi.EnvVar{{Name: "FOO", Value: "VAR"}},
From: &kapi.ObjectReference{
Kind: "ImageStreamTag",
Name: imageRepoName + ":" + tagName,
Namespace: imageRepoNamespace,
},
},
}
}

func MockCustomStrategyForEnvs() buildapi.BuildStrategy {
return buildapi.BuildStrategy{
CustomStrategy: &buildapi.CustomBuildStrategy{
Env: []kapi.EnvVar{{Name: "FOO", Value: "VAR"}},
From: kapi.ObjectReference{
Kind: "ImageStreamTag",
Name: imageRepoName + ":" + tagName,
Namespace: imageRepoNamespace,
},
},
}
}

func MockJenkinsStrategyForEnvs() buildapi.BuildStrategy {
return buildapi.BuildStrategy{
JenkinsPipelineStrategy: &buildapi.JenkinsPipelineBuildStrategy{
Env: []kapi.EnvVar{{Name: "FOO", Value: "VAR"}},
},
}
}

func MockOutput() buildapi.BuildOutput {
return buildapi.BuildOutput{
To: &kapi.ObjectReference{
Expand Down