99 lines
2.1 KiB
Go
99 lines
2.1 KiB
Go
package crm3000
|
|
|
|
import (
|
|
"encoding/hex"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
|
|
"src.dualinventive.com/go/dinet"
|
|
"src.dualinventive.com/go/dinet/rpc"
|
|
|
|
"src.dualinventive.com/go/lib/dilog"
|
|
)
|
|
|
|
//suppressed because these specifically are assigned once and are to be considered constant.
|
|
//nolint:gochecknoglobals
|
|
var (
|
|
testHexPayloadWithoutImei []byte
|
|
testHexPayloadWithImei []byte
|
|
)
|
|
|
|
func TestMain(m *testing.M) {
|
|
testHexPayloadWithoutImei = readTestData("testdata/payload_noimei_v1.0.2.hex")
|
|
testHexPayloadWithImei = readTestData("testdata/payload_imei_v1.0.2.hex")
|
|
|
|
os.Exit(m.Run())
|
|
}
|
|
|
|
func readTestData(filepath string) []byte {
|
|
//nolint:gosec
|
|
hexBytes, err := ioutil.ReadFile(filepath)
|
|
if err != nil {
|
|
fmt.Println("failed to read testdata")
|
|
os.Exit(1)
|
|
}
|
|
data, err := hex.DecodeString(string(hexBytes))
|
|
if err != nil {
|
|
fmt.Println("failed to decode testdata")
|
|
os.Exit(1)
|
|
}
|
|
return data
|
|
}
|
|
|
|
//nolint:dupl
|
|
func TestHandle_withImeiInPayload_doesOverwriteImei(t *testing.T) {
|
|
pd, transport := dinet.NewParentDeviceMock(t)
|
|
payload := testHexPayloadWithImei
|
|
|
|
h := NewSensorMessageHandler(dilog.NewTestLogger(t), pd)
|
|
|
|
done := make(chan []*rpc.Msg, 1)
|
|
go listTransport(transport, 2*time.Second, done)
|
|
|
|
h.Handle(payload, "test-imei")
|
|
|
|
rpcs := <-done
|
|
assert.Len(t, rpcs, 1)
|
|
assert.Equal(t, rpcs[0].DeviceUID, "04000000000000000863703039106237")
|
|
}
|
|
|
|
//nolint:dupl
|
|
func TestHandle_withoutImeiInPayload_doesNotOverwriteImei(t *testing.T) {
|
|
pd, transport := dinet.NewParentDeviceMock(t)
|
|
payload := testHexPayloadWithoutImei
|
|
|
|
h := NewSensorMessageHandler(dilog.NewTestLogger(t), pd)
|
|
|
|
done := make(chan []*rpc.Msg, 1)
|
|
go listTransport(transport, 2*time.Second, done)
|
|
|
|
h.Handle(payload, "test-imei")
|
|
|
|
rpcs := <-done
|
|
assert.Len(t, rpcs, 1)
|
|
assert.Equal(t, rpcs[0].DeviceUID, "04000000000000000000000test-imei")
|
|
}
|
|
|
|
//nolint: dupl
|
|
func listTransport(transport *dinet.TestTransport, timeout time.Duration, done chan []*rpc.Msg) {
|
|
var rpcs []*rpc.Msg
|
|
for {
|
|
to := false
|
|
select {
|
|
case msg := <-transport.Read:
|
|
rpcs = append(rpcs, msg)
|
|
case <-time.Tick(timeout):
|
|
to = true
|
|
}
|
|
if to {
|
|
break
|
|
}
|
|
}
|
|
done <- rpcs
|
|
}
|