Allow additional metadata to be passed as part of the generated User-Agent.
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
| ... | ... |
@@ -17,8 +17,8 @@ type UAStringKey struct{}
|
| 17 | 17 |
// In accordance with RFC 7231 (5.5.3) is of the form: |
| 18 | 18 |
// |
| 19 | 19 |
// [docker client's UA] UpstreamClient([upstream client's UA]) |
| 20 |
-func DockerUserAgent(ctx context.Context) string {
|
|
| 21 |
- ua := getDaemonUserAgent() |
|
| 20 |
+func DockerUserAgent(ctx context.Context, extraVersions ...useragent.VersionInfo) string {
|
|
| 21 |
+ ua := useragent.AppendVersions(getDaemonUserAgent(), extraVersions...) |
|
| 22 | 22 |
if upstreamUA := getUpstreamUserAgent(ctx); upstreamUA != "" {
|
| 23 | 23 |
ua += " " + upstreamUA |
| 24 | 24 |
} |
| ... | ... |
@@ -4,6 +4,7 @@ import ( |
| 4 | 4 |
"context" |
| 5 | 5 |
"testing" |
| 6 | 6 |
|
| 7 |
+ "github.com/docker/docker/pkg/useragent" |
|
| 7 | 8 |
"gotest.tools/v3/assert" |
| 8 | 9 |
is "gotest.tools/v3/assert/cmp" |
| 9 | 10 |
) |
| ... | ... |
@@ -15,10 +16,23 @@ func TestDockerUserAgent(t *testing.T) {
|
| 15 | 15 |
assert.Check(t, is.Equal(ua, expected)) |
| 16 | 16 |
}) |
| 17 | 17 |
|
| 18 |
+ t.Run("daemon user-agent custom metadata", func(t *testing.T) {
|
|
| 19 |
+ ua := DockerUserAgent(context.TODO(), useragent.VersionInfo{Name: "hello", Version: "world"}, useragent.VersionInfo{Name: "foo", Version: "bar"})
|
|
| 20 |
+ expected := getDaemonUserAgent() + ` hello/world foo/bar` |
|
| 21 |
+ assert.Check(t, is.Equal(ua, expected)) |
|
| 22 |
+ }) |
|
| 23 |
+ |
|
| 18 | 24 |
t.Run("daemon user-agent with upstream", func(t *testing.T) {
|
| 19 | 25 |
ctx := context.WithValue(context.TODO(), UAStringKey{}, "Magic-Client/1.2.3 (linux)")
|
| 20 | 26 |
ua := DockerUserAgent(ctx) |
| 21 | 27 |
expected := getDaemonUserAgent() + ` UpstreamClient(Magic-Client/1.2.3 \(linux\))` |
| 22 | 28 |
assert.Check(t, is.Equal(ua, expected)) |
| 23 | 29 |
}) |
| 30 |
+ |
|
| 31 |
+ t.Run("daemon user-agent with upstream and custom metadata", func(t *testing.T) {
|
|
| 32 |
+ ctx := context.WithValue(context.TODO(), UAStringKey{}, "Magic-Client/1.2.3 (linux)")
|
|
| 33 |
+ ua := DockerUserAgent(ctx, useragent.VersionInfo{Name: "hello", Version: "world"}, useragent.VersionInfo{Name: "foo", Version: "bar"})
|
|
| 34 |
+ expected := getDaemonUserAgent() + ` hello/world foo/bar UpstreamClient(Magic-Client/1.2.3 \(linux\))` |
|
| 35 |
+ assert.Check(t, is.Equal(ua, expected)) |
|
| 36 |
+ }) |
|
| 24 | 37 |
} |