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


The following commit(s) were added to refs/heads/develop by this push:
     new eecde5a63d fix(plc4go/cbus): fix broken wildcards
eecde5a63d is described below

commit eecde5a63d11cf1ca37640e755d74cb5879e141f
Author: Sebastian Rühl <[email protected]>
AuthorDate: Tue Apr 4 10:40:18 2023 +0200

    fix(plc4go/cbus): fix broken wildcards
---
 plc4go/internal/cbus/Browser.go         |   2 +-
 plc4go/internal/cbus/Query.go           |  12 +-
 plc4go/internal/cbus/TagHandler.go      | 152 ++++++++++--------------
 plc4go/internal/cbus/TagHandler_test.go | 199 ++++++++++++++++++++++++++------
 4 files changed, 233 insertions(+), 132 deletions(-)

diff --git a/plc4go/internal/cbus/Browser.go b/plc4go/internal/cbus/Browser.go
index 9a032139be..0266e591c1 100644
--- a/plc4go/internal/cbus/Browser.go
+++ b/plc4go/internal/cbus/Browser.go
@@ -60,7 +60,7 @@ func (m Browser) BrowseQuery(ctx context.Context, 
browseRequest apiModel.PlcBrow
                allAttributes := false
                var attributes []readWriteModel.Attribute
                if unitAddress := query.unitAddress; unitAddress != nil {
-                       units = append(units, *unitAddress)
+                       units = append(units, unitAddress)
                } else {
                        // TODO: check if we still want the option to brute 
force all addresses
                        installedUnitAddressBytes, err := 
m.getInstalledUnitAddressBytes(ctx)
diff --git a/plc4go/internal/cbus/Query.go b/plc4go/internal/cbus/Query.go
index 6638aab3ea..11eea3838a 100644
--- a/plc4go/internal/cbus/Query.go
+++ b/plc4go/internal/cbus/Query.go
@@ -35,11 +35,11 @@ import (
 type UnitInfoQuery interface {
        apiModel.PlcQuery
 
-       GetUnitAddress() *readWriteModel.UnitAddress
+       GetUnitAddress() readWriteModel.UnitAddress
        GetAttribute() *readWriteModel.Attribute
 }
 
-func NewUnitInfoQuery(unitAddress *readWriteModel.UnitAddress, attribute 
*readWriteModel.Attribute, numElements uint16) UnitInfoQuery {
+func NewUnitInfoQuery(unitAddress readWriteModel.UnitAddress, attribute 
*readWriteModel.Attribute, numElements uint16) UnitInfoQuery {
        return &unitInfoQuery{
                unitAddress: unitAddress,
                tagType:     UNIT_INFO,
@@ -50,7 +50,7 @@ func NewUnitInfoQuery(unitAddress 
*readWriteModel.UnitAddress, attribute *readWr
 
 type unitInfoQuery struct {
        tagType     TagType
-       unitAddress *readWriteModel.UnitAddress
+       unitAddress readWriteModel.UnitAddress
        attribute   *readWriteModel.Attribute
        numElements uint16
 }
@@ -58,7 +58,7 @@ type unitInfoQuery struct {
 func (u unitInfoQuery) GetQueryString() string {
        unitAddressString := "*"
        if u.unitAddress != nil {
-               unitAddressString = fmt.Sprintf("%d", 
(*u.unitAddress).GetAddress())
+               unitAddressString = fmt.Sprintf("%d", 
u.unitAddress.GetAddress())
        }
        attributeString := "*"
        if u.attribute != nil {
@@ -87,7 +87,7 @@ func (u unitInfoQuery) GetTagType() TagType {
        return u.tagType
 }
 
-func (u unitInfoQuery) GetUnitAddress() *readWriteModel.UnitAddress {
+func (u unitInfoQuery) GetUnitAddress() readWriteModel.UnitAddress {
        return u.unitAddress
 }
 
@@ -109,7 +109,7 @@ func (u unitInfoQuery) SerializeWithWriteBuffer(ctx 
context.Context, writeBuffer
        }
 
        if unitAddress := u.unitAddress; unitAddress != nil {
-               if err := (*unitAddress).SerializeWithWriteBuffer(ctx, 
writeBuffer); err != nil {
+               if err := unitAddress.SerializeWithWriteBuffer(ctx, 
writeBuffer); err != nil {
                        return err
                }
        }
diff --git a/plc4go/internal/cbus/TagHandler.go 
b/plc4go/internal/cbus/TagHandler.go
index 7f0e1a6c3e..14762246d7 100644
--- a/plc4go/internal/cbus/TagHandler.go
+++ b/plc4go/internal/cbus/TagHandler.go
@@ -69,9 +69,9 @@ func NewTagHandler() TagHandler {
                statusRequestPattern: 
regexp.MustCompile(`^status/(?:(?P<bridges>b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})(?:-b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})){0,5})/)?(?P<statusRequestType>(?P<binary>binary)|level=0x(?P<startingGroupAddressLabel>00|20|40|60|80|A0|C0|E0))/(?P<application>.*)$`),
                calPattern:           
regexp.MustCompile(`^cal/(?:(?P<bridges>b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})(?:-b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})){0,5})-)?(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}))/(?P<calType>reset|recall=\[(?P<recallParamNo>\w+),
 
?(?P<recallCount>\d+)]|identify=(?P<identifyAttribute>\w+)|getStatus=(?P<getStatusParamNo>\w+),
 ?(?P<getStatusCount>\d+)|write=\[(?P<writeParamNo>\w+), 
?(?P<writeCode>0[xX][0-9a-fA-F][0-9a-fA-F])]|identifyReply=(?P<replyAttribute>\w+)|r
 [...]
                salPattern:           
regexp.MustCompile(`^sal/(?:(?P<bridges>b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})(?:-b(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3})){0,5})/)?(?P<application>.*)/(?P<salCommand>.*)$`),
-               salMonitorPattern:    
regexp.MustCompile(`^salmonitor/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}))/(?P<application>.+)$`),
-               mmiMonitorPattern:    
regexp.MustCompile(`^mmimonitor/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}))/(?P<application>.+)$`),
-               unityQuery:           
regexp.MustCompile(`^info/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}))/(?P<identifyAttribute>.+)$`),
+               salMonitorPattern:    
regexp.MustCompile(`^salmonitor/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}|\*))/(?P<application>.+|\*)$`),
+               mmiMonitorPattern:    
regexp.MustCompile(`^mmimonitor/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}|\*))/(?P<application>.+|\*)$`),
+               unityQuery:           
regexp.MustCompile(`^info/(?P<unitAddress>u?(?:(?:0x)?[A-Fa-f0-9]{1,2}|\d{1,3}|\*))/(?P<identifyAttribute>.+|\*)$`),
        }
 }
 
@@ -132,7 +132,7 @@ func (m TagHandler) ParseQuery(query string) 
(apiModel.PlcQuery, error) {
 }
 
 func (m TagHandler) handleStatusRequestPattern(match map[string]string) 
(apiModel.PlcTag, error) {
-       bridgeAddresses, err := extractBridges(match)
+       bridgeAddresses, err := m.extractBridges(match)
        if err != nil {
                return nil, errors.Wrap(err, "error extracting bridges")
        }
@@ -154,7 +154,7 @@ func (m TagHandler) handleStatusRequestPattern(match 
map[string]string) (apiMode
                        return nil, errors.Errorf("Unknown 
statusRequestType%s", statusRequestArgument)
                }
        }
-       application, err := applicationIdFromArgument(match["application"])
+       application, err := m.applicationIdFromArgument(match["application"])
        if err != nil {
                return nil, errors.Wrap(err, "Error getting application id from 
argument")
        }
@@ -165,23 +165,12 @@ func (m TagHandler) handleCalPattern(match 
map[string]string) (apiModel.PlcTag,
        var unitAddress readWriteModel.UnitAddress
        unitAddressArgument := match["unitAddress"]
        unitAddressArgument = strings.TrimPrefix(unitAddressArgument, "u")
-       if strings.HasPrefix(unitAddressArgument, "0x") {
-               decodedHex, err := hex.DecodeString(unitAddressArgument[2:])
-               if err != nil {
-                       return nil, errors.Wrap(err, "Not a valid hex")
-               }
-               if len(decodedHex) != 1 {
-                       return nil, errors.Errorf("Hex must be exatly one byte")
-               }
-               unitAddress = readWriteModel.NewUnitAddress(decodedHex[0])
-       } else {
-               atoi, err := strconv.ParseUint(unitAddressArgument, 10, 8)
-               if err != nil {
-                       return nil, errors.Errorf("Unknown unit address %s", 
unitAddressArgument)
-               }
-               unitAddress = readWriteModel.NewUnitAddress(byte(atoi))
+       var err error
+       unitAddress, err = m.unitAddressFromArgument(unitAddressArgument, false)
+       if err != nil {
+               return nil, errors.Wrap(err, "error getting unit address from 
argument")
        }
-       bridgeAddresses, err := extractBridges(match)
+       bridgeAddresses, err := m.extractBridges(match)
        if err != nil {
                return nil, errors.Wrap(err, "error extracting bridges")
        }
@@ -291,11 +280,11 @@ func (m TagHandler) handleCalPattern(match 
map[string]string) (apiModel.PlcTag,
 }
 
 func (m TagHandler) handleSALPattern(match map[string]string) 
(apiModel.PlcTag, error) {
-       bridgeAddresses, err := extractBridges(match)
+       bridgeAddresses, err := m.extractBridges(match)
        if err != nil {
                return nil, errors.Wrap(err, "error extracting bridges")
        }
-       application, err := applicationIdFromArgument(match["application"])
+       application, err := m.applicationIdFromArgument(match["application"])
        if err != nil {
                return nil, errors.Wrap(err, "Error getting application id from 
argument")
        }
@@ -323,23 +312,10 @@ func (m TagHandler) handleSALMonitorPattern(match 
map[string]string) (apiModel.P
        {
                unitAddressArgument := match["unitAddress"]
                unitAddressArgument = strings.TrimPrefix(unitAddressArgument, 
"u")
-               if unitAddressArgument == "*" {
-                       unitAddress = nil
-               } else if strings.HasPrefix(unitAddressArgument, "0x") {
-                       decodedHex, err := 
hex.DecodeString(unitAddressArgument[2:])
-                       if err != nil {
-                               return nil, errors.Wrap(err, "Not a valid hex")
-                       }
-                       if len(decodedHex) != 1 {
-                               return nil, errors.Errorf("Hex must be exatly 
one byte")
-                       }
-                       unitAddress = 
readWriteModel.NewUnitAddress(decodedHex[0])
-               } else {
-                       atoi, err := strconv.ParseUint(unitAddressArgument, 10, 
8)
-                       if err != nil {
-                               return nil, errors.Errorf("Unknown unit address 
%s", unitAddressArgument)
-                       }
-                       unitAddress = readWriteModel.NewUnitAddress(byte(atoi))
+               var err error
+               unitAddress, err = 
m.unitAddressFromArgument(unitAddressArgument, true)
+               if err != nil {
+                       return nil, errors.Wrap(err, "error getting unit 
address from argument")
                }
        }
 
@@ -349,7 +325,7 @@ func (m TagHandler) handleSALMonitorPattern(match 
map[string]string) (apiModel.P
                if applicationIdArgument == "*" {
                        application = nil
                } else {
-                       applicationId, err := 
applicationIdFromArgument(applicationIdArgument)
+                       applicationId, err := 
m.applicationIdFromArgument(applicationIdArgument)
                        if err != nil {
                                return nil, errors.Wrap(err, "Error getting 
application id from argument")
                        }
@@ -365,23 +341,10 @@ func (m TagHandler) handleMMIMonitorPattern(match 
map[string]string) (apiModel.P
        {
                unitAddressArgument := match["unitAddress"]
                unitAddressArgument = strings.TrimPrefix(unitAddressArgument, 
"u")
-               if unitAddressArgument == "*" {
-                       unitAddress = nil
-               } else if strings.HasPrefix(unitAddressArgument, "0x") {
-                       decodedHex, err := 
hex.DecodeString(unitAddressArgument[2:])
-                       if err != nil {
-                               return nil, errors.Wrap(err, "Not a valid hex")
-                       }
-                       if len(decodedHex) != 1 {
-                               return nil, errors.Errorf("Hex must be exatly 
one byte")
-                       }
-                       unitAddress = 
readWriteModel.NewUnitAddress(decodedHex[0])
-               } else {
-                       atoi, err := strconv.ParseUint(unitAddressArgument, 10, 
8)
-                       if err != nil {
-                               return nil, errors.Errorf("Unknown unit address 
%s", unitAddressArgument)
-                       }
-                       unitAddress = readWriteModel.NewUnitAddress(byte(atoi))
+               var err error
+               unitAddress, err = 
m.unitAddressFromArgument(unitAddressArgument, true)
+               if err != nil {
+                       return nil, errors.Wrap(err, "error getting unit 
address from argument")
                }
        }
 
@@ -391,7 +354,7 @@ func (m TagHandler) handleMMIMonitorPattern(match 
map[string]string) (apiModel.P
                if applicationIdArgument == "*" {
                        application = nil
                } else {
-                       applicationId, err := 
applicationIdFromArgument(applicationIdArgument)
+                       applicationId, err := 
m.applicationIdFromArgument(applicationIdArgument)
                        if err != nil {
                                return nil, errors.Wrap(err, "Error getting 
application id from argument")
                        }
@@ -403,30 +366,13 @@ func (m TagHandler) handleMMIMonitorPattern(match 
map[string]string) (apiModel.P
 }
 
 func (m TagHandler) handleUnitQuery(match map[string]string) 
(apiModel.PlcQuery, error) {
-       var unitAddress *readWriteModel.UnitAddress
+       var unitAddress readWriteModel.UnitAddress
        unitAddressArgument := match["unitAddress"]
        unitAddressArgument = strings.TrimPrefix(unitAddressArgument, "u")
-       if unitAddressArgument == "*" {
-               unitAddress = nil
-       } else if strings.HasPrefix(unitAddressArgument, "0x") {
-               decodedHex, err := hex.DecodeString(unitAddressArgument[2:])
-               if err != nil {
-                       return nil, errors.Wrap(err, "Not a valid hex")
-               }
-               if len(decodedHex) != 1 {
-                       return nil, errors.Errorf("Hex must be exatly one byte")
-               }
-               var unitAddressVar readWriteModel.UnitAddress
-               unitAddressVar = readWriteModel.NewUnitAddress(decodedHex[0])
-               unitAddress = &unitAddressVar
-       } else {
-               atoi, err := strconv.ParseUint(unitAddressArgument, 10, 8)
-               if err != nil {
-                       return nil, errors.Errorf("Unknown unit address %s", 
unitAddressArgument)
-               }
-               var unitAddressVar readWriteModel.UnitAddress
-               unitAddressVar = readWriteModel.NewUnitAddress(byte(atoi))
-               unitAddress = &unitAddressVar
+       var err error
+       unitAddress, err = m.unitAddressFromArgument(unitAddressArgument, true)
+       if err != nil {
+               return nil, errors.Wrap(err, "error getting unit address from 
argument")
        }
 
        var attribute *readWriteModel.Attribute
@@ -462,7 +408,30 @@ func (m TagHandler) handleUnitQuery(match 
map[string]string) (apiModel.PlcQuery,
        return NewUnitInfoQuery(unitAddress, attribute, 1), nil
 }
 
-func applicationIdFromArgument(applicationIdArgument string) 
(readWriteModel.ApplicationIdContainer, error) {
+func (m TagHandler) unitAddressFromArgument(unitAddressArgument string, 
allowWildcard bool) (readWriteModel.UnitAddress, error) {
+       if unitAddressArgument == "*" && allowWildcard {
+               return nil, nil
+       }
+
+       if strings.HasPrefix(unitAddressArgument, "0x") {
+               decodedHex, err := hex.DecodeString(unitAddressArgument[2:])
+               if err != nil {
+                       return nil, errors.Wrap(err, "Not a valid hex")
+               }
+               if len(decodedHex) != 1 {
+                       return nil, errors.Errorf("Hex must be exatly one byte")
+               }
+               return readWriteModel.NewUnitAddress(decodedHex[0]), nil
+       }
+
+       atoi, err := strconv.ParseUint(unitAddressArgument, 10, 8)
+       if err != nil {
+               return nil, errors.Errorf("Unknown unit address %s", 
unitAddressArgument)
+       }
+       return readWriteModel.NewUnitAddress(byte(atoi)), nil
+}
+
+func (m TagHandler) applicationIdFromArgument(applicationIdArgument string) 
(readWriteModel.ApplicationIdContainer, error) {
        if strings.HasPrefix(applicationIdArgument, "0x") {
                decodedHex, err := hex.DecodeString(applicationIdArgument[2:])
                if err != nil {
@@ -473,6 +442,7 @@ func applicationIdFromArgument(applicationIdArgument 
string) (readWriteModel.App
                }
                return readWriteModel.ApplicationIdContainer(decodedHex[0]), nil
        }
+
        if atoi, err := strconv.ParseUint(applicationIdArgument, 10, 8); err == 
nil {
                return readWriteModel.ApplicationIdContainer(atoi), nil
        }
@@ -538,15 +508,7 @@ func applicationIdFromArgument(applicationIdArgument 
string) (readWriteModel.App
        }
 }
 
-func c2nl[T CommandAndArgumentsCount](t []T) []CommandAndArgumentsCount {
-       result := make([]CommandAndArgumentsCount, len(t))
-       for i, e := range t {
-               result[i] = e
-       }
-       return result
-}
-
-func extractBridges(match map[string]string) ([]readWriteModel.BridgeAddress, 
error) {
+func (m TagHandler) extractBridges(match map[string]string) 
([]readWriteModel.BridgeAddress, error) {
        var bridgeAddresses []readWriteModel.BridgeAddress
        if match["bridges"] != "" {
                for _, bridge := range strings.Split(match["bridges"], "-") {
@@ -571,3 +533,11 @@ func extractBridges(match map[string]string) 
([]readWriteModel.BridgeAddress, er
        }
        return bridgeAddresses, nil
 }
+
+func c2nl[T CommandAndArgumentsCount](t []T) []CommandAndArgumentsCount {
+       result := make([]CommandAndArgumentsCount, len(t))
+       for i, e := range t {
+               result[i] = e
+       }
+       return result
+}
diff --git a/plc4go/internal/cbus/TagHandler_test.go 
b/plc4go/internal/cbus/TagHandler_test.go
index 27f833c1ee..f1392c11a0 100644
--- a/plc4go/internal/cbus/TagHandler_test.go
+++ b/plc4go/internal/cbus/TagHandler_test.go
@@ -19,6 +19,7 @@
 package cbus
 
 import (
+       "fmt"
        apiModel "github.com/apache/plc4x/plc4go/pkg/api/model"
        readWriteModel 
"github.com/apache/plc4x/plc4go/protocols/cbus/readwrite/model"
        "github.com/stretchr/testify/assert"
@@ -107,6 +108,14 @@ func TestTagHandler_ParseTag(t *testing.T) {
                                numElements: 1,
                        },
                },
+               {
+                       name: "sal monitor all",
+                       args: args{tagAddress: "salmonitor/*/*"},
+                       want: &salMonitorTag{
+                               tagType:     SAL_MONITOR,
+                               numElements: 1,
+                       },
+               },
                {
                        name: "sal monitor",
                        args: args{tagAddress: "salmonitor/2/LIGHTING"},
@@ -120,6 +129,14 @@ func TestTagHandler_ParseTag(t *testing.T) {
                                numElements: 1,
                        },
                },
+               {
+                       name: "mmi monitor all",
+                       args: args{tagAddress: "mmimonitor/*/*"},
+                       want: &mmiMonitorTag{
+                               tagType:     MMI_STATUS_MONITOR,
+                               numElements: 1,
+                       },
+               },
                {
                        name: "mmi monitor",
                        args: args{tagAddress: "mmimonitor/2/LIGHTING"},
@@ -240,7 +257,34 @@ func TestTagHandler_ParseQuery(t *testing.T) {
                        args:    args{query: "gobblegobble"},
                        wantErr: true,
                },
-               // TODO: other cases
+               {
+                       name: "unitQuery all",
+                       args: args{
+                               query: "info/*/*",
+                       },
+                       want: &unitInfoQuery{
+                               tagType:     UNIT_INFO,
+                               unitAddress: nil,
+                               attribute:   nil,
+                               numElements: 1,
+                       },
+               },
+               {
+                       name: "unitQuery",
+                       args: args{
+                               query: "info/0x13/DSIStatus",
+                       },
+                       want: &unitInfoQuery{
+                               tagType:     UNIT_INFO,
+                               unitAddress: readWriteModel.NewUnitAddress(19),
+                               attribute: func() *readWriteModel.Attribute {
+                                       var attribute readWriteModel.Attribute
+                                       attribute = 
readWriteModel.Attribute_DSIStatus
+                                       return &attribute
+                               }(),
+                               numElements: 1,
+                       },
+               },
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
@@ -250,14 +294,14 @@ func TestTagHandler_ParseQuery(t *testing.T) {
                                t.Errorf("ParseQuery() error = %v, wantErr %v", 
err, tt.wantErr)
                                return
                        }
-                       if !reflect.DeepEqual(got, tt.want) {
+                       if !assert.Equal(t, got, tt.want) {
                                t.Errorf("ParseQuery() got = %v, want %v", got, 
tt.want)
                        }
                })
        }
 }
 
-func TestTagHandler_handleStatusRequestPattern(t *testing.T) {
+func TestTagHandler_applicationIdFromArgument(t *testing.T) {
        type fields struct {
                statusRequestPattern *regexp.Regexp
                calPattern           *regexp.Regexp
@@ -267,14 +311,14 @@ func TestTagHandler_handleStatusRequestPattern(t 
*testing.T) {
                unityQuery           *regexp.Regexp
        }
        type args struct {
-               match map[string]string
+               applicationIdArgument string
        }
        tests := []struct {
                name    string
                fields  fields
                args    args
-               want    apiModel.PlcTag
-               wantErr bool
+               want    readWriteModel.ApplicationIdContainer
+               wantErr assert.ErrorAssertionFunc
        }{
                // TODO: Add test cases.
        }
@@ -288,14 +332,51 @@ func TestTagHandler_handleStatusRequestPattern(t 
*testing.T) {
                                mmiMonitorPattern:    
tt.fields.mmiMonitorPattern,
                                unityQuery:           tt.fields.unityQuery,
                        }
-                       got, err := m.handleStatusRequestPattern(tt.args.match)
-                       if (err != nil) != tt.wantErr {
-                               t.Errorf("handleStatusRequestPattern() error = 
%v, wantErr %v", err, tt.wantErr)
+                       got, err := 
m.applicationIdFromArgument(tt.args.applicationIdArgument)
+                       if !tt.wantErr(t, err, 
fmt.Sprintf("applicationIdFromArgument(%v)", tt.args.applicationIdArgument)) {
                                return
                        }
-                       if !reflect.DeepEqual(got, tt.want) {
-                               t.Errorf("handleStatusRequestPattern() got = 
%v, want %v", got, tt.want)
+                       assert.Equalf(t, tt.want, got, 
"applicationIdFromArgument(%v)", tt.args.applicationIdArgument)
+               })
+       }
+}
+
+func TestTagHandler_extractBridges(t *testing.T) {
+       type fields struct {
+               statusRequestPattern *regexp.Regexp
+               calPattern           *regexp.Regexp
+               salPattern           *regexp.Regexp
+               salMonitorPattern    *regexp.Regexp
+               mmiMonitorPattern    *regexp.Regexp
+               unityQuery           *regexp.Regexp
+       }
+       type args struct {
+               match map[string]string
+       }
+       tests := []struct {
+               name    string
+               fields  fields
+               args    args
+               want    []readWriteModel.BridgeAddress
+               wantErr assert.ErrorAssertionFunc
+       }{
+               // TODO: Add test cases.
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       m := TagHandler{
+                               statusRequestPattern: 
tt.fields.statusRequestPattern,
+                               calPattern:           tt.fields.calPattern,
+                               salPattern:           tt.fields.salPattern,
+                               salMonitorPattern:    
tt.fields.salMonitorPattern,
+                               mmiMonitorPattern:    
tt.fields.mmiMonitorPattern,
+                               unityQuery:           tt.fields.unityQuery,
+                       }
+                       got, err := m.extractBridges(tt.args.match)
+                       if !tt.wantErr(t, err, 
fmt.Sprintf("extractBridges(%v)", tt.args.match)) {
+                               return
                        }
+                       assert.Equalf(t, tt.want, got, "extractBridges(%v)", 
tt.args.match)
                })
        }
 }
@@ -317,7 +398,7 @@ func TestTagHandler_handleCalPattern(t *testing.T) {
                fields  fields
                args    args
                want    apiModel.PlcTag
-               wantErr bool
+               wantErr assert.ErrorAssertionFunc
        }{
                // TODO: Add test cases.
        }
@@ -332,13 +413,10 @@ func TestTagHandler_handleCalPattern(t *testing.T) {
                                unityQuery:           tt.fields.unityQuery,
                        }
                        got, err := m.handleCalPattern(tt.args.match)
-                       if (err != nil) != tt.wantErr {
-                               t.Errorf("handleCalPattern() error = %v, 
wantErr %v", err, tt.wantErr)
+                       if !tt.wantErr(t, err, 
fmt.Sprintf("handleCalPattern(%v)", tt.args.match)) {
                                return
                        }
-                       if !reflect.DeepEqual(got, tt.want) {
-                               t.Errorf("handleCalPattern() got = %v, want 
%v", got, tt.want)
-                       }
+                       assert.Equalf(t, tt.want, got, "handleCalPattern(%v)", 
tt.args.match)
                })
        }
 }
@@ -360,7 +438,7 @@ func TestTagHandler_handleMMIMonitorPattern(t *testing.T) {
                fields  fields
                args    args
                want    apiModel.PlcTag
-               wantErr bool
+               wantErr assert.ErrorAssertionFunc
        }{
                // TODO: Add test cases.
        }
@@ -375,12 +453,52 @@ func TestTagHandler_handleMMIMonitorPattern(t *testing.T) 
{
                                unityQuery:           tt.fields.unityQuery,
                        }
                        got, err := m.handleMMIMonitorPattern(tt.args.match)
+                       if !tt.wantErr(t, err, 
fmt.Sprintf("handleMMIMonitorPattern(%v)", tt.args.match)) {
+                               return
+                       }
+                       assert.Equalf(t, tt.want, got, 
"handleMMIMonitorPattern(%v)", tt.args.match)
+               })
+       }
+}
+
+func TestTagHandler_handleStatusRequestPattern(t *testing.T) {
+       type fields struct {
+               statusRequestPattern *regexp.Regexp
+               calPattern           *regexp.Regexp
+               salPattern           *regexp.Regexp
+               salMonitorPattern    *regexp.Regexp
+               mmiMonitorPattern    *regexp.Regexp
+               unityQuery           *regexp.Regexp
+       }
+       type args struct {
+               match map[string]string
+       }
+       tests := []struct {
+               name    string
+               fields  fields
+               args    args
+               want    apiModel.PlcTag
+               wantErr bool
+       }{
+               // TODO: Add test cases.
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       m := TagHandler{
+                               statusRequestPattern: 
tt.fields.statusRequestPattern,
+                               calPattern:           tt.fields.calPattern,
+                               salPattern:           tt.fields.salPattern,
+                               salMonitorPattern:    
tt.fields.salMonitorPattern,
+                               mmiMonitorPattern:    
tt.fields.mmiMonitorPattern,
+                               unityQuery:           tt.fields.unityQuery,
+                       }
+                       got, err := m.handleStatusRequestPattern(tt.args.match)
                        if (err != nil) != tt.wantErr {
-                               t.Errorf("handleMMIMonitorPattern() error = %v, 
wantErr %v", err, tt.wantErr)
+                               t.Errorf("handleStatusRequestPattern() error = 
%v, wantErr %v", err, tt.wantErr)
                                return
                        }
                        if !reflect.DeepEqual(got, tt.want) {
-                               t.Errorf("handleMMIMonitorPattern() got = %v, 
want %v", got, tt.want)
+                               t.Errorf("handleStatusRequestPattern() got = 
%v, want %v", got, tt.want)
                        }
                })
        }
@@ -532,33 +650,48 @@ func TestTagType_GetName(t *testing.T) {
        }
 }
 
-func Test_applicationIdFromArgument(t *testing.T) {
+func TestTagHandler_unitAddressFromArgument(t *testing.T) {
+       type fields struct {
+               statusRequestPattern *regexp.Regexp
+               calPattern           *regexp.Regexp
+               salPattern           *regexp.Regexp
+               salMonitorPattern    *regexp.Regexp
+               mmiMonitorPattern    *regexp.Regexp
+               unityQuery           *regexp.Regexp
+       }
        type args struct {
-               applicationIdArgument string
+               unitAddressArgument string
+               allowWildcard       bool
        }
        tests := []struct {
                name    string
+               fields  fields
                args    args
-               want    readWriteModel.ApplicationIdContainer
-               wantErr bool
+               want    readWriteModel.UnitAddress
+               wantErr assert.ErrorAssertionFunc
        }{
                // TODO: Add test cases.
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
-                       got, err := 
applicationIdFromArgument(tt.args.applicationIdArgument)
-                       if (err != nil) != tt.wantErr {
-                               t.Errorf("applicationIdFromArgument() error = 
%v, wantErr %v", err, tt.wantErr)
-                               return
+                       m := TagHandler{
+                               statusRequestPattern: 
tt.fields.statusRequestPattern,
+                               calPattern:           tt.fields.calPattern,
+                               salPattern:           tt.fields.salPattern,
+                               salMonitorPattern:    
tt.fields.salMonitorPattern,
+                               mmiMonitorPattern:    
tt.fields.mmiMonitorPattern,
+                               unityQuery:           tt.fields.unityQuery,
                        }
-                       if got != tt.want {
-                               t.Errorf("applicationIdFromArgument() got = %v, 
want %v", got, tt.want)
+                       got, err := 
m.unitAddressFromArgument(tt.args.unitAddressArgument, tt.args.allowWildcard)
+                       if !tt.wantErr(t, err, 
fmt.Sprintf("unitAddressFromArgument(%v, %v)", tt.args.unitAddressArgument, 
tt.args.allowWildcard)) {
+                               return
                        }
+                       assert.Equalf(t, tt.want, got, 
"unitAddressFromArgument(%v, %v)", tt.args.unitAddressArgument, 
tt.args.allowWildcard)
                })
        }
 }
 
-func Test_c2nl(t *testing.T) {
+func Test_c2nl1(t *testing.T) {
        type args struct {
                t []CommandAndArgumentsCount
        }
@@ -571,9 +704,7 @@ func Test_c2nl(t *testing.T) {
        }
        for _, tt := range tests {
                t.Run(tt.name, func(t *testing.T) {
-                       if got := c2nl(tt.args.t); !reflect.DeepEqual(got, 
tt.want) {
-                               t.Errorf("c2nl() = %v, want %v", got, tt.want)
-                       }
+                       assert.Equalf(t, tt.want, c2nl(tt.args.t), "c2nl(%v)", 
tt.args.t)
                })
        }
 }

Reply via email to