Files
moby/dockerversion/useragent_test.go
Sebastiaan van Stijn 91ae7ea8c8 dockerversion: un-export UAStringKey, add WithUpstreamUserAgent
Add a WithUpstreamUserAgent utility instead of exporting the context-key
used.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
2026-05-14 15:29:35 +02:00

65 lines
1.9 KiB
Go

package dockerversion
import (
"context"
"testing"
"github.com/moby/moby/v2/pkg/useragent"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
)
func TestDockerUserAgent(t *testing.T) {
tests := []struct {
doc string
ctx context.Context
metadata []useragent.VersionInfo
expected string
}{
{
doc: "daemon user-agent",
ctx: t.Context(),
expected: getDaemonUserAgent(),
},
{
doc: "daemon user-agent custom metadata",
ctx: t.Context(),
metadata: []useragent.VersionInfo{
{Name: "hello", Version: "world"},
{Name: "foo", Version: "bar"},
},
expected: getDaemonUserAgent() + ` hello/world foo/bar`,
},
{
doc: "daemon user-agent with upstream",
ctx: WithUpstreamUserAgent(t.Context(), "Magic-Client/1.2.3 (linux)"),
expected: getDaemonUserAgent() + ` UpstreamClient(Magic-Client/1.2.3 \(linux\))`,
},
{
doc: "daemon user-agent with upstream and custom metadata",
ctx: WithUpstreamUserAgent(t.Context(), "Magic-Client/1.2.3 (linux)"),
metadata: []useragent.VersionInfo{
{Name: "hello", Version: "world"},
{Name: "foo", Version: "bar"},
},
expected: getDaemonUserAgent() + ` hello/world foo/bar UpstreamClient(Magic-Client/1.2.3 \(linux\))`,
},
{
doc: "daemon user-agent with upstream special chars",
ctx: WithUpstreamUserAgent(t.Context(), `Magic-Client/1.2.3 (linux); \ test`),
expected: getDaemonUserAgent() + ` UpstreamClient(Magic-Client/1.2.3 \(linux\)\; \\ test)`,
},
{
doc: "daemon user-agent with upstream control chars",
ctx: WithUpstreamUserAgent(t.Context(), "Magic-Client/1.2.3\r\nInjected: evil"),
expected: getDaemonUserAgent() + ` UpstreamClient(Magic-Client/1.2.3Injected: evil)`,
},
}
for _, tc := range tests {
t.Run(tc.doc, func(t *testing.T) {
assert.Check(t, is.Equal(DockerUserAgent(tc.ctx, tc.metadata...), tc.expected))
})
}
}