You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2023/04/14 09:54:15 UTC
[plc4x] branch develop updated (51d75e2cf0 -> 30f1122aa9)
This is an automated email from the ASF dual-hosted git repository.
sruehl pushed a change to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git
from 51d75e2cf0 build(deps): bump hivemq-mqtt-client from 1.3.0 to 1.3.1 (#896)
new 34cf92fbb7 fix(plc4go/cbus): fix wrong query string
new 4eb09f8b70 refactor(plc4go/cbus): use *MessageCodec
new 30f1122aa9 test(plc4go/cbus): add test for reader
The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
plc4go/internal/cbus/Connection.go | 12 +-
plc4go/internal/cbus/Connection_test.go | 56 ++---
plc4go/internal/cbus/Query.go | 18 +-
plc4go/internal/cbus/Query_test.go | 396 ++++++++++++++++++++++++++++++++
plc4go/internal/cbus/Reader.go | 6 +-
plc4go/internal/cbus/Reader_test.go | 226 ++++++++++++++++++
plc4go/internal/cbus/Writer.go | 6 +-
7 files changed, 673 insertions(+), 47 deletions(-)
create mode 100644 plc4go/internal/cbus/Query_test.go
create mode 100644 plc4go/internal/cbus/Reader_test.go
[plc4x] 01/03: fix(plc4go/cbus): fix wrong query string
Posted by sr...@apache.org.
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 34cf92fbb72881c5e024a0ff3ff739a11e8d58ee
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Thu Apr 13 20:01:13 2023 +0200
fix(plc4go/cbus): fix wrong query string
---
plc4go/internal/cbus/Query.go | 18 +-
plc4go/internal/cbus/Query_test.go | 396 +++++++++++++++++++++++++++++++++++++
2 files changed, 405 insertions(+), 9 deletions(-)
diff --git a/plc4go/internal/cbus/Query.go b/plc4go/internal/cbus/Query.go
index 11eea3838a..c5e204dff8 100644
--- a/plc4go/internal/cbus/Query.go
+++ b/plc4go/internal/cbus/Query.go
@@ -62,7 +62,7 @@ func (u unitInfoQuery) GetQueryString() string {
}
attributeString := "*"
if u.attribute != nil {
- unitAddressString = u.attribute.String()
+ attributeString = u.attribute.String()
}
return fmt.Sprintf("cal/%s/identify=%s", unitAddressString, attributeString)
}
@@ -72,15 +72,15 @@ func (u unitInfoQuery) GetValueType() values.PlcValueType {
}
func (u unitInfoQuery) GetArrayInfo() []apiModel.ArrayInfo {
- if u.numElements != 1 {
- return []apiModel.ArrayInfo{
- spiModel.DefaultArrayInfo{
- LowerBound: 0,
- UpperBound: uint32(u.numElements),
- },
- }
+ if u.numElements == 1 {
+ return []apiModel.ArrayInfo{}
+ }
+ return []apiModel.ArrayInfo{
+ spiModel.DefaultArrayInfo{
+ LowerBound: 0,
+ UpperBound: uint32(u.numElements),
+ },
}
- return []apiModel.ArrayInfo{}
}
func (u unitInfoQuery) GetTagType() TagType {
diff --git a/plc4go/internal/cbus/Query_test.go b/plc4go/internal/cbus/Query_test.go
new file mode 100644
index 0000000000..27fbdb33d2
--- /dev/null
+++ b/plc4go/internal/cbus/Query_test.go
@@ -0,0 +1,396 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package cbus
+
+import (
+ "context"
+ "fmt"
+ apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
+ "github.com/apache/plc4x/plc4go/pkg/api/values"
+ readWriteModel "github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model"
+ spiModel "github.com/apache/plc4x/plc4go/spi/model"
+ "github.com/apache/plc4x/plc4go/spi/utils"
+ "github.com/stretchr/testify/assert"
+ "testing"
+)
+
+func TestNewUnitInfoQuery(t *testing.T) {
+ type args struct {
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ args args
+ want UnitInfoQuery
+ }{
+ {
+ name: "empty",
+ want: &unitInfoQuery{
+ tagType: 0xc,
+ unitAddress: nil,
+ attribute: nil,
+ numElements: 0,
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ assert.Equalf(t, tt.want, NewUnitInfoQuery(tt.args.unitAddress, tt.args.attribute, tt.args.numElements), "NewUnitInfoQuery(%v, %v, %v)", tt.args.unitAddress, tt.args.attribute, tt.args.numElements)
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetArrayInfo(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want []apiModel.ArrayInfo
+ }{
+ {
+ name: "just get",
+ fields: fields{
+ numElements: 1,
+ },
+ want: []apiModel.ArrayInfo{},
+ },
+ {
+ name: "just get",
+ fields: fields{
+ numElements: 2,
+ },
+ want: []apiModel.ArrayInfo{
+ spiModel.DefaultArrayInfo{
+ LowerBound: 0,
+ UpperBound: 2,
+ },
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetArrayInfo(), "GetArrayInfo()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetAttribute(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want *readWriteModel.Attribute
+ }{
+ {
+ name: "just get",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetAttribute(), "GetAttribute()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetQueryString(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want string
+ }{
+ {
+ name: "just get",
+ want: "cal/*/identify=*",
+ },
+ {
+ name: "get with unit",
+ fields: fields{
+ unitAddress: readWriteModel.NewUnitAddress(13),
+ },
+ want: "cal/13/identify=*",
+ },
+ {
+ name: "get with unit and attribute",
+ fields: fields{
+ unitAddress: readWriteModel.NewUnitAddress(13),
+ attribute: func() *readWriteModel.Attribute {
+ var attr = readWriteModel.Attribute_MaximumLevels
+ return &attr
+ }(),
+ },
+ want: "cal/13/identify=MaximumLevels",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetQueryString(), "GetQueryString()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetTagType(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want TagType
+ }{
+ {
+ name: "just get",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetTagType(), "GetTagType()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetUnitAddress(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want readWriteModel.UnitAddress
+ }{
+ {
+ name: "just get",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetUnitAddress(), "GetUnitAddress()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_GetValueType(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want values.PlcValueType
+ }{
+ {
+ name: "just get",
+ want: values.Struct,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.GetValueType(), "GetValueType()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_Serialize(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want []byte
+ wantErr assert.ErrorAssertionFunc
+ }{
+ {
+ name: "just serialize",
+ fields: fields{
+ tagType: UNIT_INFO,
+ },
+ wantErr: assert.NoError,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ got, err := u.Serialize()
+ if !tt.wantErr(t, err, fmt.Sprintf("Serialize()")) {
+ return
+ }
+ assert.Equalf(t, tt.want, got, "Serialize()")
+ })
+ }
+}
+
+func Test_unitInfoQuery_SerializeWithWriteBuffer(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ type args struct {
+ ctx context.Context
+ writeBuffer utils.WriteBuffer
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ wantErr assert.ErrorAssertionFunc
+ }{
+ {
+ name: "just get",
+ fields: fields{
+ tagType: UNIT_INFO,
+ },
+ args: args{
+ ctx: context.Background(),
+ writeBuffer: utils.NewJsonWriteBuffer(),
+ },
+ wantErr: assert.NoError,
+ },
+ {
+ name: "just get with unit and attribute",
+ fields: fields{
+ tagType: UNIT_INFO,
+ unitAddress: readWriteModel.NewUnitAddress(13),
+ attribute: func() *readWriteModel.Attribute {
+ var attr = readWriteModel.Attribute_MaximumLevels
+ return &attr
+ }(),
+ },
+ args: args{
+ ctx: context.Background(),
+ writeBuffer: utils.NewJsonWriteBuffer(),
+ },
+ wantErr: assert.NoError,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ tt.wantErr(t, u.SerializeWithWriteBuffer(tt.args.ctx, tt.args.writeBuffer), fmt.Sprintf("SerializeWithWriteBuffer(%v, %v)", tt.args.ctx, tt.args.writeBuffer))
+ })
+ }
+}
+
+func Test_unitInfoQuery_String(t *testing.T) {
+ type fields struct {
+ tagType TagType
+ unitAddress readWriteModel.UnitAddress
+ attribute *readWriteModel.Attribute
+ numElements uint16
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want string
+ }{
+ {
+ name: "just get",
+ want: "<nil>",
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ u := unitInfoQuery{
+ tagType: tt.fields.tagType,
+ unitAddress: tt.fields.unitAddress,
+ attribute: tt.fields.attribute,
+ numElements: tt.fields.numElements,
+ }
+ assert.Equalf(t, tt.want, u.String(), "String()")
+ })
+ }
+}
[plc4x] 02/03: refactor(plc4go/cbus): use *MessageCodec
Posted by sr...@apache.org.
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 4eb09f8b70ad2367b5c23765ed8fd83bc00b70b3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Apr 14 11:53:54 2023 +0200
refactor(plc4go/cbus): use *MessageCodec
---
plc4go/internal/cbus/Connection.go | 12 +++----
plc4go/internal/cbus/Connection_test.go | 56 ++++++++++++++++++---------------
plc4go/internal/cbus/Reader.go | 6 ++--
plc4go/internal/cbus/Writer.go | 6 ++--
4 files changed, 42 insertions(+), 38 deletions(-)
diff --git a/plc4go/internal/cbus/Connection.go b/plc4go/internal/cbus/Connection.go
index 4bcd215992..3f989c3253 100644
--- a/plc4go/internal/cbus/Connection.go
+++ b/plc4go/internal/cbus/Connection.go
@@ -56,7 +56,7 @@ func (t *AlphaGenerator) getAndIncrement() byte {
type Connection struct {
_default.DefaultConnection
alphaGenerator AlphaGenerator
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
@@ -67,7 +67,7 @@ type Connection struct {
tracer *spi.Tracer
}
-func NewConnection(messageCodec spi.MessageCodec, configuration Configuration, driverContext DriverContext, tagHandler spi.PlcTagHandler, tm spi.RequestTransactionManager, options map[string][]string) *Connection {
+func NewConnection(messageCodec *MessageCodec, configuration Configuration, driverContext DriverContext, tagHandler spi.PlcTagHandler, tm spi.RequestTransactionManager, options map[string][]string) *Connection {
connection := &Connection{
alphaGenerator: AlphaGenerator{currentAlpha: 'g'},
messageCodec: messageCodec,
@@ -177,8 +177,8 @@ func (c *Connection) String() string {
}
func (c *Connection) setupConnection(ctx context.Context, ch chan plc4go.PlcConnectionConnectResult) {
- cbusOptions := &c.messageCodec.(*MessageCodec).cbusOptions
- requestContext := &c.messageCodec.(*MessageCodec).requestContext
+ cbusOptions := &c.messageCodec.cbusOptions
+ requestContext := &c.messageCodec.requestContext
if !c.sendReset(ctx, ch, cbusOptions, requestContext, false) {
log.Warn().Msg("First reset failed")
@@ -213,7 +213,7 @@ func (c *Connection) startSubscriptionHandler() {
go func() {
log.Debug().Msg("SAL handler stated")
for c.IsConnected() {
- for monitoredSal := range c.messageCodec.(*MessageCodec).monitoredSALs {
+ for monitoredSal := range c.messageCodec.monitoredSALs {
for _, subscriber := range c.subscribers {
if ok := subscriber.handleMonitoredSal(monitoredSal); ok {
log.Debug().Msgf("%v handled\n%s", subscriber, monitoredSal)
@@ -227,7 +227,7 @@ func (c *Connection) startSubscriptionHandler() {
go func() {
log.Debug().Msg("default MMI started")
for c.IsConnected() {
- for calReply := range c.messageCodec.(*MessageCodec).monitoredMMIs {
+ for calReply := range c.messageCodec.monitoredMMIs {
for _, subscriber := range c.subscribers {
if ok := subscriber.handleMonitoredMMI(calReply); ok {
log.Debug().Msgf("%v handled\n%s", subscriber, calReply)
diff --git a/plc4go/internal/cbus/Connection_test.go b/plc4go/internal/cbus/Connection_test.go
index 1413aa998a..6e9e1a83a7 100644
--- a/plc4go/internal/cbus/Connection_test.go
+++ b/plc4go/internal/cbus/Connection_test.go
@@ -82,7 +82,7 @@ func TestAlphaGenerator_getAndIncrement_Turnaround(t *testing.T) {
func TestConnection_BrowseRequestBuilder(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -125,7 +125,7 @@ func TestConnection_BrowseRequestBuilder(t *testing.T) {
func TestConnection_ConnectWithContext(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -209,7 +209,7 @@ func TestConnection_ConnectWithContext(t *testing.T) {
func TestConnection_GetConnection(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -249,7 +249,7 @@ func TestConnection_GetConnection(t *testing.T) {
func TestConnection_GetConnectionId(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -286,7 +286,7 @@ func TestConnection_GetConnectionId(t *testing.T) {
func TestConnection_GetMessageCodec(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -300,7 +300,11 @@ func TestConnection_GetMessageCodec(t *testing.T) {
want spi.MessageCodec
}{
{
- name: "just nil",
+ name: "just get",
+ fields: fields{
+ messageCodec: &MessageCodec{},
+ },
+ want: &MessageCodec{},
},
}
for _, tt := range tests {
@@ -323,7 +327,7 @@ func TestConnection_GetMessageCodec(t *testing.T) {
func TestConnection_GetMetadata(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -367,7 +371,7 @@ func TestConnection_GetMetadata(t *testing.T) {
func TestConnection_GetTracer(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -404,7 +408,7 @@ func TestConnection_GetTracer(t *testing.T) {
func TestConnection_IsTraceEnabled(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -441,7 +445,7 @@ func TestConnection_IsTraceEnabled(t *testing.T) {
func TestConnection_ReadRequestBuilder(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -484,7 +488,7 @@ func TestConnection_ReadRequestBuilder(t *testing.T) {
func TestConnection_String(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -522,7 +526,7 @@ func TestConnection_String(t *testing.T) {
func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -565,7 +569,7 @@ func TestConnection_SubscriptionRequestBuilder(t *testing.T) {
func TestConnection_UnsubscriptionRequestBuilder(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -600,7 +604,7 @@ func TestConnection_UnsubscriptionRequestBuilder(t *testing.T) {
func TestConnection_WriteRequestBuilder(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -643,7 +647,7 @@ func TestConnection_WriteRequestBuilder(t *testing.T) {
func TestConnection_addSubscriber(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -698,7 +702,7 @@ func TestConnection_addSubscriber(t *testing.T) {
func TestConnection_fireConnected(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -760,7 +764,7 @@ func TestConnection_fireConnected(t *testing.T) {
func TestConnection_fireConnectionError(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -841,7 +845,7 @@ func TestConnection_fireConnectionError(t *testing.T) {
func TestConnection_sendCalDataWrite(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -914,7 +918,7 @@ func TestConnection_sendCalDataWrite(t *testing.T) {
func TestConnection_sendReset(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -985,7 +989,7 @@ func TestConnection_sendReset(t *testing.T) {
func TestConnection_setApplicationFilter(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1054,7 +1058,7 @@ func TestConnection_setApplicationFilter(t *testing.T) {
func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1123,7 +1127,7 @@ func TestConnection_setInterface1PowerUpSettings(t *testing.T) {
func TestConnection_setInterfaceOptions1(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1192,7 +1196,7 @@ func TestConnection_setInterfaceOptions1(t *testing.T) {
func TestConnection_setInterfaceOptions3(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1261,7 +1265,7 @@ func TestConnection_setInterfaceOptions3(t *testing.T) {
func TestConnection_setupConnection(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1627,7 +1631,7 @@ func TestConnection_setupConnection(t *testing.T) {
func TestConnection_startSubscriptionHandler(t *testing.T) {
type fields struct {
DefaultConnection _default.DefaultConnection
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
subscribers []*Subscriber
tm spi.RequestTransactionManager
configuration Configuration
@@ -1703,7 +1707,7 @@ func TestConnection_startSubscriptionHandler(t *testing.T) {
func TestNewConnection(t *testing.T) {
type args struct {
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
configuration Configuration
driverContext DriverContext
tagHandler spi.PlcTagHandler
diff --git a/plc4go/internal/cbus/Reader.go b/plc4go/internal/cbus/Reader.go
index 952f639e23..41c59e6ee2 100644
--- a/plc4go/internal/cbus/Reader.go
+++ b/plc4go/internal/cbus/Reader.go
@@ -35,11 +35,11 @@ import (
type Reader struct {
alphaGenerator *AlphaGenerator
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
tm spi.RequestTransactionManager
}
-func NewReader(tpduGenerator *AlphaGenerator, messageCodec spi.MessageCodec, tm spi.RequestTransactionManager) *Reader {
+func NewReader(tpduGenerator *AlphaGenerator, messageCodec *MessageCodec, tm spi.RequestTransactionManager) *Reader {
return &Reader{
alphaGenerator: tpduGenerator,
messageCodec: messageCodec,
@@ -67,7 +67,7 @@ func (m *Reader) readSync(ctx context.Context, readRequest apiModel.PlcReadReque
messages := make(map[string]readWriteModel.CBusMessage)
for _, tagName := range readRequest.GetTagNames() {
tag := readRequest.GetTag(tagName)
- message, supportsRead, _, _, err := TagToCBusMessage(tag, nil, m.alphaGenerator, m.messageCodec.(*MessageCodec))
+ message, supportsRead, _, _, err := TagToCBusMessage(tag, nil, m.alphaGenerator, m.messageCodec)
if !supportsRead {
result <- &spiModel.DefaultPlcReadRequestResult{
Request: readRequest,
diff --git a/plc4go/internal/cbus/Writer.go b/plc4go/internal/cbus/Writer.go
index 9029551317..bf7e7f0a06 100644
--- a/plc4go/internal/cbus/Writer.go
+++ b/plc4go/internal/cbus/Writer.go
@@ -34,11 +34,11 @@ import (
type Writer struct {
alphaGenerator *AlphaGenerator
- messageCodec spi.MessageCodec
+ messageCodec *MessageCodec
tm spi.RequestTransactionManager
}
-func NewWriter(tpduGenerator *AlphaGenerator, messageCodec spi.MessageCodec, tm spi.RequestTransactionManager) Writer {
+func NewWriter(tpduGenerator *AlphaGenerator, messageCodec *MessageCodec, tm spi.RequestTransactionManager) Writer {
return Writer{
alphaGenerator: tpduGenerator,
messageCodec: messageCodec,
@@ -64,7 +64,7 @@ func (m Writer) Write(ctx context.Context, writeRequest apiModel.PlcWriteRequest
for _, tagName := range writeRequest.GetTagNames() {
tag := writeRequest.GetTag(tagName)
plcValue := writeRequest.GetValue(tagName)
- message, _, supportsWrite, _, err := TagToCBusMessage(tag, plcValue, m.alphaGenerator, m.messageCodec.(*MessageCodec))
+ message, _, supportsWrite, _, err := TagToCBusMessage(tag, plcValue, m.alphaGenerator, m.messageCodec)
if !supportsWrite {
result <- &spiModel.DefaultPlcWriteRequestResult{
Request: writeRequest,
[plc4x] 03/03: test(plc4go/cbus): add test for reader
Posted by sr...@apache.org.
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 30f1122aa97a3ebfb62fb8839a44d83f83db19c8
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Apr 14 11:54:02 2023 +0200
test(plc4go/cbus): add test for reader
---
plc4go/internal/cbus/Reader_test.go | 226 ++++++++++++++++++++++++++++++++++++
1 file changed, 226 insertions(+)
diff --git a/plc4go/internal/cbus/Reader_test.go b/plc4go/internal/cbus/Reader_test.go
new file mode 100644
index 0000000000..afb49c04e7
--- /dev/null
+++ b/plc4go/internal/cbus/Reader_test.go
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package cbus
+
+import (
+ "context"
+ apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
+ readWriteModel "github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model"
+ "github.com/apache/plc4x/plc4go/spi"
+ spiModel "github.com/apache/plc4x/plc4go/spi/model"
+ "github.com/stretchr/testify/assert"
+ "strings"
+ "testing"
+ "time"
+)
+
+func TestNewReader(t *testing.T) {
+ type args struct {
+ tpduGenerator *AlphaGenerator
+ messageCodec *MessageCodec
+ tm spi.RequestTransactionManager
+ }
+ tests := []struct {
+ name string
+ args args
+ want *Reader
+ }{
+ {
+ name: "create a new one",
+ want: &Reader{
+ alphaGenerator: nil,
+ messageCodec: nil,
+ tm: nil,
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ assert.Equalf(t, tt.want, NewReader(tt.args.tpduGenerator, tt.args.messageCodec, tt.args.tm), "NewReader(%v, %v, %v)", tt.args.tpduGenerator, tt.args.messageCodec, tt.args.tm)
+ })
+ }
+}
+
+func TestReader_Read(t *testing.T) {
+ type fields struct {
+ alphaGenerator *AlphaGenerator
+ messageCodec *MessageCodec
+ tm spi.RequestTransactionManager
+ }
+ type args struct {
+ ctx context.Context
+ readRequest apiModel.PlcReadRequest
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ wantAsserter func(t *testing.T, results <-chan apiModel.PlcReadRequestResult) bool
+ }{
+ {
+ name: "read and bail",
+ args: args{
+ ctx: context.Background(),
+ readRequest: spiModel.NewDefaultPlcReadRequest(nil, func() []string {
+ return strings.Split(strings.Repeat("asd,", 40), ",")
+ }(), nil, nil),
+ },
+ wantAsserter: func(t *testing.T, results <-chan apiModel.PlcReadRequestResult) bool {
+ timer := time.NewTimer(2 * time.Second)
+ defer timer.Stop()
+ select {
+ case <-timer.C:
+ t.Fail()
+ case result := <-results:
+ assert.NotNil(t, result.GetErr())
+ }
+ return true
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ m := &Reader{
+ alphaGenerator: tt.fields.alphaGenerator,
+ messageCodec: tt.fields.messageCodec,
+ tm: tt.fields.tm,
+ }
+ assert.Truef(t, tt.wantAsserter(t, m.Read(tt.args.ctx, tt.args.readRequest)), "Read(%v, %v)", tt.args.ctx, tt.args.readRequest)
+ })
+ }
+}
+
+func TestReader_readSync(t *testing.T) {
+ type fields struct {
+ alphaGenerator *AlphaGenerator
+ messageCodec *MessageCodec
+ tm spi.RequestTransactionManager
+ }
+ type args struct {
+ ctx context.Context
+ readRequest apiModel.PlcReadRequest
+ result chan apiModel.PlcReadRequestResult
+ }
+ tests := []struct {
+ name string
+ fields fields
+ args args
+ resultEvaluator func(t *testing.T, results chan apiModel.PlcReadRequestResult) bool
+ }{
+ {
+ name: "too many tags",
+ args: args{
+ ctx: context.Background(),
+ readRequest: spiModel.NewDefaultPlcReadRequest(nil, func() []string {
+ return strings.Split(strings.Repeat("asd,", 40), ",")
+ }(), nil, nil),
+ result: make(chan apiModel.PlcReadRequestResult, 1),
+ },
+ resultEvaluator: func(t *testing.T, results chan apiModel.PlcReadRequestResult) bool {
+ timer := time.NewTimer(2 * time.Second)
+ defer timer.Stop()
+ select {
+ case <-timer.C:
+ t.Fail()
+ case result := <-results:
+ assert.NotNil(t, result.GetErr())
+ }
+ return true
+ },
+ },
+ {
+ name: "read something without any tag",
+ args: args{
+ ctx: context.Background(),
+ readRequest: spiModel.NewDefaultPlcReadRequest(
+ map[string]apiModel.PlcTag{},
+ []string{},
+ nil,
+ nil,
+ ),
+ result: make(chan apiModel.PlcReadRequestResult, 1),
+ },
+ resultEvaluator: func(t *testing.T, results chan apiModel.PlcReadRequestResult) bool {
+ timer := time.NewTimer(2 * time.Second)
+ defer timer.Stop()
+ select {
+ case <-timer.C:
+ t.Fail()
+ case result := <-results:
+ assert.Nil(t, result.GetErr())
+ assert.NotNil(t, result.GetResponse())
+ }
+ return true
+ },
+ },
+ {
+ name: "read something",
+ fields: fields{
+ alphaGenerator: &AlphaGenerator{currentAlpha: 'g'},
+ messageCodec: &MessageCodec{
+ requestContext: readWriteModel.NewRequestContext(false),
+ cbusOptions: readWriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false),
+ },
+ tm: spi.NewRequestTransactionManager(10),
+ },
+ args: args{
+ ctx: func() context.Context {
+ timeout, cancel := context.WithTimeout(context.Background(), 2*time.Second)
+ t.Cleanup(cancel)
+ return timeout
+ }(),
+ readRequest: spiModel.NewDefaultPlcReadRequest(
+ map[string]apiModel.PlcTag{
+ "blub": NewCALIdentifyTag(nil, nil, readWriteModel.Attribute_Manufacturer, 1),
+ },
+ []string{
+ "blub",
+ },
+ nil,
+ nil,
+ ),
+ result: make(chan apiModel.PlcReadRequestResult, 1),
+ },
+ resultEvaluator: func(t *testing.T, results chan apiModel.PlcReadRequestResult) bool {
+ timer := time.NewTimer(2 * time.Second)
+ defer timer.Stop()
+ select {
+ case <-timer.C:
+ t.Fail()
+ case result := <-results:
+ assert.Nil(t, result.GetErr())
+ assert.NotNil(t, result.GetResponse())
+ }
+ return true
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ m := &Reader{
+ alphaGenerator: tt.fields.alphaGenerator,
+ messageCodec: tt.fields.messageCodec,
+ tm: tt.fields.tm,
+ }
+ m.readSync(tt.args.ctx, tt.args.readRequest, tt.args.result)
+ assert.True(t, tt.resultEvaluator(t, tt.args.result))
+ })
+ }
+}