mirror of https://github.com/docker/cli.git
cli/command/context: test inspecting context with custom metadata
The CLI does not currently expose options to add custom metadata to contexts, but contexts support them. - update test-utilities to allow setting custom metadata - update the inspect test to verify that custom metadata is included when inspecting a context. - update the import/export tests to verify that custom metadata is preserved. Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
parent
54291dd47a
commit
2e9eff235d
|
@ -24,6 +24,10 @@ type CreateOptions struct {
|
||||||
Description string
|
Description string
|
||||||
Docker map[string]string
|
Docker map[string]string
|
||||||
From string
|
From string
|
||||||
|
|
||||||
|
// Additional Metadata to store in the context. This option is not
|
||||||
|
// currently exposed to the user.
|
||||||
|
metaData map[string]any
|
||||||
}
|
}
|
||||||
|
|
||||||
func longCreateDescription() string {
|
func longCreateDescription() string {
|
||||||
|
@ -94,7 +98,8 @@ func createNewContext(contextStore store.ReaderWriter, o *CreateOptions) error {
|
||||||
docker.DockerEndpoint: dockerEP,
|
docker.DockerEndpoint: dockerEP,
|
||||||
},
|
},
|
||||||
Metadata: command.DockerContext{
|
Metadata: command.DockerContext{
|
||||||
Description: o.Description,
|
Description: o.Description,
|
||||||
|
AdditionalFields: o.metaData,
|
||||||
},
|
},
|
||||||
Name: o.Name,
|
Name: o.Name,
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,14 +8,18 @@ import (
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/docker/cli/cli/command"
|
||||||
"github.com/docker/cli/cli/streams"
|
"github.com/docker/cli/cli/streams"
|
||||||
"gotest.tools/v3/assert"
|
"gotest.tools/v3/assert"
|
||||||
|
is "gotest.tools/v3/assert/cmp"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestExportImportWithFile(t *testing.T) {
|
func TestExportImportWithFile(t *testing.T) {
|
||||||
contextFile := filepath.Join(t.TempDir(), "exported")
|
contextFile := filepath.Join(t.TempDir(), "exported")
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "test")
|
createTestContext(t, cli, "test", map[string]any{
|
||||||
|
"MyCustomMetadata": t.Name(),
|
||||||
|
})
|
||||||
cli.ErrBuffer().Reset()
|
cli.ErrBuffer().Reset()
|
||||||
assert.NilError(t, RunExport(cli, &ExportOptions{
|
assert.NilError(t, RunExport(cli, &ExportOptions{
|
||||||
ContextName: "test",
|
ContextName: "test",
|
||||||
|
@ -29,18 +33,26 @@ func TestExportImportWithFile(t *testing.T) {
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
context2, err := cli.ContextStore().GetMetadata("test2")
|
context2, err := cli.ContextStore().GetMetadata("test2")
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.DeepEqual(t, context1.Endpoints, context2.Endpoints)
|
|
||||||
assert.DeepEqual(t, context1.Metadata, context2.Metadata)
|
|
||||||
assert.Equal(t, "test", context1.Name)
|
|
||||||
assert.Equal(t, "test2", context2.Name)
|
|
||||||
|
|
||||||
assert.Equal(t, "test2\n", cli.OutBuffer().String())
|
assert.Check(t, is.DeepEqual(context1.Metadata, command.DockerContext{
|
||||||
assert.Equal(t, "Successfully imported context \"test2\"\n", cli.ErrBuffer().String())
|
Description: "description of test",
|
||||||
|
AdditionalFields: map[string]any{"MyCustomMetadata": t.Name()},
|
||||||
|
}))
|
||||||
|
|
||||||
|
assert.Check(t, is.DeepEqual(context1.Endpoints, context2.Endpoints))
|
||||||
|
assert.Check(t, is.DeepEqual(context1.Metadata, context2.Metadata))
|
||||||
|
assert.Check(t, is.Equal("test", context1.Name))
|
||||||
|
assert.Check(t, is.Equal("test2", context2.Name))
|
||||||
|
|
||||||
|
assert.Check(t, is.Equal("test2\n", cli.OutBuffer().String()))
|
||||||
|
assert.Check(t, is.Equal("Successfully imported context \"test2\"\n", cli.ErrBuffer().String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExportImportPipe(t *testing.T) {
|
func TestExportImportPipe(t *testing.T) {
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "test")
|
createTestContext(t, cli, "test", map[string]any{
|
||||||
|
"MyCustomMetadata": t.Name(),
|
||||||
|
})
|
||||||
cli.ErrBuffer().Reset()
|
cli.ErrBuffer().Reset()
|
||||||
cli.OutBuffer().Reset()
|
cli.OutBuffer().Reset()
|
||||||
assert.NilError(t, RunExport(cli, &ExportOptions{
|
assert.NilError(t, RunExport(cli, &ExportOptions{
|
||||||
|
@ -56,13 +68,19 @@ func TestExportImportPipe(t *testing.T) {
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
context2, err := cli.ContextStore().GetMetadata("test2")
|
context2, err := cli.ContextStore().GetMetadata("test2")
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.DeepEqual(t, context1.Endpoints, context2.Endpoints)
|
|
||||||
assert.DeepEqual(t, context1.Metadata, context2.Metadata)
|
|
||||||
assert.Equal(t, "test", context1.Name)
|
|
||||||
assert.Equal(t, "test2", context2.Name)
|
|
||||||
|
|
||||||
assert.Equal(t, "test2\n", cli.OutBuffer().String())
|
assert.Check(t, is.DeepEqual(context1.Metadata, command.DockerContext{
|
||||||
assert.Equal(t, "Successfully imported context \"test2\"\n", cli.ErrBuffer().String())
|
Description: "description of test",
|
||||||
|
AdditionalFields: map[string]any{"MyCustomMetadata": t.Name()},
|
||||||
|
}))
|
||||||
|
|
||||||
|
assert.Check(t, is.DeepEqual(context1.Endpoints, context2.Endpoints))
|
||||||
|
assert.Check(t, is.DeepEqual(context1.Metadata, context2.Metadata))
|
||||||
|
assert.Check(t, is.Equal("test", context1.Name))
|
||||||
|
assert.Check(t, is.Equal("test2", context2.Name))
|
||||||
|
|
||||||
|
assert.Check(t, is.Equal("test2\n", cli.OutBuffer().String()))
|
||||||
|
assert.Check(t, is.Equal("Successfully imported context \"test2\"\n", cli.ErrBuffer().String()))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestExportExistingFile(t *testing.T) {
|
func TestExportExistingFile(t *testing.T) {
|
||||||
|
|
|
@ -10,7 +10,9 @@ import (
|
||||||
|
|
||||||
func TestInspect(t *testing.T) {
|
func TestInspect(t *testing.T) {
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "current")
|
createTestContext(t, cli, "current", map[string]any{
|
||||||
|
"MyCustomMetadata": "MyCustomMetadataValue",
|
||||||
|
})
|
||||||
cli.OutBuffer().Reset()
|
cli.OutBuffer().Reset()
|
||||||
assert.NilError(t, runInspect(cli, inspectOptions{
|
assert.NilError(t, runInspect(cli, inspectOptions{
|
||||||
refs: []string{"current"},
|
refs: []string{"current"},
|
||||||
|
|
|
@ -11,17 +11,19 @@ import (
|
||||||
func createTestContexts(t *testing.T, cli command.Cli, name ...string) {
|
func createTestContexts(t *testing.T, cli command.Cli, name ...string) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
for _, n := range name {
|
for _, n := range name {
|
||||||
createTestContext(t, cli, n)
|
createTestContext(t, cli, n, nil)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTestContext(t *testing.T, cli command.Cli, name string) {
|
func createTestContext(t *testing.T, cli command.Cli, name string, metaData map[string]any) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
err := RunCreate(cli, &CreateOptions{
|
err := RunCreate(cli, &CreateOptions{
|
||||||
Name: name,
|
Name: name,
|
||||||
Description: "description of " + name,
|
Description: "description of " + name,
|
||||||
Docker: map[string]string{keyHost: "https://someswarmserver.example.com"},
|
Docker: map[string]string{keyHost: "https://someswarmserver.example.com"},
|
||||||
|
|
||||||
|
metaData: metaData,
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
}
|
}
|
||||||
|
|
|
@ -57,7 +57,7 @@ func TestRemoveCurrentForce(t *testing.T) {
|
||||||
|
|
||||||
func TestRemoveDefault(t *testing.T) {
|
func TestRemoveDefault(t *testing.T) {
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "other")
|
createTestContext(t, cli, "other", nil)
|
||||||
cli.SetCurrentContext("current")
|
cli.SetCurrentContext("current")
|
||||||
err := RunRemove(cli, RemoveOptions{}, []string{"default"})
|
err := RunRemove(cli, RemoveOptions{}, []string{"default"})
|
||||||
assert.ErrorContains(t, err, `default: context "default" cannot be removed`)
|
assert.ErrorContains(t, err, `default: context "default" cannot be removed`)
|
||||||
|
|
|
@ -8,7 +8,7 @@ import (
|
||||||
|
|
||||||
func TestShow(t *testing.T) {
|
func TestShow(t *testing.T) {
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "current")
|
createTestContext(t, cli, "current", nil)
|
||||||
cli.SetCurrentContext("current")
|
cli.SetCurrentContext("current")
|
||||||
|
|
||||||
cli.OutBuffer().Reset()
|
cli.OutBuffer().Reset()
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
{
|
{
|
||||||
"Name": "current",
|
"Name": "current",
|
||||||
"Metadata": {
|
"Metadata": {
|
||||||
"Description": "description of current"
|
"Description": "description of current",
|
||||||
|
"MyCustomMetadata": "MyCustomMetadataValue"
|
||||||
},
|
},
|
||||||
"Endpoints": {
|
"Endpoints": {
|
||||||
"docker": {
|
"docker": {
|
||||||
|
|
|
@ -34,7 +34,7 @@ func TestUpdateDescriptionOnly(t *testing.T) {
|
||||||
|
|
||||||
func TestUpdateDockerOnly(t *testing.T) {
|
func TestUpdateDockerOnly(t *testing.T) {
|
||||||
cli := makeFakeCli(t)
|
cli := makeFakeCli(t)
|
||||||
createTestContext(t, cli, "test")
|
createTestContext(t, cli, "test", nil)
|
||||||
assert.NilError(t, RunUpdate(cli, &UpdateOptions{
|
assert.NilError(t, RunUpdate(cli, &UpdateOptions{
|
||||||
Name: "test",
|
Name: "test",
|
||||||
Docker: map[string]string{
|
Docker: map[string]string{
|
||||||
|
|
Loading…
Reference in New Issue