Describe("Delegators", func() {

		It("delegates Close() to the concreteEmitter", func() {
			instrumentedEmitter.Close()
			Eventually(fakeEmitter.IsClosed).Should(BeTrue())
		})
	})

	Describe("Emit()", func() {
		var testData = []byte("hello")

		It("calls the concrete emitter", func() {
			Expect(fakeEmitter.Messages).To(HaveLen(0))

			err := instrumentedEmitter.Emit(testData)
			Expect(err).ToNot(HaveOccurred())

			Expect(fakeEmitter.Messages).To(HaveLen(1))
			Expect(fakeEmitter.Messages[0]).To(Equal(testData))
		})
		It("increments the ReceivedMetricsCounter", func() {
			Expect(getHeartbeatEvent(instrumentedEmitter).GetReceivedCount()).To(BeNumerically("==", 0))

			err := instrumentedEmitter.Emit(testData)
			Expect(err).ToNot(HaveOccurred())

			Expect(getHeartbeatEvent(instrumentedEmitter).GetReceivedCount()).To(BeNumerically("==", 1))
		})
		Context("when the concrete ByteEmitter returns no error on Emit()", func() {
			It("increments the SentMetricsCounter", func() {