github.com/jasonkeene/cli@v6.14.1-0.20160816203908-ca5715166dfb+incompatible/cf/api/logs/noaa_message_queue_test.go (about)

     1  package logs_test
     2  
     3  import (
     4  	. "github.com/cloudfoundry/cli/cf/api/logs"
     5  	"github.com/cloudfoundry/sonde-go/events"
     6  	"github.com/gogo/protobuf/proto"
     7  	. "github.com/onsi/ginkgo"
     8  	. "github.com/onsi/gomega"
     9  )
    10  
    11  var _ = Describe("NoaaMessageQueue", func() {
    12  	It("sorts messages based on their timestamp, clearing after it's enumerated over", func() {
    13  		pq := NewNoaaMessageQueue()
    14  
    15  		msg3 := noaaMessageWithTime("message 3", 130)
    16  		msg2 := noaaMessageWithTime("message 2", 120)
    17  		msg4 := noaaMessageWithTime("message 4", 140)
    18  		msg1 := noaaMessageWithTime("message 1", 110)
    19  
    20  		pq.PushMessage(msg3)
    21  		pq.PushMessage(msg2)
    22  		pq.PushMessage(msg4)
    23  		pq.PushMessage(msg1)
    24  
    25  		var messages []*events.LogMessage
    26  
    27  		pq.EnumerateAndClear(func(m *events.LogMessage) {
    28  			messages = append(messages, m)
    29  		})
    30  
    31  		Expect(messages).To(Equal([]*events.LogMessage{
    32  			msg1,
    33  			msg2,
    34  			msg3,
    35  			msg4,
    36  		}))
    37  
    38  		var messagesAfter []*events.LogMessage
    39  
    40  		pq.EnumerateAndClear(func(m *events.LogMessage) {
    41  			messagesAfter = append(messagesAfter, m)
    42  		})
    43  
    44  		Expect(messagesAfter).To(BeEmpty())
    45  	})
    46  })
    47  
    48  func noaaMessageWithTime(messageString string, timestamp int) *events.LogMessage {
    49  	return generateNoaaMessage(messageString, int64(timestamp))
    50  }
    51  
    52  func generateNoaaMessage(messageString string, timestamp int64) *events.LogMessage {
    53  	messageType := events.LogMessage_OUT
    54  	sourceType := "DEA"
    55  	return &events.LogMessage{
    56  		Message:     []byte(messageString),
    57  		AppId:       proto.String("my-app-guid"),
    58  		MessageType: &messageType,
    59  		SourceType:  &sourceType,
    60  		Timestamp:   proto.Int64(timestamp),
    61  	}
    62  }