})

		Context("when path is a file", func() {
			BeforeEach(func() {
				fs.RegisterOpenFile("/fake-archived-templates-path", &fakesys.FakeFile{
					Contents: []byte("fake-archive-contents"),
					Stats:    &fakesys.FakeFileStats{FileType: fakesys.FakeFileTypeFile},
				})
			})

			It("returns sha1 of the file", func() {
				sha1, err := sha1Calculator.Calculate("/fake-archived-templates-path")
				Expect(err).ToNot(HaveOccurred())
				Expect(sha1).To(Equal("4603db250d7b5b78dfe17869649784353177b549"))
			})
		})

		Context("when reading the file fails", func() {
			BeforeEach(func() {
				fs.OpenFileErr = errors.New("fake-open-file-error")
			})

			It("returns an error", func() {
				_, err := sha1Calculator.Calculate("/fake-archived-templates-path")
				Expect(err).To(HaveOccurred())
				Expect(err.Error()).To(ContainSubstring("fake-open-file-error"))
			})
		})
	})
})
		logger.Error("TAG", "some %s info to log", "awesome")

		contents, err := fs.ReadFileString(logFile.Name())
		Expect(err).ToNot(HaveOccurred())

		expectedContent := expectedLogFormat("TAG", "ERROR - some awesome info to log")
		Expect(contents).To(MatchRegexp(expectedContent))
	})

	It("does not log at NONE level", func() {
		logger, logFile, err := New(boshlog.LevelNone, logFile.Name(), DefaultLogFileMode, fs)
		Expect(err).ToNot(HaveOccurred())

		logger.Error("TAG", "some %s info to log", "awesome")

		contents, err := fs.ReadFileString(logFile.Name())
		Expect(err).ToNot(HaveOccurred())

		Expect(contents).To(Equal(""))
	})

	It("errors if the file cannot be openned for writing", func() {
		fs.OpenFileErr = errors.New("fake-fs-error")

		_, _, err := New(boshlog.LevelNone, logFile.Name(), DefaultLogFileMode, fs)
		Expect(err).To(HaveOccurred())
		Expect(err.Error()).To(ContainSubstring("fake-fs-error"))
	})
})
			It("returns a 404", func() {
				postBody := `{"method":"ping","arguments":["foo","bar"], "reply_to": "reply to me!"}`
				postPayload := strings.NewReader(postBody)

				httpResponse, err := httpClient.Post(serverURL+"/blobs/123", "application/json", postPayload)
				Expect(err).ToNot(HaveOccurred())

				defer httpResponse.Body.Close()

				Expect(httpResponse.StatusCode).To(Equal(404))
			})
		})

		Context("when file does not exist", func() {
			It("returns a 404", func() {
				fs.OpenFileErr = errors.New("no such file or directory")
				httpResponse, err := httpClient.Get(serverURL + "/blobs/123")
				Expect(err).ToNot(HaveOccurred())

				defer httpResponse.Body.Close()
				Expect(httpResponse.StatusCode).To(Equal(404))
			})
		})

		Context("when file does not have correct permissions", func() {
			It("returns a 500", func() {
				fs.OpenFileErr = errors.New("permission denied")
				httpResponse, err := httpClient.Get(serverURL + "/blobs/123")
				Expect(err).ToNot(HaveOccurred())

				defer httpResponse.Body.Close()