-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #33 from foodora/NO-TIKET_add_func_to_export_envva…
…rs_from_file Added package ranger_utils
- Loading branch information
Showing
3 changed files
with
212 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package ranger_os | ||
|
||
import ( | ||
"bufio" | ||
"os" | ||
"strings" | ||
) | ||
|
||
func ExportEnvVars(filename string) error { | ||
file, err := os.Open(filename) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
scanner := bufio.NewScanner(file) | ||
for scanner.Scan() { | ||
line := strings.TrimSpace(scanner.Text()) | ||
if line == "" || strings.HasPrefix(line, "#") { | ||
continue | ||
} | ||
|
||
if strings.HasPrefix(line, "export ") { | ||
line = line[7:] | ||
} | ||
|
||
token := strings.SplitN(line, "=", 2) | ||
// Remove spaces, ' and " | ||
key := strings.Trim(strings.Trim(strings.TrimSpace(token[0]), "'"), "\"") | ||
value := strings.Trim(strings.Trim(strings.TrimSpace(token[1]), "'"), "\"") | ||
|
||
os.Setenv(key, value) | ||
} | ||
if err := scanner.Err(); err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
package ranger_os_test | ||
|
||
import ( | ||
"io/ioutil" | ||
"os" | ||
"testing" | ||
|
||
goranger "github.com/foodora/go-ranger/ranger_os" | ||
"github.com/stretchr/testify/assert" | ||
) | ||
|
||
func TestExportEnvVars_InvalidFile(t *testing.T) { | ||
err := goranger.ExportEnvVars("./invalid-file.sh") | ||
assert.True(t, os.IsNotExist(err)) | ||
} | ||
|
||
func TestExportEnvVars_IgnoreEmptyLines(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte("\n\n") | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
} | ||
|
||
func TestExportEnvVars_IgnoreComments(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`# ignore empty line`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
} | ||
|
||
func TestExportEnvVars_WithSpaceInKey(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`export COMPANY =pandora`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithSpaceInValue(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`export COMPANY= pandora`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithoutExport(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`COMPANY=pandora`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithSingleQuote(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`COMPANY='pandora'`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithDoubleQuote(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`COMPANY="pandora"`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithoutQuotes(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`COMPANY=pandora`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_WithEmptyValue(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(`COMPANY=`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "", os.Getenv("COMPANY")) | ||
} | ||
|
||
func TestExportEnvVars_AllTogether(t *testing.T) { | ||
tmpfile, _ := ioutil.TempFile("", "go-ranger-utils") | ||
defer os.Remove(tmpfile.Name()) | ||
|
||
content := []byte(` | ||
# ignore empty line | ||
# comments too | ||
WITH_SPACE_KEY =pandora | ||
WITH_SPACE_VALUE= pandora | ||
WITHOUT_EXPORT=1 | ||
export SINGLE_QUOTES=' pandora' | ||
export DOUBLE_QUOTES=" pandora" | ||
export WITHOUT_QUOTES=pandora | ||
export EMPTY_VALUE= | ||
`) | ||
if _, err := tmpfile.Write(content); err != nil { | ||
t.Fatal(err) | ||
} | ||
|
||
err := goranger.ExportEnvVars(tmpfile.Name()) | ||
assert.Nil(t, err) | ||
assert.Equal(t, "pandora", os.Getenv("WITH_SPACE_KEY")) | ||
assert.Equal(t, "pandora", os.Getenv("WITH_SPACE_VALUE")) | ||
assert.Equal(t, "1", os.Getenv("WITHOUT_EXPORT")) | ||
assert.Equal(t, " pandora", os.Getenv("SINGLE_QUOTES")) | ||
assert.Equal(t, " pandora", os.Getenv("DOUBLE_QUOTES")) | ||
assert.Equal(t, "pandora", os.Getenv("WITHOUT_QUOTES")) | ||
assert.Equal(t, "", os.Getenv("EMPTY_VALUE")) | ||
} |