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/21 15:03:45 UTC

[plc4x] branch develop updated (1cbd575559 -> f4bc00a065)

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 1cbd575559 test(plc4go): ParserSerializerTestRunner should not double tests
     new 2cfd56a80d test(plc4go): add more default tests
     new f4bc00a065 test(plc4go/spi): add more test for default types

The 2 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/ads/Browser.go                     |  2 +-
 plc4go/spi/default/DefaultBrowser.go               |  2 +-
 plc4go/spi/model/DefaultPlcBrowseResponse.go       | 81 +++-------------------
 ...gen.go => DefaultPlcBrowseResponse_plc4xgen.go} | 22 +++---
 plc4go/spi/model/DefaultPlcReadResponse.go         |  4 ++
 plc4go/spi/model/DefaultPlcSubscriptionResponse.go |  6 +-
 plc4go/spi/model/DefaultPlcWriteResponse.go        |  4 ++
 plc4go/spi/model/render_test.go                    | 48 +++++++++++--
 plc4go/tests/drivers/tests/eip_driver_test.go      |  8 +--
 9 files changed, 79 insertions(+), 98 deletions(-)
 copy plc4go/spi/model/{DefaultPlcSubscriptionResponse_plc4xgen.go => DefaultPlcBrowseResponse_plc4xgen.go} (76%)


[plc4x] 02/02: test(plc4go/spi): add more test for default types

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 f4bc00a065bdcebd59c2fdf32572b01bf6b50cfe
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Apr 21 17:03:37 2023 +0200

    test(plc4go/spi): add more test for default types
---
 plc4go/internal/ads/Browser.go                     |   2 +-
 plc4go/spi/default/DefaultBrowser.go               |   2 +-
 plc4go/spi/model/DefaultPlcBrowseResponse.go       |  81 ++--------------
 .../spi/model/DefaultPlcBrowseResponse_plc4xgen.go | 106 +++++++++++++++++++++
 plc4go/spi/model/DefaultPlcReadResponse.go         |   4 +
 plc4go/spi/model/DefaultPlcSubscriptionResponse.go |   6 +-
 plc4go/spi/model/DefaultPlcWriteResponse.go        |   4 +
 plc4go/spi/model/render_test.go                    |  35 ++++++-
 8 files changed, 162 insertions(+), 78 deletions(-)

diff --git a/plc4go/internal/ads/Browser.go b/plc4go/internal/ads/Browser.go
index 3dae7e8bdd..bb4b2a8c80 100644
--- a/plc4go/internal/ads/Browser.go
+++ b/plc4go/internal/ads/Browser.go
@@ -51,7 +51,7 @@ func (m *Connection) BrowseWithInterceptor(ctx context.Context, browseRequest ap
 		browseResponse := internalModel.NewDefaultPlcBrowseResponse(browseRequest, results, responseCodes)
 		result <- &internalModel.DefaultPlcBrowseRequestResult{
 			Request:  browseRequest,
-			Response: &browseResponse,
+			Response: browseResponse,
 			Err:      nil,
 		}
 	}()
diff --git a/plc4go/spi/default/DefaultBrowser.go b/plc4go/spi/default/DefaultBrowser.go
index b5adf1f79d..b9bc5532de 100644
--- a/plc4go/spi/default/DefaultBrowser.go
+++ b/plc4go/spi/default/DefaultBrowser.go
@@ -76,7 +76,7 @@ func (m *defaultBrowser) BrowseWithInterceptor(ctx context.Context, browseReques
 		browseResponse := model.NewDefaultPlcBrowseResponse(browseRequest, results, responseCodes)
 		result <- &model.DefaultPlcBrowseRequestResult{
 			Request:  browseRequest,
-			Response: &browseResponse,
+			Response: browseResponse,
 			Err:      nil,
 		}
 	}()
