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 2022/01/24 15:49:21 UTC

[plc4x] 02/04: fix(plc4go/codgen): added missing validation field

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 5aa4e72001838ba1969154a72cbb9b4c21a571c9
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Mon Jan 24 13:47:19 2022 +0100

    fix(plc4go/codgen): added missing validation field
---
 .../src/main/resources/templates/go/model-template.go.ftlh | 10 ++++++++++
 .../bacnetip/readwrite/model/BACnetApplicationTag.go       |  7 +++++++
 .../plc4go/bacnetip/readwrite/model/BACnetClosingTag.go    |  7 +++++++
 .../readwrite/model/BACnetConstructedDataElement.go        |  7 +++++++
 .../plc4go/bacnetip/readwrite/model/BACnetContextTag.go    | 14 ++++++++++++++
 .../bacnetip/readwrite/model/BACnetContextTagBitString.go  |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagBoolean.go    |  7 +++++++
 .../readwrite/model/BACnetContextTagCharacterString.go     |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagDate.go       |  7 +++++++
 .../readwrite/model/BACnetContextTagDeviceState.go         |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagDouble.go     |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagEnumerated.go |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagEventState.go |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagEventType.go  |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagNotifyType.go |  7 +++++++
 .../readwrite/model/BACnetContextTagObjectIdentifier.go    |  7 +++++++
 .../readwrite/model/BACnetContextTagOctetString.go         |  7 +++++++
 .../readwrite/model/BACnetContextTagPropertyIdentifier.go  |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagReal.go       |  7 +++++++
 .../readwrite/model/BACnetContextTagSignedInteger.go       |  7 +++++++
 .../bacnetip/readwrite/model/BACnetContextTagTime.go       |  7 +++++++
 .../readwrite/model/BACnetContextTagUnsignedInteger.go     |  7 +++++++
 .../plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go    |  7 +++++++
 .../plc4go/spi/testutils/ParserSerializerTestRunner.go     |  5 ++++-
 plc4go/internal/plc4go/spi/utils/Utils.go                  |  1 +
 25 files changed, 176 insertions(+), 1 deletion(-)

diff --git a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
index b571cb6..03f565e 100644
--- a/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
+++ b/code-generation/language-go/src/main/resources/templates/go/model-template.go.ftlh
@@ -1255,6 +1255,16 @@ func ${type.name}Parse(readBuffer utils.ReadBuffer<#if hasParserArguments>, ${pa
 	_${virtualField.name} := ${helper.toParseExpression(virtualField, virtualField.type, virtualField.valueExpression, parserArguments)}
 	${virtualField.name} := ${helper.getLanguageTypeNameForTypeReference(virtualField.type)}(_${virtualField.name})
 				<#break>
+            <#case "validation">
+                <#assign validationField = field.asValidationField().orElseThrow()>
+
+	// Validation
+	if (!(${helper.toParseExpression(validationField, helper.boolTypeReference, validationField.getValidationExpression(), null)})) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New(${validationField.getDescription().orElse("Validation failed")}) //TODO: add emit import here
+	}
+                <#break>
             <#case "peek">
                 <#assign peekField = field.asPeekField().orElseThrow()>
 
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
index 2f816f7..6ed0979 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetApplicationTag.go
@@ -118,6 +118,13 @@ func BACnetApplicationTagParse(readBuffer utils.ReadBuffer) (*BACnetApplicationT
 		return nil, closeErr
 	}
 
+	// Validation
+	if !(bool((header.TagClass) == (TagClass_APPLICATION_TAGS))) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("should be a application tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_tagNumber := header.TagNumber
 	tagNumber := uint8(_tagNumber)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
index 74f334d..4a7f6f0 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetClosingTag.go
@@ -98,6 +98,13 @@ func BACnetClosingTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(bool((actualLength) == (7))) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("closing tag should habe a value of 7") //TODO: add emit import here
+	}
+
 	if closeErr := readBuffer.CloseContext("BACnetClosingTag"); closeErr != nil {
 		return nil, closeErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataElement.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataElement.go
index 5775529..4c77df2 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataElement.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetConstructedDataElement.go
@@ -195,6 +195,13 @@ func BACnetConstructedDataElementParse(readBuffer utils.ReadBuffer, objectType B
 		}
 	}
 
+	// Validation
+	if !(bool(bool(isApplicationTag) || bool(isContextTag)) || bool(isConstructedData)) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("BACnetConstructedDataElement could not parse anything") //TODO: add emit import here
+	}
+
 	if closeErr := readBuffer.CloseContext("BACnetConstructedDataElement"); closeErr != nil {
 		return nil, closeErr
 	}
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
index 74c525f..fc92ae1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTag.go
@@ -121,6 +121,20 @@ func BACnetContextTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 		return nil, closeErr
 	}
 
