This is an automated email from the ASF dual-hosted git repository.

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 60955cc3ce89b534fb6247542740d75bae9e1b98
Author: Sebastian Rühl <[email protected]>
AuthorDate: Wed Apr 5 11:55:39 2023 +0200

    test(plc4go/cbus): improved test for MessageCodec
---
 plc4go/internal/cbus/MessageCodec.go      |   5 +-
 plc4go/internal/cbus/MessageCodec_test.go | 443 +++++++++++++++++++++++++++++-
 2 files changed, 444 insertions(+), 4 deletions(-)

diff --git a/plc4go/internal/cbus/MessageCodec.go 
b/plc4go/internal/cbus/MessageCodec.go
index 66568ec09b..b04e14334b 100644
--- a/plc4go/internal/cbus/MessageCodec.go
+++ b/plc4go/internal/cbus/MessageCodec.go
@@ -63,7 +63,10 @@ func (m *MessageCodec) GetCodec() spi.MessageCodec {
 func (m *MessageCodec) Send(message spi.Message) error {
        log.Trace().Msg("Sending message")
        // Cast the message to the correct type of struct
-       cbusMessage := message.(readWriteModel.CBusMessage)
+       cbusMessage, ok := message.(readWriteModel.CBusMessage)
+       if !ok {
+               return errors.Errorf("Invalid message type %T", message)
+       }
 
        // Set the right request context
        m.requestContext = CreateRequestContext(cbusMessage)
diff --git a/plc4go/internal/cbus/MessageCodec_test.go 
b/plc4go/internal/cbus/MessageCodec_test.go
index 6d07340b16..dcec75f184 100644
--- a/plc4go/internal/cbus/MessageCodec_test.go
+++ b/plc4go/internal/cbus/MessageCodec_test.go
@@ -50,7 +50,22 @@ func TestMessageCodec_Send(t *testing.T) {
                args    args
                wantErr assert.ErrorAssertionFunc
        }{
-               // TODO: Add test cases.
+               {
+                       name:    "send nothing",
+                       wantErr: assert.Error,
+               },
+               {
+                       name: "a cbus message",
+                       fields: fields{
+                               DefaultCodec: 
NewMessageCodec(test.NewTransportInstance(test.NewTransport())),
+                       },
+                       args: args{message: 
readWriteModel.NewCBusMessageToClient(
+                               
readWriteModel.NewReplyOrConfirmationConfirmation(
+                                       
readWriteModel.NewConfirmation(readWriteModel.NewAlpha('!'), nil, 
readWriteModel.ConfirmationType_CHECKSUM_FAILURE), nil, 0x00, nil, nil,
+                               ), nil, nil,
+                       )},
+                       wantErr: assert.NoError,
+               },
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
@@ -70,6 +85,9 @@ func TestMessageCodec_Send(t *testing.T) {
 }
 
 func TestMessageCodec_Receive(t *testing.T) {
+       requestContext := readWriteModel.NewRequestContext(false)
+       cbusOptions := readWriteModel.NewCBusOptions(false, false, false, 
false, false, false, false, false, false)
+
        type fields struct {
                DefaultCodec                  _default.DefaultCodec
                requestContext                readWriteModel.RequestContext
@@ -94,8 +112,8 @@ func TestMessageCodec_Receive(t *testing.T) {
                                        transportInstance := 
test.NewTransportInstance(transport)
                                        return transportInstance
                                }()),
-                               requestContext:                nil,
-                               cbusOptions:                   nil,
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
                                monitoredMMIs:                 nil,
                                monitoredSALs:                 nil,
                                lastPackageHash:               0,
@@ -104,6 +122,420 @@ func TestMessageCodec_Receive(t *testing.T) {
                        },
                        wantErr: assert.Error,
                },
+               {
+                       name: "checksum error",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("!")); err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               0,
+                               currentlyReportedServerErrors: 0,
+                       },
+                       want: readWriteModel.NewCBusMessageToClient(
+                               readWriteModel.NewServerErrorReply(
+                                       33, cbusOptions, requestContext,
+                               ),
+                               requestContext, cbusOptions,
+                       ),
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "A21 echo",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("@A62120\r@A62120\r")); err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               0,
+                               currentlyReportedServerErrors: 0,
+                       },
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "garbage",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("what on earth\n\r")); err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               0,
+                               currentlyReportedServerErrors: 0,
+                       },
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "error encountered multiple time",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("AFFE!!!\r")); err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               9999,
+                               currentlyReportedServerErrors: 0,
+                       },
+                       want: readWriteModel.NewCBusMessageToClient(
+                               readWriteModel.NewServerErrorReply(
+                                       33, cbusOptions, requestContext,
+                               ),
+                               requestContext, cbusOptions,
+                       ),
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "error encountered and reported multiple time",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("@1A2001!!!\r")); err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               9999,
+                               currentlyReportedServerErrors: 9999,
+                       },
+                       want: readWriteModel.NewCBusMessageToServer(
+                               readWriteModel.NewRequestDirectCommandAccess(
+                                       readWriteModel.NewCALDataRecall(
+                                               
readWriteModel.Parameter_UNKNOWN_33,
+                                               1,
+                                               
readWriteModel.CALCommandTypeContainer_CALCommandRecall,
+                                               nil,
+                                               nil,
+                                       ),
+                                       nil,
+                                       
readWriteModel.RequestType_DIRECT_COMMAND,
+                                       nil,
+                                       nil,
+                                       64,
+                                       readWriteModel.NewRequestTermination(),
+                                       cbusOptions,
+                               ),
+                               requestContext, cbusOptions,
+                       ),
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "mmi",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("86040200F940380001000000000000000008000000000000000000000000FA\r\n"));
 err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               9999,
