113 lines
4.0 KiB
Go
113 lines
4.0 KiB
Go
package device
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
"src.dualinventive.com/go/dinet/rpc"
|
|
"src.dualinventive.com/go/dinet/rts"
|
|
"src.dualinventive.com/go/lib/kv"
|
|
)
|
|
|
|
func TestNew(t *testing.T) {
|
|
ramKV, err := kv.New(kv.TypeRAM, "")
|
|
require.Nil(t, err)
|
|
|
|
c := New(ramKV, 10, 2*time.Second)
|
|
require.NotNil(t, c)
|
|
assert.Equal(t, ramKV, c.r)
|
|
|
|
deviceUID := "01552211552266995588774455226622"
|
|
|
|
// Fill the ram kv
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "sensor:1:info",
|
|
`{"label":"bat1-voltage","last_update":1517914855147,"time":1517914854889,"type":"number","uid":1}`))
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "sensor:10:info",
|
|
`{"enum":{"charging":2,"connected":1,"disconnected":0,"error":3},"label":"charger1-state","last_update"
|
|
:1517914855150,"time":1517914854889,"type":"enum","uid":10}`))
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:100:info",
|
|
`{"label":"du-detection","last_update":1517914855553,"time":1517914855337,"type":"bool","uid":100}`))
|
|
// Invalid uid
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:bots:info",
|
|
`{"label":"du-bots","last_update":1517914855553,"time":1517914855337,"type":"bool","uid":"bots"}`))
|
|
// Invalid JSON
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:101:info",
|
|
`bla`))
|
|
// No label
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:102:info",
|
|
`{"last_update":1517914855553,"time":1517914855337,"type":"bool","uid":102}`))
|
|
// Empty label
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:103:info",
|
|
`{"label":"", "last_update":1517914855553,"time":1517914855337,"type":"bool","uid":103}`))
|
|
// No type
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "notify:104:info",
|
|
`{"label":"type", "last_update":1517914855553,"time":1517914855337,"uid":104}`))
|
|
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, "sensor:1:data",
|
|
`{"uid":1,"time":1519141031661,"value":12.107519149780273,"last_update":1519141031326}`))
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, string(rpc.ClassMethodDeviceInfo),
|
|
`{"last_update":1519137369375,"revision":3,"time":1519137368544,"type":"tws-3000-duu","version":"0.8.0"}`))
|
|
|
|
rd, err := c.Device(deviceUID)
|
|
require.Nil(t, err)
|
|
assert.Equal(t, "tws-3000-duu", rd.Type)
|
|
require.Equal(t, 2, len(rd.SensorFields))
|
|
require.Equal(t, 1, len(rd.NotifyFields))
|
|
s, ok := rd.SensorFields[1]
|
|
require.True(t, ok)
|
|
assert.Equal(t, "bat1-voltage", s.Label)
|
|
assert.Equal(t, "number", s.Type)
|
|
|
|
s, ok = rd.SensorFields[10]
|
|
require.True(t, ok)
|
|
assert.Equal(t, "charger1-state", s.Label)
|
|
assert.Equal(t, "enum", s.Type)
|
|
|
|
s, ok = rd.NotifyFields[100]
|
|
require.True(t, ok)
|
|
assert.Equal(t, "du-detection", s.Label)
|
|
assert.Equal(t, "bool", s.Type)
|
|
|
|
// Update cache
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, string(rpc.ClassMethodDeviceInfo),
|
|
`{"last_update":1519137369375,"revision":3,"time":1519137368544,"type":"tws-3000-wum","version":"0.8.0"}`))
|
|
// Cache is not updated
|
|
rd, err = c.Device(deviceUID)
|
|
require.Nil(t, err)
|
|
assert.Equal(t, "tws-3000-duu", rd.Type)
|
|
|
|
time.Sleep(2 * time.Second)
|
|
// Cache is updated
|
|
rd, err = c.Device(deviceUID)
|
|
require.Nil(t, err)
|
|
assert.Equal(t, "tws-3000-wum", rd.Type)
|
|
}
|
|
|
|
func TestGetDeviceTypeFromRedis(t *testing.T) {
|
|
ramKV, err := kv.New(kv.TypeRAM, "")
|
|
require.Nil(t, err)
|
|
|
|
c := New(ramKV, 10, 2*time.Second)
|
|
require.NotNil(t, c)
|
|
|
|
deviceUID := "01552211552266995588774455226622"
|
|
|
|
// No json
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, string(rpc.ClassMethodDeviceInfo),
|
|
`info`))
|
|
|
|
s, err := c.getDeviceTypeFromRedis(deviceUID)
|
|
assert.Equal(t, "", s)
|
|
assert.Error(t, err, "invalid character 'i' looking for beginning of value")
|
|
|
|
// No type
|
|
require.Nil(t, ramKV.HSet(rts.KeyPrefixDevice+deviceUID, string(rpc.ClassMethodDeviceInfo),
|
|
`{"last_update":1519137369375,"revision":3,"time":1519137368544,"version":"0.8.0"}`))
|
|
|
|
s, err = c.getDeviceTypeFromRedis(deviceUID)
|
|
assert.Equal(t, "", s)
|
|
assert.Error(t, err, "no type in device:info")
|
|
}
|