mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: Read params from file for template/workspace creation (#1541)
* Read params from file for template/workspace creation * Use os.ReadFile * Refactor reading params into a separate module * Add comments and unit tests * Rename variable * Uncomment and fix unit test * Fix comment * Refactor tests * Fix unit tests for windows * Fix unit tests for Windows * Add comments for the hotfix
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
package cli
|
||||
|
||||
import (
|
||||
"os"
|
||||
"runtime"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestCreateParameterMapFromFile(t *testing.T) {
|
||||
t.Parallel()
|
||||
t.Run("CreateParameterMapFromFile", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
tempDir := t.TempDir()
|
||||
parameterFile, _ := os.CreateTemp(tempDir, "testParameterFile*.yaml")
|
||||
_, _ = parameterFile.WriteString("region: \"bananas\"\ndisk: \"20\"\n")
|
||||
|
||||
parameterMapFromFile, err := createParameterMapFromFile(parameterFile.Name())
|
||||
|
||||
expectedMap := map[string]string{
|
||||
"region": "bananas",
|
||||
"disk": "20",
|
||||
}
|
||||
|
||||
assert.Equal(t, expectedMap, parameterMapFromFile)
|
||||
assert.Nil(t, err)
|
||||
|
||||
removeTmpDirUntilSuccess(t, tempDir)
|
||||
})
|
||||
t.Run("WithEmptyFilename", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
parameterMapFromFile, err := createParameterMapFromFile("")
|
||||
|
||||
assert.Nil(t, parameterMapFromFile)
|
||||
assert.EqualError(t, err, "Parameter file name is not specified")
|
||||
})
|
||||
t.Run("WithInvalidFilename", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
parameterMapFromFile, err := createParameterMapFromFile("invalidFile.yaml")
|
||||
|
||||
assert.Nil(t, parameterMapFromFile)
|
||||
|
||||
// On Unix based systems, it is: `open invalidFile.yaml: no such file or directory`
|
||||
// On Windows, it is `open invalidFile.yaml: The system cannot find the file specified.`
|
||||
if runtime.GOOS == "windows" {
|
||||
assert.EqualError(t, err, "open invalidFile.yaml: The system cannot find the file specified.")
|
||||
} else {
|
||||
assert.EqualError(t, err, "open invalidFile.yaml: no such file or directory")
|
||||
}
|
||||
})
|
||||
t.Run("WithInvalidYAML", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
tempDir := t.TempDir()
|
||||
parameterFile, _ := os.CreateTemp(tempDir, "testParameterFile*.yaml")
|
||||
_, _ = parameterFile.WriteString("region = \"bananas\"\ndisk = \"20\"\n")
|
||||
|
||||
parameterMapFromFile, err := createParameterMapFromFile(parameterFile.Name())
|
||||
|
||||
assert.Nil(t, parameterMapFromFile)
|
||||
assert.EqualError(t, err, "yaml: unmarshal errors:\n line 1: cannot unmarshal !!str `region ...` into map[string]string")
|
||||
|
||||
removeTmpDirUntilSuccess(t, tempDir)
|
||||
})
|
||||
}
|
||||
|
||||
// Need this for Windows because of a known issue with Go:
|
||||
// https://github.com/golang/go/issues/52986
|
||||
func removeTmpDirUntilSuccess(t *testing.T, tempDir string) {
|
||||
t.Helper()
|
||||
t.Cleanup(func() {
|
||||
err := os.RemoveAll(tempDir)
|
||||
for err != nil {
|
||||
err = os.RemoveAll(tempDir)
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user