github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/nomad/stream/ndjson_test.go (about) 1 package stream 2 3 import ( 4 "bytes" 5 "context" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/require" 10 ) 11 12 type testObj struct { 13 Name string `json:"name"` 14 } 15 16 func TestJsonStream(t *testing.T) { 17 t.Parallel() 18 19 ctx, cancel := context.WithCancel(context.Background()) 20 defer cancel() 21 22 s := NewJsonStream(ctx, 1*time.Second) 23 out := s.OutCh() 24 25 require.NoError(t, s.Send(testObj{Name: "test"})) 26 27 out1 := <-out 28 29 var expected bytes.Buffer 30 expected.Write([]byte(`{"name":"test"}`)) 31 32 require.Equal(t, expected.Bytes(), out1.Data) 33 select { 34 case msg := <-out: 35 require.Failf(t, "Did not expect another message", "%#v", msg) 36 case <-time.After(100 * time.Millisecond): 37 } 38 39 require.NoError(t, s.Send(testObj{Name: "test2"})) 40 41 out2 := <-out 42 expected.Reset() 43 44 expected.Write([]byte(`{"name":"test2"}`)) 45 require.Equal(t, expected.Bytes(), out2.Data) 46 47 } 48 49 func TestJson_Send_After_Stop(t *testing.T) { 50 t.Parallel() 51 52 ctx, cancel := context.WithCancel(context.Background()) 53 defer cancel() 54 55 s := NewJsonStream(ctx, 1*time.Second) 56 57 // stop the stream 58 cancel() 59 60 time.Sleep(10 * time.Millisecond) 61 require.Error(t, s.Send(testObj{})) 62 } 63 64 func TestJson_HeartBeat(t *testing.T) { 65 t.Parallel() 66 67 ctx, cancel := context.WithCancel(context.Background()) 68 defer cancel() 69 70 s := NewJsonStream(ctx, 10*time.Millisecond) 71 72 out := s.OutCh() 73 heartbeat := <-out 74 75 require.Equal(t, JsonHeartbeat, heartbeat) 76 }