func (u *s3upload) uploadToBucket(bucket s3.Bucket, sourcePath string) error {
	logData := lager.Data{
		"source_path": sourcePath,
		"target_path": u.targetPath,
		"bucket":      u.bucketName,
	}

	u.logInfo("upload", "starting", logData)

	err := bucket.Upload(sourcePath, u.targetPath)
	if err != nil {
		u.logError("upload", err, logData)
		return err
	}

	u.logInfo("upload", "done", logData)

	return nil
}
		logger = lager.NewLogger("logger")
		log = gbytes.NewBuffer()
		logger.RegisterSink(lager.NewWriterSink(log, lager.INFO))

		fakeRegion = aws.Region{
			Name:                 "fake_region",
			S3Endpoint:           fakeS3EndpointURL,
			S3LocationConstraint: true,
		}
		goamzBucketClient = goamz.New(aws.Auth{}, fakeRegion).Bucket(bucketName)
	})

	Describe("GetOrCreateBucket", func() {
		Context("when the bucket already exists", func() {
			var (
				err    error
				bucket s3.Bucket
			)

			BeforeEach(func() {
				err := goamzBucketClient.PutBucket(goamz.BucketOwnerFull)
				Expect(err).NotTo(HaveOccurred())

				client := s3.NewClient(fakeS3EndpointURL, "accessKey", "secretKey", logger)
				bucket, err = client.GetOrCreateBucket(bucketName)
			})

			AfterEach(func() {
				err := goamzBucketClient.DelBucket()
				Expect(err).NotTo(HaveOccurred())
			})
			bucket := s3.NewBucket("bucket-name", "endpoint", "key", "secret", nil)
			Expect(bucket.Name()).To(Equal("bucket-name"))
		})
	})

	Describe(".Upload", func() {
		var (
			targetPath         = "path/to/target"
			bucketName         = "my-bucket"
			expectedSourcePath = "path/to/source"
			expectedEndpoint   = "http://foo.bar"
			expectedEnvKey     = "FOO"
			expectedEnvVar     = "BAR"
			expectedKey        = "AWS-ACCESS-KEY"
			expectedSecret     = "AWS-SECRET-KEY"
			expectedBucketPath string
			uploadErr          error
			bucket             s3.Bucket
			cmd                *fakeCommand
			cmdEnvironment     []string
			cmdFactory         s3.CommandFactory
			generatedCmd       string
			logger             lager.Logger
			log                *gbytes.Buffer
		)

		BeforeEach(func() {
			expectedBucketPath = fmt.Sprintf("s3://%s/%s", bucketName, targetPath)

			cmd = &fakeCommand{}