Skip to content

Commit

Permalink
Merge pull request #33 from foodora/NO-TIKET_add_func_to_export_envva…
Browse files Browse the repository at this point in the history
…rs_from_file

Added package ranger_utils
  • Loading branch information
guilherme-santos committed Feb 5, 2018
2 parents e8e1ad4 + 72df670 commit c495030
Show file tree
Hide file tree
Showing 3 changed files with 212 additions and 2 deletions.
6 changes: 4 additions & 2 deletions ranger_http/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@ import (

// PanicHandler is handling app panics gracefully
func PanicHandler() func(http.ResponseWriter, *http.Request, interface{}) {
return func(w http.ResponseWriter, r *http.Request, ps interface{}) {
logger.Error(fmt.Sprintf("%s %s internalError", r.Method, r.RequestURI), ranger_logger.CreateFieldsFromRequest(r))
return func(w http.ResponseWriter, r *http.Request, rcv interface{}) {
loggerData := ranger_logger.CreateFieldsFromRequest(r)
loggerData["error"] = rcv
logger.Error(fmt.Sprintf("%s %s internalError", r.Method, r.RequestURI), loggerData)
WriteErrorResponse(w, http.StatusInternalServerError, NewErrorResponseData("internalServerError", "Internal server error", ""))
}
}
Expand Down
38 changes: 38 additions & 0 deletions ranger_os/export_envvar.go
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
}
170 changes: 170 additions & 0 deletions ranger_os/export_envvar_test.go
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"))
}

0 comments on commit c495030

Please sign in to comment.