Files
cloud-services/services/ota_update_go/handlers/ecu_stats_get_test.go

72 lines
2.4 KiB
Go

package handlers_test
import (
"github.com/fiskerinc/cloud-services/pkg/clickhouse"
"github.com/fiskerinc/cloud-services/pkg/common"
"github.com/stretchr/testify/assert"
"net/http"
"net/http/httptest"
"otaupdate/handlers"
"otaupdate/services"
"testing"
)
func TestHandleECUStatsGetList(t *testing.T) {
validQuery := "?min_out_of_range_pct=10&min_zero_pct=0.009&hours=160&vins=TREXTEST7TUR9NXGC&vins=TREXTEST5T61T1BR2&dbcs=73583d63735b404f5209a71107c3d2174b0ab1ba40bd826b8cb69668598b0395&ecus=ADAS&ecus=ICC&ecus=TREX"
tests := map[string]struct {
q string
conn clickhouse.ConnInterface
expStatus int
expBody string
}{
"correct": {
q: validQuery,
conn: &clickhouse.MockConn{ExpectedResult: []common.ECUStat{
{
ECUName: "ADAS",
IncorrectValues: 1,
AllZero: 1,
ECUSignalsTotal: 231,
SignalsTotal: 2221,
IncorrectPercent: 0.04,
ZeroPercent: 0.003,
},
{
ECUName: "TREX",
IncorrectValues: 0,
AllZero: 0,
ECUSignalsTotal: 77,
SignalsTotal: 9789,
IncorrectPercent: 0.55,
ZeroPercent: 0.36,
},
}},
expStatus: http.StatusOK,
expBody: `{"data":[{"ecu_name":"ADAS","signals_w_incorrect_values":1,"signals_all_zero":1,"number_of_ecu_signals":231,"total_signal_records":2221,"incorrect_val_signal_pct":0.04,"zero_signals_pct":0.003},{"ecu_name":"TREX","signals_w_incorrect_values":0,"signals_all_zero":0,"number_of_ecu_signals":77,"total_signal_records":9789,"incorrect_val_signal_pct":0.55,"zero_signals_pct":0.36}]}`,
},
"failed_filter": {
q: "",
expStatus: http.StatusBadRequest,
expBody: `{"message":"MinOutOfRangePct required. MinZeroPct required. Hours required. VINs required. DBCs required. ECUs required","error":"Bad Request"}`,
},
"failed_query": {
q: validQuery,
conn: &clickhouse.MockConn{ExpectedResult: someErr},
expStatus: http.StatusServiceUnavailable,
expBody: `{"message":"json: cannot unmarshal object into Go value of type []common.ECUStat","error":"Service Unavailable"}`,
},
}
for tname, tt := range tests {
t.Run(tname, func(t *testing.T) {
services.SetClickhouseConn(tt.conn)
w := httptest.NewRecorder()
r := httptest.NewRequest(http.MethodGet, "http://example.com/ecu_stats"+tt.q, nil)
handlers.HandleECUStatsGetList(w, r)
assert.Equal(t, tt.expStatus, w.Code)
assert.Equal(t, tt.expBody, w.Body.String())
})
}
}