From 09b2f38616a5507b7aefd40791a2df9620eed224 Mon Sep 17 00:00:00 2001 From: Jerry Olsson Date: Sun, 2 Feb 2025 17:37:28 +0100 Subject: [PATCH 1/2] Upgrade go-amqp to v1.3.0 Upgraded go-amqp dependency to v1.3.0. The changes since v1.0.1 are mostly added features. Fixed some tests that were failing. The end to end tests still fails on DeviceToCloud tests. This has been failing for a long time already. --- go.mod | 10 +++++----- go.sum | 32 +++++++++++++------------------- iotservice/client_test.go | 4 ++-- iotservice/registry.go | 7 ++++--- 4 files changed, 24 insertions(+), 29 deletions(-) diff --git a/go.mod b/go.mod index 5101de4..c29e5e5 100644 --- a/go.mod +++ b/go.mod @@ -3,12 +3,12 @@ module github.com/amenzhinsky/iothub go 1.18 require ( - github.com/Azure/go-amqp v1.0.1 - github.com/eclipse/paho.mqtt.golang v1.4.2 + github.com/Azure/go-amqp v1.3.0 + github.com/eclipse/paho.mqtt.golang v1.5.0 ) require ( - github.com/gorilla/websocket v1.5.0 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect + github.com/gorilla/websocket v1.5.3 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/sync v0.10.0 // indirect ) diff --git a/go.sum b/go.sum index 22634b0..149b0cd 100644 --- a/go.sum +++ b/go.sum @@ -1,22 +1,16 @@ -github.com/Azure/go-amqp v1.0.1 h1:Jf8OQCKzRDMZ3pCiH4onM7yrhl5curkRSGkRLTyP35o= -github.com/Azure/go-amqp v1.0.1/go.mod h1:+bg0x3ce5+Q3ahCEXnCsGG3ETpDQe3MEVnOuT2ywPwc= +github.com/Azure/go-amqp v1.3.0 h1://1rikYhoIQNXJFXyoO/Rlb4+4EkHYfJceNtLlys2/4= +github.com/Azure/go-amqp v1.3.0/go.mod h1:vZAogwdrkbyK3Mla8m/CxSc/aKdnTZ4IbPxl51Y5WZE= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/eclipse/paho.mqtt.golang v1.4.2 h1:66wOzfUHSSI1zamx7jR6yMEI5EuHnT1G6rNA5PM12m4= -github.com/eclipse/paho.mqtt.golang v1.4.2/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= +github.com/eclipse/paho.mqtt.golang v1.5.0 h1:EH+bUVJNgttidWFkLLVKaQPGmkTUfQQqjOsyvMGvD6o= +github.com/eclipse/paho.mqtt.golang v1.5.0/go.mod h1:du/2qNQVqJf/Sqs4MEL77kR8QTqANF7XU7Fk0aOTAgk= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= -golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/net v0.0.0-20200425230154-ff2c4b7c35a0/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= diff --git a/iotservice/client_test.go b/iotservice/client_test.go index cbf38ab..4d2ce18 100644 --- a/iotservice/client_test.go +++ b/iotservice/client_test.go @@ -149,7 +149,7 @@ func TestRegistryError(t *testing.T) { if !ok { t.Fatalf("expected a registry error, got = %v", err) } - if re.Message == "" || re.ExceptionMessage == "" { + if re.Message == "" && re.ExceptionMessage == "" { t.Fatal("message is empty") } } @@ -427,7 +427,7 @@ func TestScheduleMethodCall(t *testing.T) { CloudToDeviceMethod: &DeviceMethodParams{ MethodName: "dist-upgrade", Payload: map[string]interface{}{"time": "now"}, - TimeoutInSeconds: 0, + TimeoutInSeconds: 5, }, QueryCondition: "deviceId='nonexisting'", StartTime: time.Now().Add(time.Minute), diff --git a/iotservice/registry.go b/iotservice/registry.go index 56b416e..ed009c9 100644 --- a/iotservice/registry.go +++ b/iotservice/registry.go @@ -231,9 +231,10 @@ const ( ) type DeviceMethodParams struct { - MethodName string `json:"methodName"` - Payload interface{} `json:"payload"` - TimeoutInSeconds uint `json:"timeoutInSeconds"` + MethodName string `json:"methodName"` + Payload interface{} `json:"payload"` + TimeoutInSeconds uint `json:"responseTimeoutInSeconds"` + ConnectTimeoutInSeconds uint `json:"connectTimeoutInSeconds"` } type BadRequestError struct { From 2e268a2afe36da85491f720b66eda588ee27fc47 Mon Sep 17 00:00:00 2001 From: Jerry Olsson Date: Thu, 13 Feb 2025 20:43:20 +0100 Subject: [PATCH 2/2] Parse CorrelationID properly The documentation in go-amqp library states that CorrelationID can be: uint64, UUID, []byte, or string Sending a 16 byte hex string as CorrelationId will return a UUID type. --- iotservice/message.go | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/iotservice/message.go b/iotservice/message.go index e7211fa..de2a0aa 100644 --- a/iotservice/message.go +++ b/iotservice/message.go @@ -24,7 +24,16 @@ func FromAMQPMessage(msg *amqp.Message) *common.Message { m.MessageID = msg.Properties.MessageID.(string) } if msg.Properties.CorrelationID != nil { - m.CorrelationID = msg.Properties.CorrelationID.(string) + switch v := msg.Properties.CorrelationID.(type) { + case uint64: + m.CorrelationID = fmt.Sprintf("%d", v) + case amqp.UUID: + m.CorrelationID = v.String() + case []byte: + m.CorrelationID = string(v) + case string: + m.CorrelationID = v + } } if msg.Properties.To != nil { m.To = *msg.Properties.To