mirror of
https://github.com/docker/cli.git
synced 2026-08-29 10:06:35 -05:00
Signed-off-by: luojiyin <luojiyin@hotmail.com> Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
86 lines
2.3 KiB
Go
86 lines
2.3 KiB
Go
package manager
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"sync"
|
|
"testing"
|
|
|
|
"github.com/docker/cli/internal/test"
|
|
"github.com/spf13/cobra"
|
|
"gotest.tools/v3/assert"
|
|
)
|
|
|
|
func TestPluginResourceAttributesEnvvar(t *testing.T) {
|
|
cmd := &cobra.Command{
|
|
Annotations: map[string]string{
|
|
cobra.CommandDisplayNameAnnotation: "docker",
|
|
},
|
|
}
|
|
|
|
// Ensure basic usage is fine.
|
|
env := appendPluginResourceAttributesEnvvar(nil, cmd, Plugin{Name: "compose"})
|
|
assert.DeepEqual(t, []string{"OTEL_RESOURCE_ATTRIBUTES=docker.cli.cobra.command_path=docker%20compose"}, env)
|
|
|
|
// Add a user-based environment variable to OTEL_RESOURCE_ATTRIBUTES.
|
|
t.Setenv("OTEL_RESOURCE_ATTRIBUTES", "a.b.c=foo")
|
|
|
|
env = appendPluginResourceAttributesEnvvar(nil, cmd, Plugin{Name: "compose"})
|
|
assert.DeepEqual(t, []string{"OTEL_RESOURCE_ATTRIBUTES=a.b.c=foo,docker.cli.cobra.command_path=docker%20compose"}, env)
|
|
}
|
|
|
|
func TestPluginStubRunEReturnsParseError(t *testing.T) {
|
|
cmd, err := preparePluginStubCommand(t)
|
|
assert.NilError(t, err)
|
|
|
|
err = cmd.RunE(cmd, []string{"--definitely-not-a-real-flag"})
|
|
assert.ErrorContains(t, err, "unknown flag: --definitely-not-a-real-flag")
|
|
}
|
|
|
|
func TestPluginStubCompletionRestoresOSArgs(t *testing.T) {
|
|
cmd, err := preparePluginStubCommand(t)
|
|
assert.NilError(t, err)
|
|
|
|
savedArgs := os.Args
|
|
t.Cleanup(func() { os.Args = savedArgs })
|
|
|
|
originalArgs := []string{"docker", "image", "ls"}
|
|
os.Args = append([]string(nil), originalArgs...)
|
|
|
|
_, directive := cmd.ValidArgsFunction(cmd, []string{"--all"}, "alp")
|
|
assert.Equal(t, directive, cobra.ShellCompDirectiveError)
|
|
assert.DeepEqual(t, os.Args, originalArgs)
|
|
}
|
|
|
|
func preparePluginStubCommand(t *testing.T) (*cobra.Command, error) {
|
|
t.Helper()
|
|
pluginCommandStubsOnce = sync.Once{}
|
|
|
|
tmpDir := t.TempDir()
|
|
const cliPlugin = `#!/bin/sh
|
|
printf '%s' '{"SchemaVersion":"0.1.0"}'
|
|
`
|
|
if err := os.WriteFile(filepath.Join(tmpDir, "docker-testplugin"), []byte(cliPlugin), 0o777); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cli := test.NewFakeCli(nil)
|
|
cli.ConfigFile().CLIPluginsExtraDirs = []string{tmpDir}
|
|
|
|
root := &cobra.Command{Use: "docker"}
|
|
root.PersistentFlags().Bool("debug", false, "")
|
|
|
|
if err := AddPluginCommandStubs(cli, root); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
cmd, _, err := root.Find([]string{"testplugin"})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if cmd == nil {
|
|
return nil, os.ErrNotExist
|
|
}
|
|
return cmd, nil
|
|
}
|