+                               currentlyReportedServerErrors: 9999,
+                       },
+                       want: readWriteModel.NewCBusMessageToClient(
+                               readWriteModel.NewReplyOrConfirmationReply(
+                                       readWriteModel.NewReplyEncodedReply(
+                                               
readWriteModel.NewEncodedReplyCALReply(
+                                                       
readWriteModel.NewCALReplyLong(
+                                                               262656,
+                                                               
readWriteModel.NewUnitAddress(4),
+                                                               nil,
+                                                               
readWriteModel.NewSerialInterfaceAddress(2),
+                                                               func() *byte {
+                                                                       var b 
byte = 0
+                                                                       return 
&b
+                                                               }(),
+                                                               nil,
+                                                               134,
+                                                               
readWriteModel.NewCALDataStatusExtended(
+                                                                       64,
+                                                                       56,
+                                                                       0,
+                                                                       
[]readWriteModel.StatusByte{
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_ON,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_OFF,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                               
readWriteModel.NewStatusByte(
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
        readWriteModel.GAVState_DOES_NOT_EXIST,
+                                                                               
),
+                                                                       },
+                                                                       nil,
+                                                                       249,
+                                                                       nil,
+                                                                       
requestContext,
+                                                               ),
+                                                               cbusOptions,
+                                                               requestContext,
+                                                       ),
+                                                       134,
+                                                       cbusOptions,
+                                                       requestContext,
+                                               ),
+                                               nil,
+                                               56,
+                                               cbusOptions,
+                                               requestContext,
+                                       ),
+                                       readWriteModel.NewResponseTermination(),
+                                       56,
+                                       cbusOptions,
+                                       requestContext,
+                               ),
+                               requestContext, cbusOptions,
+                       ),
+                       wantErr: assert.NoError,
+               },
+               {
+                       name: "sal",
+                       fields: fields{
+                               DefaultCodec: NewMessageCodec(func() 
transports.TransportInstance {
+                                       transport := test.NewTransport()
+                                       transportInstance := 
test.NewTransportInstance(transport)
+                                       if err := 
transportInstance.FillReadBuffer([]byte("0531AC0079042F0401430316000011\r\n")); 
err != nil {
+                                               t.Error(err)
+                                               return nil
+                                       }
+                                       return transportInstance
+                               }()),
+                               requestContext:                requestContext,
+                               cbusOptions:                   cbusOptions,
+                               monitoredMMIs:                 nil,
+                               monitoredSALs:                 nil,
+                               lastPackageHash:               0,
+                               hashEncountered:               9999,
+                               currentlyReportedServerErrors: 9999,
+                       },
+                       want: readWriteModel.NewCBusMessageToClient(
+                               readWriteModel.NewReplyOrConfirmationReply(
+                                       readWriteModel.NewReplyEncodedReply(
+                                               
readWriteModel.NewMonitoredSALReply(
+                                                       
readWriteModel.NewMonitoredSALLongFormSmartMode(
+                                                               3255296,
+                                                               
readWriteModel.NewUnitAddress(49),
+                                                               nil,
+                                                               172,
+                                                               func() *byte {
+                                                                       var b 
byte = 0
+                                                                       return 
&b
+                                                               }(),
+                                                               nil,
+                                                               
readWriteModel.NewSALDataAirConditioning(
+                                                                       
readWriteModel.NewAirConditioningDataSetZoneGroupOn(
+                                                                               
4,
+                                                                               
readWriteModel.AirConditioningCommandTypeContainer_AirConditioningCommandSetZoneGroupOn,
+                                                                       ),
+                                                                       
readWriteModel.NewSALDataAirConditioning(
+                                                                               
readWriteModel.NewAirConditioningDataSetZoneHvacMode(
+                                                                               
        4,
+                                                                               
        readWriteModel.NewHVACZoneList(false, false, false, false, false, 
false, false, true),
+                                                                               
        readWriteModel.NewHVACModeAndFlags(true, false, false, false, 
readWriteModel.HVACModeAndFlagsMode_HEAT_AND_COOL),
+                                                                               
        3,
+                                                                               
        readWriteModel.NewHVACTemperature(5632),
+                                                                               
        nil,
+                                                                               
        readWriteModel.NewHVACAuxiliaryLevel(false, 0),
+                                                                               
        
readWriteModel.AirConditioningCommandTypeContainer_AirConditioningCommandSetZoneHvacMode,
+                                                                               
),
+                                                                               
nil,
+                                                                       ),
+                                                               ),
+                                                               5,
+                                                               cbusOptions,
+                                                       ),
+                                                       5,
+                                                       cbusOptions,
+                                                       requestContext,
+                                               ),
+                                               nil,
+                                               48,
+                                               cbusOptions,
+                                               requestContext,
+                                       ),
+                                       readWriteModel.NewResponseTermination(),
+                                       48,
+                                       cbusOptions,
+                                       requestContext,
+                               ),
+                               requestContext, cbusOptions,
+                       ),
+                       wantErr: assert.NoError,
+               },
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
@@ -262,6 +694,11 @@ func TestNewMessageCodec(t *testing.T) {
        }
 }
 
+func TestMessageCodec_GetCodec(t *testing.T) {
+       // just a useless test...
+       (&MessageCodec{}).GetCodec()
+}
+
 func Test_extractMMIAndSAL(t *testing.T) {
        type args struct {
                codec   _default.DefaultCodecRequirements

Reply via email to