// SetOpenShiftClient sets the passed OpenShift client in the application configuration func (c *AppConfig) SetOpenShiftClient(osclient client.Interface, originNamespace string) { c.osclient = osclient c.originNamespace = originNamespace c.imageStreamResolver = app.ImageStreamResolver{ Client: osclient, ImageStreamImages: osclient, Namespaces: []string{originNamespace, "openshift"}, } c.imageStreamByAnnotationResolver = app.NewImageStreamByAnnotationResolver(osclient, osclient, []string{originNamespace, "openshift"}) c.templateResolver = app.TemplateResolver{ Client: osclient, TemplateConfigsNamespacer: osclient, Namespaces: []string{originNamespace, "openshift"}, } c.templateFileResolver = &app.TemplateFileResolver{ Typer: c.typer, Mapper: c.mapper, ClientMapper: c.clientMapper, Namespace: originNamespace, } }
func TestRunAll(t *testing.T) { dockerResolver := app.DockerRegistryResolver{ Client: dockerregistry.NewClient(), } tests := []struct { name string config *AppConfig expected map[string][]string expectedErr error expectInsecure util.StringSet }{ { name: "successful ruby app generation", config: &AppConfig{ SourceRepositories: util.StringList{"https://github.com/openshift/ruby-hello-world"}, dockerResolver: fakeDockerResolver(), imageStreamResolver: app.ImageStreamResolver{ Client: &client.Fake{}, ImageStreamImages: &client.Fake{}, Namespaces: []string{"default"}, }, Strategy: "source", imageStreamByAnnotationResolver: app.NewImageStreamByAnnotationResolver(&client.Fake{}, &client.Fake{}, []string{"default"}), templateResolver: app.TemplateResolver{ Client: &client.Fake{}, TemplateConfigsNamespacer: &client.Fake{}, Namespaces: []string{"openshift", "default"}, }, detector: app.SourceRepositoryEnumerator{ Detectors: source.DefaultDetectors, Tester: dockerfile.NewTester(), }, typer: kapi.Scheme, osclient: &client.Fake{}, originNamespace: "default", }, expected: map[string][]string{ "imageStream": {"ruby-hello-world", "ruby"}, "buildConfig": {"ruby-hello-world"}, "deploymentConfig": {"ruby-hello-world"}, "service": {"ruby-hello-world"}, }, expectedErr: nil, }, { name: "app generation using context dir", config: &AppConfig{ SourceRepositories: util.StringList{"https://github.com/openshift/sti-ruby"}, ContextDir: "2.0/test/rack-test-app", dockerResolver: dockerResolver, imageStreamResolver: fakeImageStreamResolver(), imageStreamByAnnotationResolver: app.NewImageStreamByAnnotationResolver(&client.Fake{}, &client.Fake{}, []string{"default"}), templateResolver: app.TemplateResolver{ Client: &client.Fake{}, TemplateConfigsNamespacer: &client.Fake{}, Namespaces: []string{"openshift", "default"}, }, detector: app.SourceRepositoryEnumerator{ Detectors: source.DefaultDetectors, Tester: dockerfile.NewTester(), }, typer: kapi.Scheme, osclient: &client.Fake{}, originNamespace: "default", }, expected: map[string][]string{ "imageStream": {"sti-ruby"}, "buildConfig": {"sti-ruby"}, "deploymentConfig": {"sti-ruby"}, "service": {"sti-ruby"}, }, expectedErr: nil, }, { name: "insecure registry generation", config: &AppConfig{ Components: util.StringList{"myrepo:5000/myco/example"}, SourceRepositories: util.StringList{"https://github.com/openshift/ruby-hello-world"}, Strategy: "source", dockerResolver: app.DockerClientResolver{ Client: &dockertools.FakeDockerClient{ Images: []docker.APIImages{{RepoTags: []string{"myrepo:5000/myco/example"}}}, Image: dockerBuilderImage(), }, Insecure: true, }, imageStreamResolver: app.ImageStreamResolver{ Client: &client.Fake{}, ImageStreamImages: &client.Fake{}, Namespaces: []string{"default"}, }, templateResolver: app.TemplateResolver{ Client: &client.Fake{}, TemplateConfigsNamespacer: &client.Fake{}, Namespaces: []string{}, }, templateFileResolver: &app.TemplateFileResolver{}, detector: app.SourceRepositoryEnumerator{ Detectors: source.DefaultDetectors, Tester: dockerfile.NewTester(), }, typer: kapi.Scheme, osclient: &client.Fake{}, originNamespace: "default", InsecureRegistry: true, }, expected: map[string][]string{ "imageStream": {"example", "ruby-hello-world"}, "buildConfig": {"ruby-hello-world"}, "deploymentConfig": {"ruby-hello-world"}, "service": {"ruby-hello-world"}, }, expectedErr: nil, expectInsecure: util.NewStringSet("example"), }, { name: "docker build", config: &AppConfig{ SourceRepositories: util.StringList{"https://github.com/openshift/ruby-hello-world"}, dockerResolver: app.DockerClientResolver{ Client: &dockertools.FakeDockerClient{ Images: []docker.APIImages{{RepoTags: []string{"openshift/ruby-20-centos7"}}}, Image: dockerBuilderImage(), }, Insecure: true, }, imageStreamResolver: app.ImageStreamResolver{ Client: &client.Fake{}, ImageStreamImages: &client.Fake{}, Namespaces: []string{"default"}, }, imageStreamByAnnotationResolver: app.NewImageStreamByAnnotationResolver(&client.Fake{}, &client.Fake{}, []string{"default"}), templateResolver: app.TemplateResolver{ Client: &client.Fake{}, TemplateConfigsNamespacer: &client.Fake{}, Namespaces: []string{"openshift", "default"}, }, detector: app.SourceRepositoryEnumerator{ Detectors: source.DefaultDetectors, Tester: dockerfile.NewTester(), }, typer: kapi.Scheme, osclient: &client.Fake{}, originNamespace: "default", }, expected: map[string][]string{ "imageStream": {"ruby-hello-world", "ruby-20-centos7"}, "buildConfig": {"ruby-hello-world"}, "deploymentConfig": {"ruby-hello-world"}, "service": {"ruby-hello-world"}, }, expectedErr: nil, }, } for _, test := range tests { test.config.refBuilder = &app.ReferenceBuilder{} res, err := test.config.RunAll(os.Stdout) if err != test.expectedErr { t.Errorf("%s: Error mismatch! Expected %v, got %v", test.name, test.expectedErr, err) continue } imageStreams := []*imageapi.ImageStream{} got := map[string][]string{} for _, obj := range res.List.Items { switch tp := obj.(type) { case *buildapi.BuildConfig: got["buildConfig"] = append(got["buildConfig"], tp.Name) case *kapi.Service: got["service"] = append(got["service"], tp.Name) case *imageapi.ImageStream: got["imageStream"] = append(got["imageStream"], tp.Name) imageStreams = append(imageStreams, tp) case *deploy.DeploymentConfig: got["deploymentConfig"] = append(got["deploymentConfig"], tp.Name) } } if len(test.expected) != len(got) { t.Errorf("%s: Resource kind size mismatch! Expected %d, got %d", test.name, len(test.expected), len(got)) continue } for k, exp := range test.expected { g, ok := got[k] if !ok { t.Errorf("%s: Didn't find expected kind %s", test.name, k) } sort.Strings(g) sort.Strings(exp) if !reflect.DeepEqual(g, exp) { t.Errorf("%s: %s resource names mismatch! Expected %v, got %v", test.name, k, exp, g) continue } } if test.expectInsecure == nil { continue } for _, stream := range imageStreams { _, hasAnnotation := stream.Annotations[imageapi.InsecureRepositoryAnnotation] if test.expectInsecure.Has(stream.Name) && !hasAnnotation { t.Errorf("%s: Expected insecure annotation for stream: %s, but did not get one.", test.name, stream.Name) } if !test.expectInsecure.Has(stream.Name) && hasAnnotation { t.Errorf("%s: Got insecure annotation for stream: %s, and was not expecting one.", test.name, stream.Name) } } } }