src.dualinventive.com/go/nbiot-interface/internal/device/crm3000/crm3000_test.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
}