Skip to content

Commit 9c19708

Browse files
[azeventhubs+azservicebus] Updating our user agent format so it matches HTTP (Azure#19712)
User-Agent was formatted inconsistent with our HTTP-based clients which was making doing simple reporting difficult. This brings it inline with what we do for user agents in HTTP, including when a client specified appid is present. Examples: * No appID: `azsdk-go-azeventhubs/v0.3.1 (go1.19.3; linux)` * With AppID: `userApplicationID azsdk-go-azeventhubs/v0.3.1 (go1.19.3; linux)` Fixes Azure#19673
1 parent 1ad22a9 commit 9c19708

File tree

12 files changed

+76
-45
lines changed

12 files changed

+76
-45
lines changed

sdk/messaging/azeventhubs/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
### Bugs Fixed
1010

11+
- User-Agent was incorrectly formatted in our AMQP-based clients. (PR#19712)
12+
1113
### Other Changes
1214

1315
## 0.3.0 (2022-11-10)

sdk/messaging/azeventhubs/go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.18
55
require (
66
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0
77
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0
8-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0
8+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2
99
github.com/joho/godotenv v1.4.0
1010
github.com/stretchr/testify v1.7.1
1111
)

sdk/messaging/azeventhubs/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0 h1:Ut0ZGdOwJDw0npYEg+TLlPls3
44
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.1.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U=
55
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0 h1:QkAcEIAKbNL4KoFr4SathZPhDhF4mVwpBMFlYjyAqy8=
66
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.1.0/go.mod h1:bhXu1AjYL+wutSL/kpSq6s7733q2Rb0yuot9Zgfqa/0=
7-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY=
8-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
7+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8=
8+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
99
github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1 h1:BWe8a+f/t+7KY7zH2mqygeUD0t8hNFXe08p1Pb3/jKE=
1010
github.com/AzureAD/microsoft-authentication-library-for-go v0.5.1/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4=
1111
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

sdk/messaging/azeventhubs/internal/namespace.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
1616
"github.com/Azure/azure-sdk-for-go/sdk/internal/log"
17+
"github.com/Azure/azure-sdk-for-go/sdk/internal/telemetry"
1718
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/amqpwrap"
1819
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/auth"
1920
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/conn"
@@ -23,9 +24,7 @@ import (
2324
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/utils"
2425
)
2526

26-
const (
27-
rootUserAgent = "/azsdk-go-azeventhubs/" + Version
28-
)
27+
var rootUserAgent = telemetry.Format("azeventhubs", Version)
2928

3029
type (
3130
// Namespace is an abstraction over an amqp.Client, allowing us to hold onto a single
@@ -457,7 +456,7 @@ func (ns *Namespace) GetEntityAudience(entityPath string) string {
457456
func (ns *Namespace) getUserAgent() string {
458457
userAgent := rootUserAgent
459458
if ns.userAgent != "" {
460-
userAgent = fmt.Sprintf("%s/%s", userAgent, ns.userAgent)
459+
userAgent = fmt.Sprintf("%s %s", ns.userAgent, userAgent)
461460
}
462461
return userAgent
463462
}

sdk/messaging/azeventhubs/internal/namespace_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ package internal
66
import (
77
"context"
88
"errors"
9+
"fmt"
910
"testing"
1011
"time"
1112

1213
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
1314
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
15+
"github.com/Azure/azure-sdk-for-go/sdk/internal/telemetry"
1416
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/amqpwrap"
1517
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/auth"
1618
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs/internal/exported"
@@ -35,6 +37,26 @@ var retryOptionsOnlyOnce = exported.RetryOptions{
3537
MaxRetries: 0,
3638
}
3739

40+
func TestNamespaceUserAgent(t *testing.T) {
41+
ns := &Namespace{}
42+
43+
// Examples:
44+
// User agent, no application ID : 'azsdk-go-azeventhubs/v0.3.1 (go1.19.3; linux)'
45+
// User agent, with application ID: 'userApplicationID azsdk-go-azeventhubs/v0.3.1 (go1.19.3; linux)'
46+
47+
baseUserAgent := telemetry.Format("azeventhubs", Version)
48+
require.NotEmpty(t, baseUserAgent)
49+
50+
t.Logf("User agent, no application ID : '%s'", ns.getUserAgent())
51+
require.Equal(t, baseUserAgent, ns.getUserAgent())
52+
53+
opt := NamespaceWithUserAgent("userApplicationID")
54+
require.NoError(t, opt(ns))
55+
56+
t.Logf("User agent, with application ID: '%s'", ns.getUserAgent())
57+
require.Equal(t, fmt.Sprintf("userApplicationID %s", baseUserAgent), ns.getUserAgent())
58+
}
59+
3860
func TestNamespaceNegotiateClaim(t *testing.T) {
3961
expires := time.Now().Add(24 * time.Hour)
4062

sdk/messaging/azservicebus/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
### Bugs Fixed
1010

11+
- User-Agent was incorrectly formatted in our AMQP-based clients. (PR#19712)
12+
1113
### Other Changes
1214

1315
## 1.1.3 (2022-11-16)

sdk/messaging/azservicebus/go.mod

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ module github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus
22

33
go 1.18
44

5-
retract (
6-
v1.1.2 // Breaks customers in situations where close is slow/infinite.
7-
)
5+
retract v1.1.2 // Breaks customers in situations where close is slow/infinite.
86

97
require (
108
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0
119
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0
12-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0
10+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2
1311
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
1412
)
1513

sdk/messaging/azservicebus/go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0 h1:sVPhtT2qjO86rTUaWMr4WoES4
44
github.com/Azure/azure-sdk-for-go/sdk/azcore v1.0.0/go.mod h1:uGG2W01BaETf0Ozp+QxxKJdMBNRWPdstHG0Fmdwn1/U=
55
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0 h1:Yoicul8bnVdQrhDMTHxdEckRGX01XvwXDHUT9zYZ3k0=
66
github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.0.0/go.mod h1:+6sju8gk8FRmSajX3Oz4G5Gm7P+mbqE9FVaXXFYTkCM=
7-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0 h1:jp0dGvZ7ZK0mgqnTSClMxa5xuRL7NZgHameVYF6BurY=
8-
github.com/Azure/azure-sdk-for-go/sdk/internal v1.0.0/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
7+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2 h1:+5VZ72z0Qan5Bog5C+ZkgSqUbeVUd9wgtHOrIKuc5b8=
8+
github.com/Azure/azure-sdk-for-go/sdk/internal v1.1.2/go.mod h1:eWRD7oawr1Mu1sLCawqVc0CUiF43ia3qQMxLscsKQ9w=
99
github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0 h1:WVsrXCnHlDDX8ls+tootqRE87/hL9S/g4ewig9RsD/c=
1010
github.com/AzureAD/microsoft-authentication-library-for-go v0.4.0/go.mod h1:Vt9sXTKwMyGcOxSmLDMnGPgqsUg7m8pe215qMLrDXw4=
1111
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=

sdk/messaging/azservicebus/internal/namespace.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
1616
"github.com/Azure/azure-sdk-for-go/sdk/internal/log"
17+
"github.com/Azure/azure-sdk-for-go/sdk/internal/telemetry"
1718
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/amqpwrap"
1819
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/auth"
1920
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/conn"
@@ -23,9 +24,7 @@ import (
2324
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/utils"
2425
)
2526

26-
const (
27-
rootUserAgent = "/azsdk-go-azservicebus/" + Version
28-
)
27+
var rootUserAgent = telemetry.Format("azservicebus", Version)
2928

3029
type (
3130
// Namespace is an abstraction over an amqp.Client, allowing us to hold onto a single
@@ -488,7 +487,7 @@ func (ns *Namespace) GetEntityAudience(entityPath string) string {
488487
func (ns *Namespace) getUserAgent() string {
489488
userAgent := rootUserAgent
490489
if ns.userAgent != "" {
491-
userAgent = fmt.Sprintf("%s/%s", userAgent, ns.userAgent)
490+
userAgent = fmt.Sprintf("%s %s", ns.userAgent, userAgent)
492491
}
493492
return userAgent
494493
}

sdk/messaging/azservicebus/internal/namespace_test.go

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ package internal
66
import (
77
"context"
88
"errors"
9+
"fmt"
910
"testing"
1011
"time"
1112

1213
"github.com/Azure/azure-sdk-for-go/sdk/azcore"
1314
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
15+
"github.com/Azure/azure-sdk-for-go/sdk/internal/telemetry"
1416
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/amqpwrap"
1517
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/auth"
1618
"github.com/Azure/azure-sdk-for-go/sdk/messaging/azservicebus/internal/go-amqp"
@@ -30,6 +32,26 @@ func (ftc *fakeTokenCredential) GetToken(ctx context.Context, options policy.Tok
3032
}, nil
3133
}
3234

35+
func TestNamespaceUserAgent(t *testing.T) {
36+
ns := &Namespace{}
37+
38+
// Examples:
39+
// User agent, no application ID : 'azsdk-go-azservicebus/v1.1.4 (go1.19.3; linux)'
40+
// User agent, with application ID: 'userApplicationID azsdk-go-azservicebus/v1.1.4 (go1.19.3; linux)'
41+
42+
baseUserAgent := telemetry.Format("azservicebus", Version)
43+
require.NotEmpty(t, baseUserAgent)
44+
45+
t.Logf("User agent, no application ID : '%s'", ns.getUserAgent())
46+
require.Equal(t, baseUserAgent, ns.getUserAgent())
47+
48+
opt := NamespaceWithUserAgent("userApplicationID")
49+
require.NoError(t, opt(ns))
50+
51+
t.Logf("User agent, with application ID: '%s'", ns.getUserAgent())
52+
require.Equal(t, fmt.Sprintf("userApplicationID %s", baseUserAgent), ns.getUserAgent())
53+
}
54+
3355
func TestNamespaceNegotiateClaim(t *testing.T) {
3456
expires := time.Now().Add(24 * time.Hour)
3557

0 commit comments

Comments
 (0)