fakeKeyFactory.NewKeyPairStub = func(bits int) (keys.KeyPair, error) {
							return nil, <-errorCh
						}
					})

					It("should return an error", func() {
						Expect(err).To(HaveOccurred())
					})
				})
			})
		})

		Context("when there is a docker image url AND a droplet uri", func() {
			BeforeEach(func() {
				desiredAppReq.DockerImageUrl = "user/repo:tag"
				desiredAppReq.DropletUri = "http://the-droplet.uri.com"
			})

			It("should error", func() {
				Expect(err).To(MatchError(recipebuilder.ErrMultipleAppSources))
			})
		})

		Context("when there is NEITHER a docker image url NOR a droplet uri", func() {
			BeforeEach(func() {
				desiredAppReq.DockerImageUrl = ""
				desiredAppReq.DropletUri = ""
			})

			It("should error", func() {
			It("does not desire the LRP", func() {
				Consistently(fakeBBS.RemoveDesiredLRPCallCount).Should(Equal(0))
			})

			It("responds with 400 Bad Request", func() {
				Expect(responseRecorder.Code).To(Equal(http.StatusBadRequest))
			})
		})

		Context("when the LRP has docker image", func() {
			var newlyDesiredDockerLRP *models.DesiredLRP

			BeforeEach(func() {
				desireAppRequest.DropletUri = ""
				desireAppRequest.DockerImageUrl = "docker:///user/repo#tag"

				newlyDesiredDockerLRP = &models.DesiredLRP{
					ProcessGuid: "new-process-guid",
					Instances:   1,
					RootFs:      "docker:///user/repo#tag",
					Action: models.WrapAction(&models.RunAction{
						User: "******",
						Path: "ls",
					}),
					Annotation: "last-modified-etag",
				}

				dockerBuilder.BuildReturns(newlyDesiredDockerLRP, nil)
			})
						fakeKeyFactory.NewKeyPairStub = func(bits int) (keys.KeyPair, error) {
							return nil, <-errorCh
						}
					})

					It("should return an error", func() {
						Expect(err).To(HaveOccurred())
					})
				})
			})
		})

		Context("when there is a docker image url instead of a droplet uri", func() {
			BeforeEach(func() {
				desiredAppReq.DockerImageUrl = "user/repo:tag"
				desiredAppReq.ExecutionMetadata = "{}"
			})

			It("does not error", func() {
				Expect(err).NotTo(HaveOccurred())
			})

			It("uses an unprivileged container", func() {
				Expect(desiredLRP.Privileged).To(BeFalse())
			})

			It("converts the docker image url into a root fs path", func() {
				Expect(desiredLRP.RootFs).To(Equal("docker:///user/repo#tag"))
			})
Example #4
0
			batch := <-fingerprints

			results := []cc_messages.DesireAppRequestFromCC{}
			for _, fingerprint := range batch {
				routeInfo, err := cc_messages.CCHTTPRoutes{
					{Hostname: "host-" + fingerprint.ProcessGuid},
				}.CCRouteInfo()
				Expect(err).NotTo(HaveOccurred())

				lrp := cc_messages.DesireAppRequestFromCC{
					ProcessGuid: fingerprint.ProcessGuid,
					ETag:        fingerprint.ETag,
					RoutingInfo: routeInfo,
				}
				if strings.HasPrefix(fingerprint.ProcessGuid, "docker") {
					lrp.DockerImageUrl = "some-image"
				}
				results = append(results, lrp)
			}

			desired := make(chan []cc_messages.DesireAppRequestFromCC, 1)
			desired <- results
			close(desired)

			errors := make(chan error, 1)
			close(errors)

			return desired, errors
		}

		buildpackRecipeBuilder = new(fakes.FakeRecipeBuilder)