Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

W-15092041: fix ibmmq validations false negatives #1968

Merged
merged 1 commit into from
Apr 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1127,7 +1127,7 @@ object APIRawValidations extends CommonValidationDefinitions {
owlClass = apiBinding("IBMMQServerBinding"),
owlProperty = apiBinding("heartBeatInterval"),
constraint = sh("pattern"),
value = "^[0-999999]$"
value = "^\\d{1,6}$"
),
AMFValidation(
message = "IBMMQ Channel Binding 'destinationType' field must be either 'topic' or 'queue'",
Expand Down Expand Up @@ -1167,8 +1167,7 @@ object APIRawValidations extends CommonValidationDefinitions {
message = "IBMMQ channel Binding 'maxMsgLength' field must be a number between 0-104857600 (100MB)",
owlClass = apiBinding("IBMMQChannelBinding"),
owlProperty = apiBinding("maxMsgLength"),
constraint = sh("pattern"),
value = "^[0-104857600]$"
constraint = shape("IBMMQMaxMsgLengthValidation")
),
AMFValidation(
message = "IBMMQ message Binding 'type' field must be either 'string', 'jms' or 'binary'",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,24 @@ object APICustomShaclFunctions extends BaseCustomShaclFunctions {
)
}
}
},
new CustomShaclFunction {
override val name: String = "IBMMQMaxMsgLengthValidation"

override def run(element: AmfObject, validate: Option[ValidationInfo] => Unit): Unit = {
val binding = element.asInstanceOf[IBMMQChannelBinding]
val length = binding.maxMsgLength.value()
val isMaxMsgLengthValid = 0 <= length && length <= 104857600
if (!isMaxMsgLengthValid) {
validate(
validationInfo(
IBMMQChannelBindingModel.MaxMsgLength,
"IBMMQ channel Binding 'maxMsgLength' field must be a number between 0-104857600 (100MB)",
element.annotations
)
)
}
}
}
)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
asyncapi: 2.1.0
info:
title: test binding
version: 1.0.0
servers:
theName:
url: some.com
protocol: ibmmq
bindings:
ibmmq:
heartBeatInterval: 123 # 1. MUST be 0-999999
channels:
some-channel:
bindings:
# 2. queue and topic fields MUST NOT coexist within an ibmmq channel binding
ibmmq:
destinationType: topic # 3. MUST be either topic or queue
topic:
string: normal value # 5. MUST NOT exceed 10240 characters in length
objectName: normal value # 6. MUST NOT exceed 48 characters in length
maxMsgLength: 123 # 7. MUST be 0-104,857,600 bytes (100 MB)
publish:
message:
bindings:
ibmmq:
type: string # 8. MUST be either string, jms or binary
expiry: 1 # 9. MUST be 0 or greater

other-channel:
publish:
message:
bindings:
ibmmq:
type: jms
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ModelId: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations-valid.yaml
Profile: ASYNC 2.0
Conforms: true
Number of results: 0
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,14 @@ Level: Violation
Range: [(11,27)-(11,36)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#IBMMQChannelBinding-maxMsgLength-IBMMQMaxMsgLengthValidation
Message: IBMMQ channel Binding 'maxMsgLength' field must be a number between 0-104857600 (100MB)
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/ibmmq-channel
Property: http://a.ml/vocabularies/apiBinding#maxMsgLength
Range: [(16,6)-(25,0)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#IBMMQChannelBinding-queue-IBMMQDestinationValidation
Message: 'queue' and 'topic' fields MUST NOT coexist within an IBMMQ channel binding
Severity: Violation
Expand Down Expand Up @@ -53,14 +61,6 @@ Level: Violation
Range: [(23,22)-(23,75)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#IBMMQChannelBinding-maxMsgLength-pattern
Message: IBMMQ channel Binding 'maxMsgLength' field must be a number between 0-104857600 (100MB)
Severity: Violation
Target: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml#/async-api/endpoint/some-channel/channel-bindings/bindings/ibmmq-channel
Property: http://a.ml/vocabularies/apiBinding#maxMsgLength
Range: [(24,22)-(24,31)]
Location: file://amf-cli/shared/src/test/resources/validations/async20/validations/ibmmq-binding-validations.yaml

- Constraint: http://a.ml/vocabularies/amf/parser#IBMMQMessageBinding-messageType-in
Message: IBMMQ message Binding 'type' field must be either 'string', 'jms' or 'binary'
Severity: Violation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -403,4 +403,8 @@ class Async20UniquePlatformUnitValidationsTest extends UniquePlatformReportGenTe
test("Async 2.1+ IBMMQ validations") {
validate("ibmmq-binding-validations.yaml", Some("ibmmq-binding-validations.report"))
}

test("Async 2.1+ IBMMQ validations all valid") {
validate("ibmmq-binding-validations-valid.yaml", Some("ibmmq-binding-validations-valid.report"))
}
}