diff --git a/plc4go/spi/model/DefaultPlcBrowseResponse.go b/plc4go/spi/model/DefaultPlcBrowseResponse.go
index 489dd67c4f..4356116996 100644
--- a/plc4go/spi/model/DefaultPlcBrowseResponse.go
+++ b/plc4go/spi/model/DefaultPlcBrowseResponse.go
@@ -20,42 +20,37 @@
 package model
 
 import (
-	"context"
-	"encoding/binary"
-
 	"github.com/apache/plc4x/plc4go/pkg/api/model"
-	"github.com/apache/plc4x/plc4go/spi/utils"
-	"github.com/pkg/errors"
 )
 
-// TODO: use generator once we figured out how to render results with ast
+//go:generate go run ../../tools/plc4xgenerator/gen.go -type=DefaultPlcBrowseResponse
 type DefaultPlcBrowseResponse struct {
 	request      model.PlcBrowseRequest
-	responseCode model.PlcResponseCode
+	responseCode model.PlcResponseCode `stringer:"true"`
 	results      map[string]*DefaultPlcBrowseResponseItem
 }
 
-func NewDefaultPlcBrowseResponse(request model.PlcBrowseRequest, results map[string][]model.PlcBrowseItem, responseCodes map[string]model.PlcResponseCode) DefaultPlcBrowseResponse {
+func NewDefaultPlcBrowseResponse(request model.PlcBrowseRequest, results map[string][]model.PlcBrowseItem, responseCodes map[string]model.PlcResponseCode) *DefaultPlcBrowseResponse {
 	res := map[string]*DefaultPlcBrowseResponseItem{}
 	for name, code := range responseCodes {
 		value := results[name]
 		res[name] = NewBrowseResponseItem(code, value)
 	}
-	return DefaultPlcBrowseResponse{
+	return &DefaultPlcBrowseResponse{
 		request: request,
 		results: res,
 	}
 }
 
-func (d DefaultPlcBrowseResponse) IsAPlcMessage() bool {
+func (d *DefaultPlcBrowseResponse) IsAPlcMessage() bool {
 	return true
 }
 
-func (d DefaultPlcBrowseResponse) GetRequest() model.PlcBrowseRequest {
+func (d *DefaultPlcBrowseResponse) GetRequest() model.PlcBrowseRequest {
 	return d.request
 }
 
-func (d DefaultPlcBrowseResponse) GetQueryNames() []string {
+func (d *DefaultPlcBrowseResponse) GetQueryNames() []string {
 	var queryNames []string
 	for queryName := range d.results {
 		queryNames = append(queryNames, queryName)
@@ -63,68 +58,10 @@ func (d DefaultPlcBrowseResponse) GetQueryNames() []string {
 	return queryNames
 }
 
-func (d DefaultPlcBrowseResponse) GetResponseCode(name string) model.PlcResponseCode {
+func (d *DefaultPlcBrowseResponse) GetResponseCode(name string) model.PlcResponseCode {
 	return d.results[name].GetCode()
 }
 
-func (d DefaultPlcBrowseResponse) GetQueryResults(queryName string) []model.PlcBrowseItem {
+func (d *DefaultPlcBrowseResponse) GetQueryResults(queryName string) []model.PlcBrowseItem {
 	return d.results[queryName].GetResults()
 }
-
-func (d DefaultPlcBrowseResponse) Serialize() ([]byte, error) {
-	wb := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.BigEndian))
-	if err := d.SerializeWithWriteBuffer(context.Background(), wb); err != nil {
-		return nil, err
-	}
-	return wb.GetBytes(), nil
-}
-
-func (d DefaultPlcBrowseResponse) SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer) error {
-	if err := writeBuffer.PushContext("PlcBrowseResponse"); err != nil {
-		return err
-	}
-
-	if serializableRequest, ok := d.request.(utils.Serializable); ok {
-		if err := serializableRequest.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
-			return err
-		}
-	} else {
-		return errors.Errorf("Error serializing. Request %T doesn't implement Serializable", d.request)
-	}
-
-	if err := writeBuffer.PushContext("results"); err != nil {
-		return err
-	}
-	for tagName, browseResponseItem := range d.results {
-		if err := writeBuffer.PushContext(tagName); err != nil {
-			return err
-		}
-		for _, tag := range browseResponseItem.GetResults() {
-			if serializableTag, ok := tag.(utils.Serializable); ok {
-				if err := serializableTag.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
-					return err
-				}
-			} else {
-				return errors.Errorf("Error serializing. Tag %T doesn't implement Serializable", tag)
-			}
-		}
-		if err := writeBuffer.PopContext(tagName); err != nil {
-			return err
-		}
-	}
-	if err := writeBuffer.PopContext("results"); err != nil {
-		return err
-	}
-	if err := writeBuffer.PopContext("PlcBrowseResponse"); err != nil {
-		return err
-	}
-	return nil
-}
-
-func (d DefaultPlcBrowseResponse) String() string {
-	writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
-	if err := writeBuffer.WriteSerializable(context.Background(), d); err != nil {
-		return err.Error()
-	}
-	return writeBuffer.GetBox().String()
-}
diff --git a/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go b/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go
new file mode 100644
index 0000000000..e34f01597d
--- /dev/null
+++ b/plc4go/spi/model/DefaultPlcBrowseResponse_plc4xgen.go
@@ -0,0 +1,106 @@
+/*
+ * 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.
+ */
+
+// Code generated by "plc4xgenerator -type=DefaultPlcBrowseResponse"; DO NOT EDIT.
+
+package model
+
+import (
+	"context"
+	"encoding/binary"
+	"fmt"
+	"github.com/apache/plc4x/plc4go/spi/utils"
+)
+
+var _ = fmt.Printf
+
+func (d *DefaultPlcBrowseResponse) Serialize() ([]byte, error) {
+	wb := utils.NewWriteBufferByteBased(utils.WithByteOrderForByteBasedBuffer(binary.BigEndian))
+	if err := d.SerializeWithWriteBuffer(context.Background(), wb); err != nil {
+		return nil, err
+	}
+	return wb.GetBytes(), nil
+}
+
+func (d *DefaultPlcBrowseResponse) SerializeWithWriteBuffer(ctx context.Context, writeBuffer utils.WriteBuffer) error {
+	if err := writeBuffer.PushContext("PlcBrowseResponse"); err != nil {
+		return err
+	}
+
+	if d.request != nil {
+		if serializableField, ok := d.request.(utils.Serializable); ok {
+			if err := writeBuffer.PushContext("request"); err != nil {
+				return err
+			}
+			if err := serializableField.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
+				return err
+			}
+			if err := writeBuffer.PopContext("request"); err != nil {
+				return err
+			}
+		} else {
+			stringValue := fmt.Sprintf("%v", d.request)
+			if err := writeBuffer.WriteString("request", uint32(len(stringValue)*8), "UTF-8", stringValue); err != nil {
+				return err
+			}
+		}
+	}
+
+	if err := writeBuffer.WriteString("responseCode", uint32(len(d.responseCode.String())*8), "UTF-8", d.responseCode.String()); err != nil {
+		return err
+	}
+	if err := writeBuffer.PushContext("results", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
+	for name, elem := range d.results {
+
+		var elem any = elem
+		if serializable, ok := elem.(utils.Serializable); ok {
+			if err := writeBuffer.PushContext(name); err != nil {
+				return err
+			}
+			if err := serializable.SerializeWithWriteBuffer(ctx, writeBuffer); err != nil {
+				return err
+			}
+			if err := writeBuffer.PopContext(name); err != nil {
+				return err
+			}
+		} else {
+			elemAsString := fmt.Sprintf("%v", elem)
+			if err := writeBuffer.WriteString(name, uint32(len(elemAsString)*8), "UTF-8", elemAsString); err != nil {
+				return err
+			}
+		}
+	}
+	if err := writeBuffer.PopContext("results", utils.WithRenderAsList(true)); err != nil {
+		return err
+	}
+	if err := writeBuffer.PopContext("PlcBrowseResponse"); err != nil {
+		return err
+	}
+	return nil
+}
+
+func (d *DefaultPlcBrowseResponse) String() string {
+	writeBuffer := utils.NewWriteBufferBoxBasedWithOptions(true, true)
+	if err := writeBuffer.WriteSerializable(context.Background(), d); err != nil {
+		return err.Error()
+	}
+	return writeBuffer.GetBox().String()
+}
diff --git a/plc4go/spi/model/DefaultPlcReadResponse.go b/plc4go/spi/model/DefaultPlcReadResponse.go
index 2fcb10e29a..d6abab81f9 100644
--- a/plc4go/spi/model/DefaultPlcReadResponse.go
+++ b/plc4go/spi/model/DefaultPlcReadResponse.go
@@ -47,6 +47,10 @@ func (d *DefaultPlcReadResponse) IsAPlcMessage() bool {
 }
 
 func (d *DefaultPlcReadResponse) GetTagNames() []string {
+	if d.request == nil {
+		// safety guard
+		return nil
+	}
 	var tagNames []string
 	// We take the tag names from the request to keep order as map is not ordered
 	for _, name := range d.request.GetTagNames() {
diff --git a/plc4go/spi/model/DefaultPlcSubscriptionResponse.go b/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
index 08f6ff16a8..02f6902e88 100644
--- a/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
+++ b/plc4go/spi/model/DefaultPlcSubscriptionResponse.go
@@ -61,9 +61,13 @@ func (d *DefaultPlcSubscriptionResponse) GetRequest() model.PlcSubscriptionReque
 }
 
 func (d *DefaultPlcSubscriptionResponse) GetTagNames() []string {
+	if d.request == nil {
+		// Safety guard
+		return nil
+	}
 	var tagNames []string
 	// We take the tag names from the request to keep order as map is not ordered
-	for _, name := range d.request.(*DefaultPlcSubscriptionRequest).GetTagNames() {
+	for _, name := range d.request.GetTagNames() {
 		if _, ok := d.values[name]; ok {
 			tagNames = append(tagNames, name)
 		}
diff --git a/plc4go/spi/model/DefaultPlcWriteResponse.go b/plc4go/spi/model/DefaultPlcWriteResponse.go
index 0151ac4cc2..68d2a8a5c5 100644
--- a/plc4go/spi/model/DefaultPlcWriteResponse.go
+++ b/plc4go/spi/model/DefaultPlcWriteResponse.go
@@ -41,6 +41,10 @@ func (d *DefaultPlcWriteResponse) IsAPlcMessage() bool {
 }
 
 func (d *DefaultPlcWriteResponse) GetTagNames() []string {
+	if d.request == nil {
+		// Safety guard
+		return nil
+	}
 	var tagNames []string
 	// We take the tag names from the request to keep order as map is not ordered
 	for _, name := range d.request.GetTagNames() {
diff --git a/plc4go/spi/model/render_test.go b/plc4go/spi/model/render_test.go
index 3c919bfc04..40ea6a4b2b 100644
--- a/plc4go/spi/model/render_test.go
+++ b/plc4go/spi/model/render_test.go
@@ -21,13 +21,20 @@ package model
 
 import (
 	"fmt"
+	"github.com/apache/plc4x/plc4go/spi/utils"
+	"reflect"
+	"strings"
 	"testing"
 
 	"github.com/stretchr/testify/assert"
 )
 
-func TestNonPanickingStrings(t *testing.T) {
-	suts := []fmt.Stringer{
+// TestRenderTest is a lazy test of Default* structs without proper initialization
+func TestRenderTest(t *testing.T) {
+	suts := []interface {
+		fmt.Stringer
+		utils.Serializable
+	}{
 		&DefaultArrayInfo{},
 		&DefaultPlcBrowseEvent{},
 		&DefaultPlcBrowseItem{},
@@ -57,7 +64,29 @@ func TestNonPanickingStrings(t *testing.T) {
 	}
 	for _, sut := range suts {
 		t.Run(fmt.Sprintf("%T", sut), func(t *testing.T) {
-			assert.NotEmptyf(t, sut.String(), "string should at least return type informations")
+			t.Run("String", func(t *testing.T) {
+				assert.NotEmptyf(t, sut.String(), "string should at least return type informations")
+			})
+			t.Run("Get*/IsÜ*", func(t *testing.T) {
+				valueOf := reflect.ValueOf(sut)
+				for i := 0; i < valueOf.NumMethod(); i++ {
+					method := valueOf.Method(i)
+					methodName := valueOf.Type().Method(i).Name
+					if strings.HasPrefix(methodName, "Get") || strings.HasPrefix(methodName, "Is") {
+						t.Run(methodName, func(t *testing.T) {
+							if na := method.Type().NumIn(); na != 0 {
+								t.Skipf("skipping because to many argument: %d", na)
+							}
+							method.Call(nil)
+						})
+					}
+				}
+			})
+			t.Run("Serialize", func(t *testing.T) {
+				serialize, err := sut.Serialize()
+				assert.NoError(t, err)
+				_ = serialize
+			})
 		})
 	}
 }


[plc4x] 01/02: test(plc4go): add more default tests

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 2cfd56a80d72c66a566f00e6bb540875d844e296
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Apr 21 16:34:42 2023 +0200

    test(plc4go): add more default tests
---
 plc4go/spi/model/render_test.go               | 13 +++++++++----
 plc4go/tests/drivers/tests/eip_driver_test.go |  8 +-------
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/plc4go/spi/model/render_test.go b/plc4go/spi/model/render_test.go
index 50817eab78..3c919bfc04 100644
--- a/plc4go/spi/model/render_test.go
+++ b/plc4go/spi/model/render_test.go
@@ -28,27 +28,32 @@ import (
 
 func TestNonPanickingStrings(t *testing.T) {
 	suts := []fmt.Stringer{
+		&DefaultArrayInfo{},
+		&DefaultPlcBrowseEvent{},
+		&DefaultPlcBrowseItem{},
+		&DefaultPlcBrowseRequest{},
+		&DefaultPlcBrowseRequestResult{},
 		&DefaultPlcBrowseResponse{},
+		&DefaultPlcBrowseResponseItem{},
 		&DefaultPlcConsumerRegistration{},
 		&DefaultPlcDiscoveryItem{},
 		&DefaultPlcReadRequest{},
 		&DefaultPlcReadRequestResult{},
 		&DefaultPlcReadResponse{},
 		&DefaultPlcSubscriptionEvent{},
+		&DefaultPlcSubscriptionEventItem{},
 		&DefaultPlcSubscriptionHandle{},
 		&DefaultPlcSubscriptionRequest{},
 		&DefaultPlcSubscriptionRequestResult{},
 		&DefaultPlcSubscriptionResponse{},
+		&DefaultPlcSubscriptionResponseItem{},
+		&DefaultPlcTagRequest{},
 		//&DefaultPlcUnsubscriptionRequest{}, //TODO: empty file
 		&DefaultPlcUnsubscriptionRequestResult{},
 		//&DefaultPlcUnsubscriptionResponse{}, //TODO: empty file
 		&DefaultPlcWriteRequest{},
 		&DefaultPlcWriteRequestResult{},
 		&DefaultPlcWriteResponse{},
-		&DefaultPlcBrowseRequestResult{},
-		&DefaultPlcBrowseRequest{},
-		&DefaultPlcBrowseItem{},
-		&DefaultPlcBrowseEvent{},
 	}
 	for _, sut := range suts {
 		t.Run(fmt.Sprintf("%T", sut), func(t *testing.T) {
diff --git a/plc4go/tests/drivers/tests/eip_driver_test.go b/plc4go/tests/drivers/tests/eip_driver_test.go
index 1de81c8630..7db0efca8b 100644
--- a/plc4go/tests/drivers/tests/eip_driver_test.go
+++ b/plc4go/tests/drivers/tests/eip_driver_test.go
@@ -29,12 +29,6 @@ import (
 )
 
 func TestEIPDriver(t *testing.T) {
-	/*log.Logger = log.
-		With().Caller().Logger().
-		Output(zerolog.ConsoleWriter{Out: os.Stderr}).
-		Level(zerolog.DebugLevel)
-	config.TraceTransactionManagerWorkers = true
-	config.TraceTransactionManagerTransactions = true
-	config.TraceDefaultMessageCodecWorker = true*/
+	/*initializetest.GoFullDebug()*/
 	testutils.RunDriverTestsuite(t, eip.NewDriver(), "assets/testing/protocols/eip/DriverTestsuite.xml", eipIO.EipXmlParserHelper{})
 }