It("marshals envelopes into bytes", func() {
		envelope := &events.Envelope{
			Origin:    proto.String("fake-origin-3"),
			EventType: events.Envelope_Heartbeat.Enum(),
			Heartbeat: factories.NewHeartbeat(1, 2, 3),
		}
		message, _ := proto.Marshal(envelope)

		inputChan <- envelope
		outputMessage := <-outputChan
		Expect(outputMessage).To(Equal(message))
	})

	Context("metrics", func() {
		It("emits the correct metrics context", func() {
			Expect(marshaller.Emit().Name).To(Equal("dropsondeMarshaller"))
		})

		It("emits a heartbeat counter", func() {
			envelope := &events.Envelope{
				Origin:    proto.String("fake-origin-3"),
				EventType: events.Envelope_Heartbeat.Enum(),
				Heartbeat: factories.NewHeartbeat(1, 2, 3),
			}

			inputChan <- envelope
			testhelpers.EventuallyExpectMetric(marshaller, "heartbeatMarshalled", 1)
		})

		It("emits a marshal error counter", func() {
			envelope := &events.Envelope{}