github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/nomad/stream/ndjson_test.go (about) 1 package stream 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/hashicorp/nomad/ci" 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 ci.Parallel(t) 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 initialHeartbeat := <-out 28 require.Equal(t, []byte(`{}`), initialHeartbeat.Data) 29 30 testMessage1 := <-out 31 require.Equal(t, []byte(`{"name":"test"}`), testMessage1.Data) 32 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 testMessage2 := <-out 42 require.Equal(t, []byte(`{"name":"test2"}`), testMessage2.Data) 43 } 44 45 func TestJson_Send_After_Stop(t *testing.T) { 46 ci.Parallel(t) 47 48 ctx, cancel := context.WithCancel(context.Background()) 49 defer cancel() 50 51 s := NewJsonStream(ctx, 1*time.Second) 52 53 // stop the stream 54 cancel() 55 56 time.Sleep(10 * time.Millisecond) 57 require.Error(t, s.Send(testObj{})) 58 } 59 60 func TestJson_HeartBeat(t *testing.T) { 61 ci.Parallel(t) 62 63 ctx, cancel := context.WithCancel(context.Background()) 64 defer cancel() 65 66 s := NewJsonStream(ctx, 10*time.Millisecond) 67 68 out := s.OutCh() 69 heartbeat := <-out 70 71 require.Equal(t, JsonHeartbeat, heartbeat) 72 }