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