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  }