bc6edcca |
package integration
import (
"reflect" |
c1e03fe1 |
"strings" |
bc6edcca |
"testing"
"time"
kapi "k8s.io/kubernetes/pkg/api" |
97e6f1de |
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset" |
bc6edcca |
"k8s.io/kubernetes/pkg/fields"
watchapi "k8s.io/kubernetes/pkg/watch"
|
316359e2 |
defaultsapi "github.com/openshift/origin/pkg/build/admission/defaults/api"
overridesapi "github.com/openshift/origin/pkg/build/admission/overrides/api" |
bc6edcca |
buildtestutil "github.com/openshift/origin/pkg/build/admission/testutil"
buildapi "github.com/openshift/origin/pkg/build/api"
"github.com/openshift/origin/pkg/client"
configapi "github.com/openshift/origin/pkg/cmd/server/api"
"github.com/openshift/origin/pkg/cmd/server/bootstrappolicy"
testutil "github.com/openshift/origin/test/util"
testserver "github.com/openshift/origin/test/util/server"
)
|
e2e8cf3d |
var buildPodAdmissionTestTimeout time.Duration = 30 * time.Second |
bc6edcca |
func TestBuildDefaultGitHTTPProxy(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
bc6edcca |
httpProxy := "http://my.test.proxy:12345" |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
bc6edcca |
GitHTTPProxy: httpProxy,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
bc6edcca |
if actual := build.Spec.Source.Git.HTTPProxy; actual == nil || *actual != httpProxy {
t.Errorf("Resulting build did not get expected HTTP proxy: %v", actual)
}
}
func TestBuildDefaultGitHTTPSProxy(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
bc6edcca |
httpsProxy := "https://my.test.proxy:12345" |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
bc6edcca |
GitHTTPSProxy: httpsProxy,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
bc6edcca |
if actual := build.Spec.Source.Git.HTTPSProxy; actual == nil || *actual != httpsProxy {
t.Errorf("Resulting build did not get expected HTTPS proxy: %v", actual)
}
}
func TestBuildDefaultEnvironment(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
bc6edcca |
env := []kapi.EnvVar{
{
Name: "VAR1",
Value: "VALUE1",
},
{
Name: "VAR2",
Value: "VALUE2",
},
} |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
bc6edcca |
Env: env,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
bc6edcca |
if actual := build.Spec.Strategy.DockerStrategy.Env; !reflect.DeepEqual(env, actual) {
t.Errorf("Resulting build did not get expected environment: %v", actual)
}
}
|
c1e03fe1 |
func TestBuildDefaultLabels(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
labels := []buildapi.ImageLabel{{Name: "KEY", Value: "VALUE"}} |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
c1e03fe1 |
ImageLabels: labels,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := build.Spec.Output.ImageLabels; !reflect.DeepEqual(labels, actual) {
t.Errorf("Resulting build did not get expected labels: %v", actual)
}
}
func TestBuildDefaultNodeSelectors(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
selectors := map[string]string{"KEY": "VALUE"} |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
c1e03fe1 |
NodeSelector: selectors,
}) |
97e6f1de |
_, pod := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := pod.Spec.NodeSelector; !reflect.DeepEqual(selectors, actual) {
t.Errorf("Resulting pod did not get expected nodeselectors: %v", actual)
}
}
func TestBuildDefaultAnnotations(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
annotations := map[string]string{"KEY": "VALUE"} |
97e6f1de |
oclient, kclientset := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{ |
c1e03fe1 |
Annotations: annotations,
}) |
97e6f1de |
_, pod := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := pod.Annotations; strings.Compare(actual["KEY"], annotations["KEY"]) != 0 {
t.Errorf("Resulting pod did not get expected annotations: actual: %v, expected: %v", actual["KEY"], annotations["KEY"])
}
}
|
bc6edcca |
func TestBuildOverrideForcePull(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
97e6f1de |
oclient, kclientset := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{ |
bc6edcca |
ForcePull: true,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
bc6edcca |
if !build.Spec.Strategy.DockerStrategy.ForcePull {
t.Errorf("ForcePull was not set on resulting build")
}
}
func TestBuildOverrideForcePullCustomStrategy(t *testing.T) { |
9f6552c6 |
defer testutil.DumpEtcdOnFailure(t) |
97e6f1de |
oclient, kclientset := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{ |
bc6edcca |
ForcePull: true,
}) |
97e6f1de |
build, pod := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestCustomBuild()) |
bc6edcca |
if pod.Spec.Containers[0].ImagePullPolicy != kapi.PullAlways {
t.Errorf("Pod ImagePullPolicy is not PullAlways")
}
if !build.Spec.Strategy.CustomStrategy.ForcePull {
t.Errorf("ForcePull was not set on resulting build")
}
}
|
c1e03fe1 |
func TestBuildOverrideLabels(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
labels := []buildapi.ImageLabel{{Name: "KEY", Value: "VALUE"}} |
97e6f1de |
oclient, kclientset := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{ |
c1e03fe1 |
ImageLabels: labels,
}) |
97e6f1de |
build, _ := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := build.Spec.Output.ImageLabels; !reflect.DeepEqual(labels, actual) {
t.Errorf("Resulting build did not get expected labels: %v", actual)
}
}
func TestBuildOverrideNodeSelectors(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
selectors := map[string]string{"KEY": "VALUE"} |
97e6f1de |
oclient, kclientset := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{ |
c1e03fe1 |
NodeSelector: selectors,
}) |
97e6f1de |
_, pod := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := pod.Spec.NodeSelector; !reflect.DeepEqual(selectors, actual) {
t.Errorf("Resulting build did not get expected nodeselectors: %v", actual)
}
}
func TestBuildOverrideAnnotations(t *testing.T) {
defer testutil.DumpEtcdOnFailure(t)
annotations := map[string]string{"KEY": "VALUE"} |
97e6f1de |
oclient, kclientset := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{ |
c1e03fe1 |
Annotations: annotations,
}) |
97e6f1de |
_, pod := runBuildPodAdmissionTest(t, oclient, kclientset, buildPodAdmissionTestDockerBuild()) |
c1e03fe1 |
if actual := pod.Annotations; strings.Compare(actual["KEY"], annotations["KEY"]) != 0 {
t.Errorf("Resulting build did not get expected annotations: %v", actual)
}
}
|
bc6edcca |
func buildPodAdmissionTestCustomBuild() *buildapi.Build { |
bd47008d |
build := &buildapi.Build{ObjectMeta: kapi.ObjectMeta{
Labels: map[string]string{
buildapi.BuildConfigLabel: "mock-build-config",
buildapi.BuildRunPolicyLabel: string(buildapi.BuildRunPolicyParallel),
},
}} |
bc6edcca |
build.Name = "test-custom-build"
build.Spec.Source.Git = &buildapi.GitBuildSource{URI: "http://test/src"}
build.Spec.Strategy.CustomStrategy = &buildapi.CustomBuildStrategy{}
build.Spec.Strategy.CustomStrategy.From.Kind = "DockerImage"
build.Spec.Strategy.CustomStrategy.From.Name = "test/image"
return build
}
func buildPodAdmissionTestDockerBuild() *buildapi.Build { |
bd47008d |
build := &buildapi.Build{ObjectMeta: kapi.ObjectMeta{
Labels: map[string]string{
buildapi.BuildConfigLabel: "mock-build-config",
buildapi.BuildRunPolicyLabel: string(buildapi.BuildRunPolicyParallel),
},
}} |
bc6edcca |
build.Name = "test-build"
build.Spec.Source.Git = &buildapi.GitBuildSource{URI: "http://test/src"}
build.Spec.Strategy.DockerStrategy = &buildapi.DockerBuildStrategy{}
return build
}
|
97e6f1de |
func runBuildPodAdmissionTest(t *testing.T, client *client.Client, kclientset *kclientset.Clientset, build *buildapi.Build) (*buildapi.Build, *kapi.Pod) { |
bc6edcca |
ns := testutil.Namespace()
_, err := client.Builds(ns).Create(build)
if err != nil {
t.Fatalf("%v", err)
}
watchOpt := kapi.ListOptions{
FieldSelector: fields.OneTermEqualSelector(
"metadata.name", |
be0d0362 |
buildapi.GetBuildPodName(build), |
bc6edcca |
),
} |
97e6f1de |
podWatch, err := kclientset.Core().Pods(ns).Watch(watchOpt) |
bc6edcca |
if err != nil {
t.Fatalf("%v", err)
}
type resultObjs struct {
build *buildapi.Build
pod *kapi.Pod
}
result := make(chan resultObjs)
defer podWatch.Stop()
go func() {
for e := range podWatch.ResultChan() {
if e.Type == watchapi.Added {
pod, ok := e.Object.(*kapi.Pod)
if !ok {
t.Fatalf("unexpected object: %v", e.Object)
}
build := (*buildtestutil.TestPod)(pod).GetBuild(t)
result <- resultObjs{build: build, pod: pod}
}
}
}()
select {
case <-time.After(buildPodAdmissionTestTimeout):
t.Fatalf("timed out after %v", buildPodAdmissionTestTimeout)
case objs := <-result:
return objs.build, objs.pod
}
return nil, nil
}
|
97e6f1de |
func setupBuildDefaultsAdmissionTest(t *testing.T, defaultsConfig *defaultsapi.BuildDefaultsConfig) (*client.Client, *kclientset.Clientset) { |
bc6edcca |
return setupBuildPodAdmissionTest(t, map[string]configapi.AdmissionPluginConfig{
"BuildDefaults": { |
316359e2 |
Configuration: defaultsConfig, |
bc6edcca |
},
})
}
|
97e6f1de |
func setupBuildOverridesAdmissionTest(t *testing.T, overridesConfig *overridesapi.BuildOverridesConfig) (*client.Client, *kclientset.Clientset) { |
bc6edcca |
return setupBuildPodAdmissionTest(t, map[string]configapi.AdmissionPluginConfig{
"BuildOverrides": { |
316359e2 |
Configuration: overridesConfig, |
bc6edcca |
},
})
}
|
97e6f1de |
func setupBuildPodAdmissionTest(t *testing.T, pluginConfig map[string]configapi.AdmissionPluginConfig) (*client.Client, *kclientset.Clientset) { |
982163f0 |
testutil.RequireEtcd(t) |
bc6edcca |
master, err := testserver.DefaultMasterOptions()
if err != nil {
t.Fatalf("%v", err)
} |
c1e03fe1 |
master.AdmissionConfig.PluginConfig = pluginConfig |
bc6edcca |
clusterAdminKubeConfig, err := testserver.StartConfiguredMaster(master)
if err != nil {
t.Fatalf("%v", err)
}
clusterAdminClient, err := testutil.GetClusterAdminClient(clusterAdminKubeConfig)
if err != nil {
t.Fatalf("%v", err)
}
|
97e6f1de |
clusterAdminKubeClientset, err := testutil.GetClusterAdminKubeClient(clusterAdminKubeConfig) |
bc6edcca |
if err != nil {
t.Fatalf("%v", err)
}
|
97e6f1de |
_, err = clusterAdminKubeClientset.Namespaces().Create(&kapi.Namespace{ |
bc6edcca |
ObjectMeta: kapi.ObjectMeta{Name: testutil.Namespace()},
})
if err != nil {
t.Fatalf("%v", err)
}
err = testserver.WaitForServiceAccounts( |
97e6f1de |
clusterAdminKubeClientset, |
bc6edcca |
testutil.Namespace(),
[]string{
bootstrappolicy.BuilderServiceAccountName,
bootstrappolicy.DefaultServiceAccountName,
})
if err != nil {
t.Fatalf("%v", err)
}
|
97e6f1de |
return clusterAdminClient, clusterAdminKubeClientset |
bc6edcca |
} |