+	// Validation
+	if !(bool((header.ActualTagNumber) == (tagNumberArgument))) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("tagnumber doesn't match") //TODO: add emit import here
+	}
+
+	// Validation
+	if !(bool((header.TagClass) == (TagClass_CONTEXT_SPECIFIC_TAGS))) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("should be a context tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_tagNumber := header.TagNumber
 	tagNumber := uint8(_tagNumber)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
index 74f93d0..4464ea7 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBitString.go
@@ -118,6 +118,13 @@ func BACnetContextTagBitStringParse(readBuffer utils.ReadBuffer, tagNumberArgume
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (unusedBits)
 	_unusedBits, _unusedBitsErr := readBuffer.ReadUint8("unusedBits", 8)
 	if _unusedBitsErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
index fbcd83f..2b28a3e 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagBoolean.go
@@ -112,6 +112,13 @@ func BACnetContextTagBooleanParse(readBuffer utils.ReadBuffer, tagNumberArgument
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (value)
 	_value, _valueErr := readBuffer.ReadUint8("value", 8)
 	if _valueErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
index a372033..ae6dcb3 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagCharacterString.go
@@ -113,6 +113,13 @@ func BACnetContextTagCharacterStringParse(readBuffer utils.ReadBuffer, tagNumber
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (encoding)
 	if pullErr := readBuffer.PullContext("encoding"); pullErr != nil {
 		return nil, pullErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
index 1184ad1..f95367b 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDate.go
@@ -159,6 +159,13 @@ func BACnetContextTagDateParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_wildcard := 0xFF
 	wildcard := int8(_wildcard)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
index 5d2bbd0..fc86e71 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDeviceState.go
@@ -104,6 +104,13 @@ func BACnetContextTagDeviceStateParse(readBuffer utils.ReadBuffer, tagNumberArgu
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (state)
 	if pullErr := readBuffer.PullContext("state"); pullErr != nil {
 		return nil, pullErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
index d140720..4b29a05 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagDouble.go
@@ -104,6 +104,13 @@ func BACnetContextTagDoubleParse(readBuffer utils.ReadBuffer, tagNumberArgument
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (value)
 	_value, _valueErr := readBuffer.ReadFloat64("value", 64)
 	if _valueErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
index db2b136..222c0f6 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEnumerated.go
@@ -106,6 +106,13 @@ func BACnetContextTagEnumeratedParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Array field (data)
 	if pullErr := readBuffer.PullContext("data", utils.WithRenderAsList(true)); pullErr != nil {
 		return nil, pullErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
index de224c0..981de12 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventState.go
@@ -113,6 +113,13 @@ func BACnetContextTagEventStateParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Manual Field (eventState)
 	eventState, _eventStateErr := ReadEventState(readBuffer, actualLength)
 	if _eventStateErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
index eb92359..1b31844 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagEventType.go
@@ -113,6 +113,13 @@ func BACnetContextTagEventTypeParse(readBuffer utils.ReadBuffer, tagNumberArgume
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Manual Field (eventType)
 	eventType, _eventTypeErr := ReadEventType(readBuffer, actualLength)
 	if _eventTypeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
index ae4d97e..9492c52 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagNotifyType.go
@@ -104,6 +104,13 @@ func BACnetContextTagNotifyTypeParse(readBuffer utils.ReadBuffer, tagNumberArgum
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (value)
 	if pullErr := readBuffer.PullContext("value"); pullErr != nil {
 		return nil, pullErr
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
index b87603d..9c21056 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagObjectIdentifier.go
@@ -118,6 +118,13 @@ func BACnetContextTagObjectIdentifierParse(readBuffer utils.ReadBuffer, tagNumbe
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Manual Field (objectType)
 	objectType, _objectTypeErr := ReadObjectType(readBuffer)
 	if _objectTypeErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
index 4121ac5..b4aec97 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagOctetString.go
@@ -108,6 +108,13 @@ func BACnetContextTagOctetStringParse(readBuffer utils.ReadBuffer, tagNumberArgu
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_actualLengthInBit := uint16(actualLength) * uint16(uint16(8))
 	actualLengthInBit := uint16(_actualLengthInBit)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
index 8d64a58..daa600d 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagPropertyIdentifier.go
@@ -113,6 +113,13 @@ func BACnetContextTagPropertyIdentifierParse(readBuffer utils.ReadBuffer, tagNum
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Manual Field (propertyIdentifier)
 	propertyIdentifier, _propertyIdentifierErr := ReadPropertyIdentifier(readBuffer, actualLength)
 	if _propertyIdentifierErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
index b84f1a7..945f345 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagReal.go
@@ -104,6 +104,13 @@ func BACnetContextTagRealParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Simple Field (value)
 	_value, _valueErr := readBuffer.ReadFloat32("value", 32)
 	if _valueErr != nil {
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
index 46a32ce..cbc0574 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagSignedInteger.go
@@ -191,6 +191,13 @@ func BACnetContextTagSignedIntegerParse(readBuffer utils.ReadBuffer, tagNumberAr
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_isInt8 := bool((actualLength) == (1))
 	isInt8 := bool(_isInt8)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
index d6bfa5f..57b3d95 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagTime.go
@@ -139,6 +139,13 @@ func BACnetContextTagTimeParse(readBuffer utils.ReadBuffer, tagNumberArgument ui
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_wildcard := 0xFF
 	wildcard := int8(_wildcard)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
index c7abd83..8876793 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetContextTagUnsignedInteger.go
@@ -147,6 +147,13 @@ func BACnetContextTagUnsignedIntegerParse(readBuffer utils.ReadBuffer, tagNumber
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(isNotOpeningOrClosingTag) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("length 6 and 7 reserved for opening and closing tag") //TODO: add emit import here
+	}
+
 	// Virtual field
 	_isUint8 := bool((actualLength) == (1))
 	isUint8 := bool(_isUint8)
diff --git a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
index db31653..b833ed1 100644
--- a/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
+++ b/plc4go/internal/plc4go/bacnetip/readwrite/model/BACnetOpeningTag.go
@@ -98,6 +98,13 @@ func BACnetOpeningTagParse(readBuffer utils.ReadBuffer, tagNumberArgument uint8,
 		return nil, pullErr
 	}
 
+	// Validation
+	if !(bool((actualLength) == (6))) {
+		return nil, utils.ParseAssertError
+		// TODO: message would be helpful but then we need to change ParserAssertError to be customizable
+		//return nil, errors.New("opening tag should habe a value of 6") //TODO: add emit import here
+	}
+
 	if closeErr := readBuffer.CloseContext("BACnetOpeningTag"); closeErr != nil {
 		return nil, closeErr
 	}
diff --git a/plc4go/internal/plc4go/spi/testutils/ParserSerializerTestRunner.go b/plc4go/internal/plc4go/spi/testutils/ParserSerializerTestRunner.go
index d6101c5..f5c5718 100644
--- a/plc4go/internal/plc4go/spi/testutils/ParserSerializerTestRunner.go
+++ b/plc4go/internal/plc4go/spi/testutils/ParserSerializerTestRunner.go
@@ -25,6 +25,7 @@ import (
 	"fmt"
 	abethModel "github.com/apache/plc4x/plc4go/internal/plc4go/abeth/readwrite"
 	adsModel "github.com/apache/plc4x/plc4go/internal/plc4go/ads/readwrite"
+	bacnetModel "github.com/apache/plc4x/plc4go/internal/plc4go/bacnetip/readwrite"
 	df1Model "github.com/apache/plc4x/plc4go/internal/plc4go/df1/readwrite"
 	eipModel "github.com/apache/plc4x/plc4go/internal/plc4go/eip/readwrite"
 	firmataModel "github.com/apache/plc4x/plc4go/internal/plc4go/firmata/readwrite"
@@ -138,6 +139,8 @@ func RunParserSerializerTestsuite(t *testing.T, testPath string, skippedTestCase
 					helper = new(abethModel.AbethParserHelper)
 				case "ads":
 					helper = new(adsModel.AdsParserHelper)
+				case "bacnetip":
+					helper = new(bacnetModel.BacnetipParserHelper)
 				case "df1":
 					helper = new(df1Model.Df1ParserHelper)
 				case "eip":
@@ -151,7 +154,7 @@ func RunParserSerializerTestsuite(t *testing.T, testPath string, skippedTestCase
 				case "knxnetip":
 					helper = new(knxModel.KnxnetipParserHelper)
 				default:
-					t.Errorf("Testsuite %s has not mapped parser", testsuiteName)
+					t.Errorf("Testsuite %s has not mapped parser for %s", testsuiteName, protocolName)
 					return
 				}
 				_ = outputFlavor
diff --git a/plc4go/internal/plc4go/spi/utils/Utils.go b/plc4go/internal/plc4go/spi/utils/Utils.go
index c9c16dd..d8c2e0a 100644
--- a/plc4go/internal/plc4go/spi/utils/Utils.go
+++ b/plc4go/internal/plc4go/spi/utils/Utils.go
@@ -30,4 +30,5 @@ func InlineIf(test bool, a func() interface{}, b func() interface{}) interface{}
 	}
 }
 
+// TODO: make a error witch can be checked with errors.With
 var ParseAssertError = errors.New("Wrong assertion")