github.com/jshiv/can-go@v0.2.1-0.20210224011015-069e90e90bdf/pkg/candebug/http_test.go (about) 1 package candebug 2 3 import ( 4 "io/ioutil" 5 "net/http" 6 "net/http/httptest" 7 "strings" 8 "testing" 9 "time" 10 11 "go.einride.tech/can" 12 "go.einride.tech/can/pkg/descriptor" 13 "go.einride.tech/can/pkg/generated" 14 "gotest.tools/v3/assert" 15 ) 16 17 func TestServeMessagesHTTP_Single(t *testing.T) { 18 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 19 ServeMessagesHTTP(w, r, []generated.Message{ 20 &testMessage{ 21 frame: can.Frame{ID: 100, Length: 1}, 22 descriptor: newDriverHeartbeatDescriptor(), 23 }, 24 }) 25 })) 26 res, err := http.Get(ts.URL) 27 assert.NilError(t, err) 28 response, err := ioutil.ReadAll(res.Body) 29 assert.NilError(t, err) 30 assert.NilError(t, res.Body.Close()) 31 const expected = ` 32 DriverHeartbeat 33 =============== 34 ID: 100 (0x64) 35 Sender: DRIVER 36 SendType: Cyclic 37 CycleTime: 100ms 38 DelayTime: 2s 39 =============== 40 Command: 0 (0x0) None 41 ` 42 assert.Equal(t, strings.TrimSpace(expected), string(response)) 43 } 44 45 func TestServeMessagesHTTP_Multi(t *testing.T) { 46 ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 47 ServeMessagesHTTP(w, r, []generated.Message{ 48 &testMessage{ 49 frame: can.Frame{ID: 100, Length: 1}, 50 descriptor: newDriverHeartbeatDescriptor(), 51 }, 52 &testMessage{ 53 frame: can.Frame{ID: 100, Length: 1, Data: can.Data{0x01}}, 54 descriptor: newDriverHeartbeatDescriptor(), 55 }, 56 }) 57 })) 58 res, err := http.Get(ts.URL) 59 assert.NilError(t, err) 60 response, err := ioutil.ReadAll(res.Body) 61 assert.NilError(t, err) 62 assert.NilError(t, res.Body.Close()) 63 const expected = ` 64 DriverHeartbeat 65 =============== 66 ID: 100 (0x64) 67 Sender: DRIVER 68 SendType: Cyclic 69 CycleTime: 100ms 70 DelayTime: 2s 71 =============== 72 Command: 0 (0x0) None 73 74 75 DriverHeartbeat 76 =============== 77 ID: 100 (0x64) 78 Sender: DRIVER 79 SendType: Cyclic 80 CycleTime: 100ms 81 DelayTime: 2s 82 =============== 83 Command: 1 (0x1) Sync 84 ` 85 assert.Equal(t, strings.TrimSpace(expected), string(response)) 86 } 87 88 type testMessage struct { 89 frame can.Frame 90 descriptor *descriptor.Message 91 } 92 93 func (m *testMessage) Frame() can.Frame { 94 return m.frame 95 } 96 97 func (m *testMessage) Descriptor() *descriptor.Message { 98 return m.descriptor 99 } 100 101 func (m *testMessage) MarshalFrame() (can.Frame, error) { 102 panic("should not be called") 103 } 104 105 func (testMessage) Reset() { 106 panic("should not be called") 107 } 108 109 func (testMessage) String() string { 110 panic("should not be called") 111 } 112 113 func (testMessage) UnmarshalFrame(can.Frame) error { 114 panic("should not be called") 115 } 116 117 func newDriverHeartbeatDescriptor() *descriptor.Message { 118 return &descriptor.Message{ 119 Name: "DriverHeartbeat", 120 SenderNode: "DRIVER", 121 ID: 100, 122 Length: 1, 123 Description: "Sync message used to synchronize the controllers", 124 SendType: descriptor.SendTypeCyclic, 125 CycleTime: 100 * time.Millisecond, 126 DelayTime: 2 * time.Second, 127 Signals: []*descriptor.Signal{ 128 { 129 Name: "Command", 130 Start: 0, 131 Length: 8, 132 Scale: 1, 133 ValueDescriptions: []*descriptor.ValueDescription{ 134 {Value: 0, Description: "None"}, 135 {Value: 1, Description: "Sync"}, 136 {Value: 2, Description: "Reboot"}, 137 }, 138 ReceiverNodes: []string{"SENSOR", "MOTOR"}, 139 }, 140 }, 141 } 142 }