Files
koolnova2mqtt/watcher/watcher_test.go
Javier Peletier 4662308fd0 initial commit
2020-12-11 15:39:11 +01:00

88 lines
1.7 KiB
Go

package watcher_test
import (
"errors"
"koolnova2mqtt/watcher"
"testing"
"github.com/epiclabs-io/ut"
)
func TestWatcher(tx *testing.T) {
t := ut.BeginTest(tx, false)
defer t.FinishTest()
var r []byte
var readRegisterError error = nil
readRegister := func(slaveID byte, address uint16, quantity uint16) (results []byte, err error) {
return r, readRegisterError
}
w := watcher.New(&watcher.Config{
Address: 1000,
Quantity: 5,
RegisterSize: 2,
SlaveID: 1,
Read: readRegister,
})
var cbAddress uint16
var callbackCount int
w.RegisterCallback(1000, func(address uint16) {
cbAddress = address
callbackCount++
})
w.RegisterCallback(1004, func(address uint16) {
callbackCount++
})
r = []byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
value, err := w.ReadRegister(1001)
t.MustFailWith(err, watcher.ErrUninitialized)
t.Equals([]byte(nil), value)
err = w.Poll()
t.Ok(err)
t.Equals(2, callbackCount)
value, err = w.ReadRegister(1001)
t.Ok(err)
t.Equals([]byte{3, 4}, value)
_, err = w.ReadRegister(200)
t.MustFailWith(err, watcher.ErrAddressOutOfRange)
_, err = w.ReadRegister(5000)
t.MustFailWith(err, watcher.ErrAddressOutOfRange)
callbackCount = 0
err = w.Poll()
t.Ok(err)
t.Equals(callbackCount, 0)
r = []byte{79, 82, 3, 4, 5, 6, 7, 8, 9, 10}
callbackCount = 0
err = w.Poll()
t.Ok(err)
t.Equals(1, callbackCount)
t.Equals(uint16(1000), cbAddress)
cbNewValue, err := w.ReadRegister(cbAddress)
t.Ok(err)
t.Equals([]byte{79, 82}, cbNewValue)
r = []byte{1, 2}
err = w.Poll()
t.MustFailWith(err, watcher.ErrIncorrectRegisterSize)
readRegisterError = errors.New("error")
err = w.Poll()
t.MustFail(err, "expected Poll() to fail if readRegister returns error")
}