...

Source file src/edge-infra.dev/pkg/sds/emergencyaccess/emulator/workspace_test.go

Documentation: edge-infra.dev/pkg/sds/emergencyaccess/emulator

     1  package emulator
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"io/fs"
     7  	"os"
     8  	"path/filepath"
     9  	"testing"
    10  
    11  	"github.com/stretchr/testify/assert"
    12  
    13  	"edge-infra.dev/pkg/lib/fog"
    14  )
    15  
    16  func EqualError(msg string) assert.ErrorAssertionFunc {
    17  	return func(t assert.TestingT, err error, _ ...interface{}) bool {
    18  		return assert.EqualError(t, err, msg)
    19  	}
    20  }
    21  
    22  func TestGetRootDir(t *testing.T) {
    23  	cases := map[string]struct {
    24  		dir       string
    25  		exp       string
    26  		errAssert assert.ErrorAssertionFunc
    27  	}{
    28  		"Valid": {
    29  			dir:       os.TempDir(),
    30  			exp:       os.TempDir(),
    31  			errAssert: assert.NoError,
    32  		},
    33  		"Invalid Path": {
    34  			dir:       "not/a/val id/path",
    35  			exp:       "",
    36  			errAssert: EqualError("workspace directory could not be found: stat not/a/val id/path: no such file or directory"),
    37  		},
    38  		"No Path": {
    39  			dir:       "",
    40  			exp:       defaultDir,
    41  			errAssert: assert.NoError,
    42  		},
    43  	}
    44  	for name, tc := range cases {
    45  		t.Run(name, func(t *testing.T) {
    46  			t.Setenv(envFilePathDir, tc.dir)
    47  			dir, err := GetWorkspaceDir(fog.New())
    48  			tc.errAssert(t, err)
    49  			assert.Equal(t, tc.exp, dir)
    50  		})
    51  	}
    52  }
    53  
    54  func TestGetRootDirWithPerms(t *testing.T) {
    55  	cases := map[string]struct {
    56  		dir       string
    57  		mode      fs.FileMode
    58  		errAssert assert.ErrorAssertionFunc
    59  	}{
    60  		"RWX": {
    61  			dir:       t.TempDir(),
    62  			mode:      0744,
    63  			errAssert: assert.NoError,
    64  		},
    65  		"Read Write": {
    66  			dir:       t.TempDir(),
    67  			mode:      0644,
    68  			errAssert: EqualError("workspace directory perms aren't accessible by remotecli"),
    69  		},
    70  		"Read": {
    71  			dir:       t.TempDir(),
    72  			mode:      0444,
    73  			errAssert: EqualError("workspace directory perms aren't accessible by remotecli"),
    74  		},
    75  		"No Access": {
    76  			dir:       t.TempDir(),
    77  			mode:      0000,
    78  			errAssert: EqualError("workspace directory perms aren't accessible by remotecli"),
    79  		},
    80  	}
    81  	for name, tc := range cases {
    82  		t.Run(name, func(t *testing.T) {
    83  			err := os.Chmod(tc.dir, tc.mode)
    84  			assert.NoError(t, err)
    85  			t.Setenv(envFilePathDir, tc.dir)
    86  
    87  			_, err = GetWorkspaceDir(fog.New())
    88  			tc.errAssert(t, err)
    89  		})
    90  	}
    91  }
    92  
    93  func TestNewWorkspace(t *testing.T) {
    94  	projectID, bannerID, storeID := "project", "banner", "store"
    95  	data := []byte(fmt.Sprintf(`
    96  {
    97  	"project_ID": "%s",
    98  	"banner_ID": "%s",
    99  	"store_ID": "%s"
   100  }`, projectID, bannerID, storeID))
   101  
   102  	filepath := createTempFile(t)
   103  	err := os.WriteFile(filepath, data, 0644)
   104  	assert.NoError(t, err)
   105  
   106  	expected := &workspace{
   107  		ProjectID: projectID,
   108  		BannerID:  bannerID,
   109  		StoreID:   storeID,
   110  	}
   111  	ws, err := newWorkspace(filepath)
   112  	assert.NoError(t, err)
   113  	assert.Equal(t, expected, ws)
   114  }
   115  
   116  func TestNewWorkspaceBadEnv(t *testing.T) {
   117  	expected := &workspace{}
   118  	ws, err := newWorkspace("a/bad/file/path")
   119  	assert.Error(t, err)
   120  	assert.Equal(t, expected, ws)
   121  }
   122  
   123  func TestLoadFiles(t *testing.T) {
   124  	projectID, bannerID, storeID := "project", "banner", "store"
   125  	ctx := context.Background()
   126  	dir := t.TempDir()
   127  	config := NewConfig(ctx, dir)
   128  	em := NewEmulator(ctx, &cliService{}, config)
   129  
   130  	makeTempFile := func(name, data string) (f *os.File) {
   131  		f, err := os.Create(filepath.Join(dir, name))
   132  		assert.NoError(t, err)
   133  		_, err = f.WriteString(data)
   134  		assert.NoError(t, err)
   135  		return f
   136  	}
   137  
   138  	data := "connect a b c d"
   139  	connectHistoryFile := makeTempFile(connectHistoryFileName, data)
   140  	defer connectHistoryFile.Close()
   141  	expectedConnectHistory := []string{data}
   142  
   143  	data = "echo hello"
   144  	sessionHistoryFile := makeTempFile(sessionHistoryFileName, data)
   145  	defer sessionHistoryFile.Close()
   146  	expectedSessionHistory := []string{data}
   147  
   148  	data = fmt.Sprintf(`
   149  {
   150  	"project_ID": "%s",
   151  	"banner_ID": "%s",
   152  	"store_ID": "%s"
   153  }`, projectID, bannerID, storeID)
   154  	workspaceFile := makeTempFile(workspaceFileName, data)
   155  	defer workspaceFile.Close()
   156  	expectedWorkspace := &workspace{
   157  		ProjectID: projectID,
   158  		BannerID:  bannerID,
   159  		StoreID:   storeID,
   160  	}
   161  
   162  	em.loadWorkspace(connectHistoryFile.Name(), sessionHistoryFile.Name(), workspaceFile.Name())
   163  
   164  	assert.Equal(t, expectedSessionHistory, em.sessionHistory.history)
   165  	assert.Equal(t, expectedConnectHistory, em.connectHistory.history)
   166  	assert.Equal(t, expectedWorkspace, em.workspace)
   167  }
   168  

View as plain text