Skip to content

Commit

Permalink
feat(plc4go/cbus): added more Stringer implementations
Browse files Browse the repository at this point in the history
  • Loading branch information
sruehl committed Jun 13, 2023
1 parent caa9718 commit 5422176
Show file tree
Hide file tree
Showing 9 changed files with 270 additions and 100 deletions.
5 changes: 5 additions & 0 deletions plc4go/internal/cbus/Configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
package cbus

import (
"fmt"
"github.com/rs/zerolog"
"reflect"
"strconv"
Expand Down Expand Up @@ -98,3 +99,7 @@ func getFromOptions(localLog zerolog.Logger, options map[string][]string, key st
}
return ""
}

func (c Configuration) String() string {
return fmt.Sprintf("%#v", c)
}
60 changes: 60 additions & 0 deletions plc4go/internal/cbus/Configuration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -201,3 +201,63 @@ func Test_getFromOptions(t *testing.T) {
})
}
}

func TestConfiguration_String(t *testing.T) {
type fields struct {
Srchk bool
Exstat bool
Pun bool
LocalSal bool
Pcn bool
Idmon bool
Monitor bool
Smart bool
XonXoff bool
Connect bool
MonitoredApplication1 byte
MonitoredApplication2 byte
}
tests := []struct {
name string
fields fields
want string
}{
{
name: "string it",
fields: fields{
Srchk: true,
Exstat: true,
Pun: true,
LocalSal: true,
Pcn: true,
Idmon: true,
Monitor: true,
Smart: true,
XonXoff: true,
Connect: true,
MonitoredApplication1: 2,
MonitoredApplication2: 3,
},
want: "cbus.Configuration{Srchk:true, Exstat:true, Pun:true, LocalSal:true, Pcn:true, Idmon:true, Monitor:true, Smart:true, XonXoff:true, Connect:true, MonitoredApplication1:0x2, MonitoredApplication2:0x3}",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := Configuration{
Srchk: tt.fields.Srchk,
Exstat: tt.fields.Exstat,
Pun: tt.fields.Pun,
LocalSal: tt.fields.LocalSal,
Pcn: tt.fields.Pcn,
Idmon: tt.fields.Idmon,
Monitor: tt.fields.Monitor,
Smart: tt.fields.Smart,
XonXoff: tt.fields.XonXoff,
Connect: tt.fields.Connect,
MonitoredApplication1: tt.fields.MonitoredApplication1,
MonitoredApplication2: tt.fields.MonitoredApplication2,
}
assert.Equalf(t, tt.want, c.String(), "String()")
})
}
}
46 changes: 42 additions & 4 deletions plc4go/internal/cbus/Connection.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/tracer"
"github.com/apache/plc4x/plc4go/spi/transactions"
"github.com/rs/zerolog"
"github.com/rs/zerolog/log"
"runtime/debug"
"sync"
"time"
Expand Down Expand Up @@ -57,6 +58,10 @@ func (t *AlphaGenerator) getAndIncrement() byte {
return result
}

func (t *AlphaGenerator) String() string {
return fmt.Sprintf("AlphaGenerator(currentAlpha: %c)", t.currentAlpha)
}

