HW8 is completed
parent
c804145070
commit
2716e5d53b
|
@ -5,7 +5,6 @@ import (
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"regexp"
|
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -25,11 +24,10 @@ func ReadDir(dir string) (Environment, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
// TODO: Не правильно!
|
|
||||||
key := file.Name()
|
key := file.Name()
|
||||||
key = strings.ReplaceAll(key, `=`, ``)
|
if !strings.Contains(key, `=`) && !strings.Contains(key, `;`) {
|
||||||
key = strings.ReplaceAll(key, `;`, ``)
|
e[key] = ExtractEnv(val)
|
||||||
e[key] = ExtractEnv(val)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,14 +54,8 @@ func ReadFile(filePath string) (string, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func ExtractEnv(text string) string {
|
func ExtractEnv(text string) string {
|
||||||
text = strings.TrimSpace(text)
|
text = strings.TrimRight(text, " ")
|
||||||
r := regexp.MustCompile("\"+")
|
text = strings.Replace(text, "\x00", "\n", -1)
|
||||||
text = r.ReplaceAllString(text, "")
|
|
||||||
// Удаляем все после /000
|
|
||||||
i := strings.IndexByte(text, 0)
|
|
||||||
if i > 0 {
|
|
||||||
text = text[:i]
|
|
||||||
}
|
|
||||||
|
|
||||||
return text
|
return text
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,26 +13,41 @@ func TestReadDir(t *testing.T) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
env, err := ReadDir("testdata/env/no")
|
env, err := ReadDir("testdata/env/no")
|
||||||
os.RemoveAll("testdata/env/no")
|
|
||||||
require.Equal(t, env, Environment{})
|
require.Equal(t, env, Environment{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
os.RemoveAll("testdata/env/no")
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Проверка = и ; в именах", func(t *testing.T) {
|
t.Run("Проверка = и ; в именах", func(t *testing.T) {
|
||||||
os.RemoveAll("testdata/env/no")
|
if err := os.RemoveAll("testdata/env/no"); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
if err := os.Mkdir("testdata/env/no", os.ModePerm); err != nil {
|
if err := os.Mkdir("testdata/env/no", os.ModePerm); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err := os.Create("testdata/env/no/TES=T1"); err != nil {
|
f1, err := os.Create("testdata/env/no/TES=T1")
|
||||||
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if _, err := os.Create("testdata/env/no/TES;T2"); err != nil {
|
f2, err := os.Create("testdata/env/no/TES;T2")
|
||||||
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
env, err := ReadDir("testdata/env/no")
|
env, err := ReadDir("testdata/env/no")
|
||||||
os.RemoveAll("testdata/env/no")
|
if err != nil {
|
||||||
require.Equal(t, env, Environment{"TEST1": "", "TEST2": ""})
|
return
|
||||||
|
}
|
||||||
|
require.Equal(t, env, Environment{})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
if err = f1.Close(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = f2.Close(); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if err = os.RemoveAll("testdata/env/no"); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,22 +67,22 @@ func TestReadFile(t *testing.T) {
|
||||||
func TestExtractEnv(t *testing.T) {
|
func TestExtractEnv(t *testing.T) {
|
||||||
|
|
||||||
t.Run("Zero escaping", func(t *testing.T) {
|
t.Run("Zero escaping", func(t *testing.T) {
|
||||||
require.Equal(t, "zero_escape", ExtractEnv("zero_escape\x00with new line"))
|
require.Equal(t, "zero_escape\nwith new line", ExtractEnv("zero_escape\x00with new line"))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Quotes", func(t *testing.T) {
|
t.Run("Quotes", func(t *testing.T) {
|
||||||
require.Equal(t, "quotes", ExtractEnv("\"quotes\""))
|
require.Equal(t, `"quotes"`, ExtractEnv("\"quotes\""))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Pre spacing", func(t *testing.T) {
|
t.Run("Pre spacing", func(t *testing.T) {
|
||||||
require.Equal(t, "pre_spased", ExtractEnv(" pre_spased"))
|
require.Equal(t, " pre_spased", ExtractEnv(" pre_spased"))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Post spacing", func(t *testing.T) {
|
t.Run("Post spacing", func(t *testing.T) {
|
||||||
require.Equal(t, "post_spased", ExtractEnv("post_spased "))
|
require.Equal(t, "post_spased", ExtractEnv("post_spased "))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("Multy spacing", func(t *testing.T) {
|
t.Run("Multy spacing", func(t *testing.T) {
|
||||||
require.Equal(t, "multy spased", ExtractEnv(" multy spased "))
|
require.Equal(t, " multy spased", ExtractEnv(" multy spased "))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,17 @@ import (
|
||||||
func RunCmd(cmd []string, env Environment) (returnCode int) {
|
func RunCmd(cmd []string, env Environment) (returnCode int) {
|
||||||
c := exec.Command(cmd[0], cmd[1:]...)
|
c := exec.Command(cmd[0], cmd[1:]...)
|
||||||
for k, v := range env {
|
for k, v := range env {
|
||||||
c.Env = append(os.Environ(), k+"="+v)
|
_, ok := os.LookupEnv(k)
|
||||||
|
if ok {
|
||||||
|
if err := os.Unsetenv(k); err != nil {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if v != "" {
|
||||||
|
if err := os.Setenv(k, v); err != nil {
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
c.Stdout = os.Stdout
|
c.Stdout = os.Stdout
|
||||||
c.Stderr = os.Stderr
|
c.Stderr = os.Stderr
|
||||||
|
|
|
@ -11,7 +11,7 @@ func TestRunCmd(t *testing.T) {
|
||||||
require.Equal(t, code, -1)
|
require.Equal(t, code, -1)
|
||||||
})
|
})
|
||||||
t.Run("Команда выполнилась", func(t *testing.T) {
|
t.Run("Команда выполнилась", func(t *testing.T) {
|
||||||
code := RunCmd([]string{"ls"}, Environment{"E1": "val1"})
|
code := RunCmd([]string{"cmd"}, Environment{"E1": "val1"})
|
||||||
require.Equal(t, code, 0)
|
require.Equal(t, code, 0)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue