Ver código fonte

dockerversion: DockerUserAgent(): allow custom versions to be passed

Allow additional metadata to be passed as part of the generated User-Agent.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
Sebastiaan van Stijn 2 anos atrás
pai
commit
a6da1480b5
2 arquivos alterados com 16 adições e 2 exclusões
  1. 2 2
      dockerversion/useragent.go
  2. 14 0
      dockerversion/useragent_test.go

+ 2 - 2
dockerversion/useragent.go

@@ -17,8 +17,8 @@ type UAStringKey struct{}
 // In accordance with RFC 7231 (5.5.3) is of the form:
 //
 //	[docker client's UA] UpstreamClient([upstream client's UA])
-func DockerUserAgent(ctx context.Context) string {
-	ua := getDaemonUserAgent()
+func DockerUserAgent(ctx context.Context, extraVersions ...useragent.VersionInfo) string {
+	ua := useragent.AppendVersions(getDaemonUserAgent(), extraVersions...)
 	if upstreamUA := getUpstreamUserAgent(ctx); upstreamUA != "" {
 		ua += " " + upstreamUA
 	}

+ 14 - 0
dockerversion/useragent_test.go

@@ -4,6 +4,7 @@ import (
 	"context"
 	"testing"
 
+	"github.com/docker/docker/pkg/useragent"
 	"gotest.tools/v3/assert"
 	is "gotest.tools/v3/assert/cmp"
 )
@@ -15,10 +16,23 @@ func TestDockerUserAgent(t *testing.T) {
 		assert.Check(t, is.Equal(ua, expected))
 	})
 
+	t.Run("daemon user-agent custom metadata", func(t *testing.T) {
+		ua := DockerUserAgent(context.TODO(), useragent.VersionInfo{Name: "hello", Version: "world"}, useragent.VersionInfo{Name: "foo", Version: "bar"})
+		expected := getDaemonUserAgent() + ` hello/world foo/bar`
+		assert.Check(t, is.Equal(ua, expected))
+	})
+
 	t.Run("daemon user-agent with upstream", func(t *testing.T) {
 		ctx := context.WithValue(context.TODO(), UAStringKey{}, "Magic-Client/1.2.3 (linux)")
 		ua := DockerUserAgent(ctx)
 		expected := getDaemonUserAgent() + ` UpstreamClient(Magic-Client/1.2.3 \(linux\))`
 		assert.Check(t, is.Equal(ua, expected))
 	})
+
+	t.Run("daemon user-agent with upstream and custom metadata", func(t *testing.T) {
+		ctx := context.WithValue(context.TODO(), UAStringKey{}, "Magic-Client/1.2.3 (linux)")
+		ua := DockerUserAgent(ctx, useragent.VersionInfo{Name: "hello", Version: "world"}, useragent.VersionInfo{Name: "foo", Version: "bar"})
+		expected := getDaemonUserAgent() + ` hello/world foo/bar UpstreamClient(Magic-Client/1.2.3 \(linux\))`
+		assert.Check(t, is.Equal(ua, expected))
+	})
 }