type Connection struct {
_default.DefaultConnection
alphaGenerator AlphaGenerator
Expand Down Expand Up @@ -166,7 +171,11 @@ func (c *Connection) WriteRequestBuilder() apiModel.PlcWriteRequestBuilder {
}

func (c *Connection) SubscriptionRequestBuilder() apiModel.PlcSubscriptionRequestBuilder {
return spiModel.NewDefaultPlcSubscriptionRequestBuilder(c.GetPlcTagHandler(), c.GetPlcValueHandler(), NewSubscriber(c, options.WithCustomLogger(c.log)))
return spiModel.NewDefaultPlcSubscriptionRequestBuilder(
c.GetPlcTagHandler(),
c.GetPlcValueHandler(),
NewSubscriber(c.addSubscriber, options.WithCustomLogger(c.log)),
)
}

func (c *Connection) UnsubscriptionRequestBuilder() apiModel.PlcUnsubscriptionRequestBuilder {
Expand All @@ -189,7 +198,28 @@ func (c *Connection) addSubscriber(subscriber *Subscriber) {
}

func (c *Connection) String() string {
return fmt.Sprintf("cbus.Connection")
return fmt.Sprintf(
"cbus.Connection{\n"+
"\tDefaultConnection: %s,\n"+
"\tAlphaGenerator: %s\n"+
"\tMessageCodec: %s\n"+
"\tsubscribers: %s\n"+
"\ttm: %s\n"+
"\tconfiguration: %s\n"+
"\tdriverContext: %s\n"+
"\tconnectionId: %s\n"+
"\ttracer: %s\n"+
"}",
c.DefaultConnection,
&c.alphaGenerator,
c.messageCodec,
c.subscribers,
c.tm,
c.configuration,
c.driverContext,
c.connectionId,
c.tracer,
)
}

func (c *Connection) setupConnection(ctx context.Context, ch chan plc4go.PlcConnectionConnectResult) {
Expand Down Expand Up @@ -235,12 +265,16 @@ func (c *Connection) startSubscriptionHandler() {
c.log.Debug().Msg("SAL handler stated")
for c.IsConnected() {
for monitoredSal := range c.messageCodec.monitoredSALs {
handled := false
for _, subscriber := range c.subscribers {
if ok := subscriber.handleMonitoredSAL(monitoredSal); ok {
c.log.Debug().Msgf("%v handled\n%s", subscriber, monitoredSal)
continue
handled = true
}
}
if !handled {
log.Debug().Msgf("SAL was not handled:\n%s", monitoredSal)
}
}
}
c.log.Info().Msg("Ending SAL handler")
Expand All @@ -255,12 +289,16 @@ func (c *Connection) startSubscriptionHandler() {
c.log.Debug().Msg("default MMI started")
for c.IsConnected() {
for calReply := range c.messageCodec.monitoredMMIs {
handled := false
for _, subscriber := range c.subscribers {
if ok := subscriber.handleMonitoredMMI(calReply); ok {
c.log.Debug().Msgf("%v handled\n%s", subscriber, calReply)
continue
handled = true
}
}
if !handled {
log.Debug().Msgf("MMI was not handled:\n%s", calReply)
}
}
}
c.log.Info().Msg("Ending MMI handler")
Expand Down
11 changes: 10 additions & 1 deletion plc4go/internal/cbus/Connection_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -539,7 +539,16 @@ func TestConnection_String(t *testing.T) {
}{
{
name: "a string",
want: "cbus.Connection",
want: "cbus.Connection{\n" +
"\tDefaultConnection: %!s(<nil>),\n" +
"\tAlphaGenerator: AlphaGenerator(currentAlpha: \x00)\n" +
"\tMessageCodec: <nil>\n" +
"\tsubscribers: []\n" +
"\ttm: %!s(<nil>)\n" +
"\tconfiguration: cbus.Configuration{Srchk:false, Exstat:false, Pun:false, LocalSal:false, Pcn:false, Idmon:false, Monitor:false, Smart:false, XonXoff:false, Connect:false, MonitoredApplication1:0x0, MonitoredApplication2:0x0}\n\tdriverContext: cbus.DriverContext{awaitSetupComplete:false, awaitDisconnectComplete:false}\n" +
"\tconnectionId: \n" +
"\ttracer: <nil>\n" +
"}",
},
}
for _, tt := range tests {
Expand Down
6 changes: 6 additions & 0 deletions plc4go/internal/cbus/DriverContext.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@

package cbus

import "fmt"

type DriverContext struct {
awaitSetupComplete bool
awaitDisconnectComplete bool
Expand All @@ -27,3 +29,7 @@ type DriverContext struct {
func NewDriverContext(_ Configuration) DriverContext {
return DriverContext{}
}

func (d DriverContext) String() string {
return fmt.Sprintf("%#v", d)
}
21 changes: 21 additions & 0 deletions plc4go/internal/cbus/MessageCodec.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package cbus

import (
"bufio"
"fmt"
"github.com/apache/plc4x/plc4go/spi/options"
"github.com/rs/zerolog"
"hash/crc32"
Expand Down Expand Up @@ -322,6 +323,26 @@ lookingForTheEnd:
return cBusMessage, nil
}

func (m *MessageCodec) String() string {
return fmt.Sprintf("MessageCodec{\n"+
"\tDefaultCodec: %s,\n"+
"\trequestContext: %s,\n"+
"\tcbusOptions: %s,\n"+
"\tmonitoredMMIs: %d elements,\n"+
"\tmonitoredSALs: %d elements,\n"+
"\tlastPackageHash: %d,\n"+
"\thashEncountered: %d,\n"+
"}",
m.DefaultCodec,
m.requestContext,
m.cbusOptions,
len(m.monitoredSALs),
len(m.monitoredSALs),
m.lastPackageHash,
m.hashEncountered,
)
}

func extractMMIAndSAL(log zerolog.Logger) _default.CustomMessageHandler {
return func(codec _default.DefaultCodecRequirements, message spi.Message) bool {
log.Trace().Msgf("Custom handling message:\n%s", message)
Expand Down
49 changes: 49 additions & 0 deletions plc4go/internal/cbus/MessageCodec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"github.com/apache/plc4x/plc4go/spi/testutils"
"github.com/apache/plc4x/plc4go/spi/transports"
"github.com/apache/plc4x/plc4go/spi/transports/test"
"github.com/rs/zerolog"
"github.com/stretchr/testify/assert"
"testing"
)
Expand Down Expand Up @@ -878,3 +879,51 @@ func Test_extractMMIAndSAL(t *testing.T) {
})
}
}

func TestMessageCodec_String(t *testing.T) {
type fields struct {
DefaultCodec _default.DefaultCodec
requestContext readWriteModel.RequestContext
cbusOptions readWriteModel.CBusOptions
monitoredMMIs chan readWriteModel.CALReply
monitoredSALs chan readWriteModel.MonitoredSAL
lastPackageHash uint32
hashEncountered uint
currentlyReportedServerErrors uint
log zerolog.Logger
}
tests := []struct {
name string
fields fields
want string
}{
{
name: "string it",
want: "MessageCodec{\n" +
"\tDefaultCodec: %!s(<nil>),\n" +
"\trequestContext: %!s(<nil>),\n" +
"\tcbusOptions: %!s(<nil>),\n" +
"\tmonitoredMMIs: 0 elements,\n" +
"\tmonitoredSALs: 0 elements,\n" +
"\tlastPackageHash: 0,\n" +
"\thashEncountered: 0,\n" +
"}",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
m := &MessageCodec{
DefaultCodec: tt.fields.DefaultCodec,
requestContext: tt.fields.requestContext,
cbusOptions: tt.fields.cbusOptions,
monitoredMMIs: tt.fields.monitoredMMIs,
monitoredSALs: tt.fields.monitoredSALs,
lastPackageHash: tt.fields.lastPackageHash,
hashEncountered: tt.fields.hashEncountered,
currentlyReportedServerErrors: tt.fields.currentlyReportedServerErrors,
log: tt.fields.log,
}
assert.Equalf(t, tt.want, m.String(), "String()")
})
}
}
Loading

0 comments on commit 5422176

Please sign in to comment.