github.com/justincormack/cli@v0.0.0-20201215022714-831ebeae9675/cli/command/context/export-import_test.go (about)

     1  package context
     2  
     3  import (
     4  	"bytes"
     5  	"fmt"
     6  	"io/ioutil"
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/docker/cli/cli/streams"
    12  	"gotest.tools/v3/assert"
    13  )
    14  
    15  func TestExportImportWithFile(t *testing.T) {
    16  	contextDir, err := ioutil.TempDir("", t.Name()+"context")
    17  	assert.NilError(t, err)
    18  	defer os.RemoveAll(contextDir)
    19  	contextFile := filepath.Join(contextDir, "exported")
    20  	cli, cleanup := makeFakeCli(t)
    21  	defer cleanup()
    22  	createTestContextWithKube(t, cli)
    23  	cli.ErrBuffer().Reset()
    24  	assert.NilError(t, RunExport(cli, &ExportOptions{
    25  		ContextName: "test",
    26  		Dest:        contextFile,
    27  	}))
    28  	assert.Equal(t, cli.ErrBuffer().String(), fmt.Sprintf("Written file %q\n", contextFile))
    29  	cli.OutBuffer().Reset()
    30  	cli.ErrBuffer().Reset()
    31  	assert.NilError(t, RunImport(cli, "test2", contextFile))
    32  	context1, err := cli.ContextStore().GetMetadata("test")
    33  	assert.NilError(t, err)
    34  	context2, err := cli.ContextStore().GetMetadata("test2")
    35  	assert.NilError(t, err)
    36  	assert.DeepEqual(t, context1.Endpoints, context2.Endpoints)
    37  	assert.DeepEqual(t, context1.Metadata, context2.Metadata)
    38  	assert.Equal(t, "test", context1.Name)
    39  	assert.Equal(t, "test2", context2.Name)
    40  
    41  	assert.Equal(t, "test2\n", cli.OutBuffer().String())
    42  	assert.Equal(t, "Successfully imported context \"test2\"\n", cli.ErrBuffer().String())
    43  }
    44  
    45  func TestExportImportPipe(t *testing.T) {
    46  	cli, cleanup := makeFakeCli(t)
    47  	defer cleanup()
    48  	createTestContextWithKube(t, cli)
    49  	cli.ErrBuffer().Reset()
    50  	cli.OutBuffer().Reset()
    51  	assert.NilError(t, RunExport(cli, &ExportOptions{
    52  		ContextName: "test",
    53  		Dest:        "-",
    54  	}))
    55  	assert.Equal(t, cli.ErrBuffer().String(), "")
    56  	cli.SetIn(streams.NewIn(ioutil.NopCloser(bytes.NewBuffer(cli.OutBuffer().Bytes()))))
    57  	cli.OutBuffer().Reset()
    58  	cli.ErrBuffer().Reset()
    59  	assert.NilError(t, RunImport(cli, "test2", "-"))
    60  	context1, err := cli.ContextStore().GetMetadata("test")
    61  	assert.NilError(t, err)
    62  	context2, err := cli.ContextStore().GetMetadata("test2")
    63  	assert.NilError(t, err)
    64  	assert.DeepEqual(t, context1.Endpoints, context2.Endpoints)
    65  	assert.DeepEqual(t, context1.Metadata, context2.Metadata)
    66  	assert.Equal(t, "test", context1.Name)
    67  	assert.Equal(t, "test2", context2.Name)
    68  
    69  	assert.Equal(t, "test2\n", cli.OutBuffer().String())
    70  	assert.Equal(t, "Successfully imported context \"test2\"\n", cli.ErrBuffer().String())
    71  }
    72  
    73  func TestExportKubeconfig(t *testing.T) {
    74  	contextDir, err := ioutil.TempDir("", t.Name()+"context")
    75  	assert.NilError(t, err)
    76  	defer os.RemoveAll(contextDir)
    77  	contextFile := filepath.Join(contextDir, "exported")
    78  	cli, cleanup := makeFakeCli(t)
    79  	defer cleanup()
    80  	createTestContextWithKube(t, cli)
    81  	cli.ErrBuffer().Reset()
    82  	assert.NilError(t, RunExport(cli, &ExportOptions{
    83  		ContextName: "test",
    84  		Dest:        contextFile,
    85  		Kubeconfig:  true,
    86  	}))
    87  	assert.Equal(t, cli.ErrBuffer().String(), fmt.Sprintf("Written file %q\n", contextFile))
    88  	assert.NilError(t, RunCreate(cli, &CreateOptions{
    89  		Name: "test2",
    90  		Kubernetes: map[string]string{
    91  			keyKubeconfig: contextFile,
    92  		},
    93  		Docker: map[string]string{},
    94  	}))
    95  	validateTestKubeEndpoint(t, cli.ContextStore(), "test2")
    96  }
    97  
    98  func TestExportExistingFile(t *testing.T) {
    99  	contextDir, err := ioutil.TempDir("", t.Name()+"context")
   100  	assert.NilError(t, err)
   101  	defer os.RemoveAll(contextDir)
   102  	contextFile := filepath.Join(contextDir, "exported")
   103  	cli, cleanup := makeFakeCli(t)
   104  	defer cleanup()
   105  	createTestContextWithKube(t, cli)
   106  	cli.ErrBuffer().Reset()
   107  	assert.NilError(t, ioutil.WriteFile(contextFile, []byte{}, 0644))
   108  	err = RunExport(cli, &ExportOptions{ContextName: "test", Dest: contextFile})
   109  	assert.Assert(t, os.IsExist(err))
   110  }