github.com/simpleiot/simpleiot@v0.18.3/modbus/reg_test.go (about) 1 package modbus 2 3 import ( 4 "errors" 5 "testing" 6 ) 7 8 func TestCoil(t *testing.T) { 9 regs := Regs{} 10 regs.AddCoil(128) // add register 8 for coil 128 11 err := regs.WriteCoil(128, true) 12 if err != nil { 13 t.Error("Error writing coil") 14 } 15 16 reg, err := regs.ReadReg(8) 17 if err != nil { 18 t.Error(err) 19 } 20 21 if reg&0x1 != 0x1 { 22 t.Error("expected bit 1 to be high") 23 } 24 25 err = regs.WriteCoil(128, false) 26 if err != nil { 27 t.Error("Error writing coil") 28 } 29 30 reg, err = regs.ReadReg(8) 31 if err != nil { 32 t.Error(err) 33 } 34 35 if reg != 0 { 36 t.Errorf("Expected reg to be 0, got 0x%x\n", reg) 37 } 38 } 39 40 func TestRegValidator(t *testing.T) { 41 regs := Regs{} 42 43 // add a register with a validator 44 regs.AddReg(13, 1) 45 err := regs.AddRegValueValidator(13, func(u uint16) bool { return u < 10 }) 46 if err != nil { 47 t.Errorf("Expected no error, but got: %v", err) 48 } 49 50 // add another register without a validator 51 regs.AddReg(14, 1) 52 53 // add a validator on a register that does not exist (should return an error) 54 err = regs.AddRegValueValidator(15, func(_ uint16) bool { return true }) 55 if !errors.Is(err, ErrUnknownRegister) { 56 t.Errorf("Expected error to be ErrUnknownRegister") 57 } 58 59 // check if write fails correctly the value is invalid 60 err = regs.WriteReg(13, 10) 61 if !errors.Is(err, ExcIllegalValue) { 62 t.Error("Expected error to be ExcIllegalValue") 63 } 64 65 // check if write succeeds if the value is valid 66 err = regs.WriteReg(13, 9) 67 if err != nil { 68 t.Errorf("Expected no error, but got: %v", err) 69 } 70 71 // no validator here, just make sure everything works without validators 72 err = regs.WriteReg(14, 10) 73 if err != nil { 74 t.Errorf("Expected no error, but got: %v", err) 75 } 76 }