2025-02-18 22:06:04 +08:00
package rabbitmqamqp
import (
"fmt"
2025-03-05 16:46:28 +08:00
"github.com/Azure/go-amqp"
2025-02-18 22:06:04 +08:00
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe ( "Available Features" , func ( ) {
It ( "Parse Version" , func ( ) {
v , err := parseVersion ( "1.2.3" )
Expect ( err ) . NotTo ( HaveOccurred ( ) )
Expect ( v ) . To ( Equal ( Version { Major : 1 , Minor : 2 , Patch : 3 } ) )
_ , err = parseVersion ( "1.2" )
Expect ( err ) . To ( HaveOccurred ( ) )
Expect ( fmt . Sprintf ( "%s" , err ) ) . To ( ContainSubstring ( "invalid version format: 1.2" ) )
_ , err = parseVersion ( "error.3.3" )
Expect ( err ) . To ( HaveOccurred ( ) )
Expect ( fmt . Sprintf ( "%s" , err ) ) . To ( ContainSubstring ( "invalid major version: error" ) )
_ , err = parseVersion ( "1.error.3" )
Expect ( err ) . To ( HaveOccurred ( ) )
Expect ( fmt . Sprintf ( "%s" , err ) ) . To ( ContainSubstring ( "invalid minor version: error" ) )
_ , err = parseVersion ( "1.2.error" )
Expect ( err ) . To ( HaveOccurred ( ) )
Expect ( fmt . Sprintf ( "%s" , err ) ) . To ( ContainSubstring ( "invalid patch version: error" ) )
v , err = parseVersion ( extractVersion ( "3.12.1-rc1" ) )
Expect ( err ) . NotTo ( HaveOccurred ( ) )
Expect ( v ) . To ( Equal ( Version { Major : 3 , Minor : 12 , Patch : 1 } ) )
v , err = parseVersion ( extractVersion ( "3.13.1-alpha.234" ) )
Expect ( err ) . NotTo ( HaveOccurred ( ) )
Expect ( v ) . To ( Equal ( Version { Major : 3 , Minor : 13 , Patch : 1 } ) )
} )
It ( "Is Version Greater Or Equal" , func ( ) {
Expect ( isVersionGreaterOrEqual ( "1.2.3" , "1.2.3" ) ) . To ( BeTrue ( ) )
Expect ( isVersionGreaterOrEqual ( "1.2.3" , "1.2.2" ) ) . To ( BeTrue ( ) )
Expect ( isVersionGreaterOrEqual ( "1.2.3" , "1.2.4" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "1.2.3" , "1.3.3" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "1.2.3" , "2.2.3" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "3.1.3-alpha.1" , "2.2.3" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "3.3.3-rc.1" , "2.2.3" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "error.3.2" , "2.2.3" ) ) . To ( BeFalse ( ) )
Expect ( isVersionGreaterOrEqual ( "4.3.2" , "2.error.3" ) ) . To ( BeFalse ( ) )
} )
It ( "Available Features check Version" , func ( ) {
var availableFeatures = newFeaturesAvailable ( )
Expect ( availableFeatures ) . NotTo ( BeNil ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any { } ) ) . NotTo ( BeNil ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "3.9.0" ,
"product" : "RabbitMQ" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeFalse ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeFalse ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeTrue ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "3.11.0" ,
"product" : "RabbitMQ" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeFalse ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeFalse ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeTrue ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "4.0.6-rc.1" ,
"product" : "RabbitMQ" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeFalse ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeTrue ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "4.1.0" ,
"product" : "RabbitMQ" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeTrue ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "4.1.0-beta.1" ,
"product" : "Boh" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeFalse ( ) )
Expect ( availableFeatures . ParseProperties ( map [ string ] any {
"version" : "4.1.0-rc.8" ,
"product" : "rabbitmq" ,
} ) ) . To ( BeNil ( ) )
Expect ( availableFeatures . is4OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . is41OrMore ) . To ( BeTrue ( ) )
Expect ( availableFeatures . isRabbitMQ ) . To ( BeTrue ( ) )
2025-03-05 16:46:28 +08:00
} )
2025-02-18 22:06:04 +08:00
2025-03-05 16:46:28 +08:00
It ( "StreamConsumerOptions validate for RabbitMQ 4.1" , func ( ) {
Expect ( ( & StreamConsumerOptions {
StreamFilterOptions : & StreamFilterOptions {
Properties : & amqp . MessageProperties {
MessageID : "123" ,
} ,
} ,
} ) . validate ( & featuresAvailable { is41OrMore : false } ) ) . To ( MatchError ( "stream consumer with properties filter is not supported. You need RabbitMQ 4.1 or later" ) )
Expect ( ( & StreamConsumerOptions {
StreamFilterOptions : & StreamFilterOptions {
Properties : & amqp . MessageProperties {
MessageID : "123" ,
} ,
} ,
} ) . validate ( & featuresAvailable { is41OrMore : true } ) ) . To ( BeNil ( ) )
2025-02-18 22:06:04 +08:00
} )
2025-03-05 16:46:28 +08:00
2025-02-18 22:06:04 +08:00
} )