Skip to content
This repository was archived by the owner on Jun 5, 2019. It is now read-only.

Commit 400c1cc

Browse files
MadCozBaddthrasher-
authored andcommitted
Improved test coverage and functions in common.go (thrasher-corp#266)
Improved directory creation, including permissions and expanded test coverage
1 parent ca344ba commit 400c1cc

File tree

5 files changed

+201
-17
lines changed

5 files changed

+201
-17
lines changed

common/common.go

+21-13
Original file line numberDiff line numberDiff line change
@@ -607,25 +607,33 @@ func GetDefaultDataDir(env string) string {
607607
if env == "windows" {
608608
return os.Getenv("APPDATA") + GetOSPathSlash() + "GoCryptoTrader"
609609
}
610-
return path.Join(os.ExpandEnv("$HOME"), ".gocryptotrader")
610+
dir, ok := os.LookupEnv("HOME")
611+
if !ok {
612+
return ""
613+
}
614+
return path.Join(dir, ".gocryptotrader")
611615
}
612616

613-
// CheckDir checks to see if a particular directory exists
614-
// and attempts to create it if desired, if it doesn't exist
615-
func CheckDir(dir string, create bool) error {
617+
// CreateDir creates a directory based on the supplied parameter
618+
func CreateDir(dir string) error {
616619
_, err := os.Stat(dir)
617620
if !os.IsNotExist(err) {
618621
return nil
619622
}
620623

621-
if !create {
622-
return fmt.Errorf("directory %s does not exist. Err: %s", dir, err)
623-
}
624-
625624
log.Warnf("Directory %s does not exist.. creating.", dir)
626-
err = os.MkdirAll(dir, 0777)
627-
if err != nil {
628-
return fmt.Errorf("failed to create dir. Err: %s", err)
629-
}
630-
return nil
625+
return os.MkdirAll(dir, 0770)
626+
}
627+
628+
// ChangePerm lists all the directories and files in an array
629+
func ChangePerm(directory string) error {
630+
return filepath.Walk(directory, func(path string, info os.FileInfo, err error) error {
631+
if err != nil {
632+
return err
633+
}
634+
if info.Mode().Perm() != 0770 {
635+
return os.Chmod(path, 0770)
636+
}
637+
return nil
638+
})
631639
}

common/common_test.go

+177
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@ package common
33
import (
44
"bytes"
55
"net/url"
6+
"os"
7+
"path"
68
"reflect"
9+
"runtime"
710
"strings"
811
"testing"
912
"time"
@@ -950,3 +953,177 @@ func TestTimeFromUnixTimestampFloat(t *testing.T) {
950953
t.Error("Test failed. Common TimeFromUnixTimestampFloat. Converted invalid syntax.")
951954
}
952955
}
956+
957+
func TestGetDefaultDataDir(t *testing.T) {
958+
switch runtime.GOOS {
959+
case "windows":
960+
dir, ok := os.LookupEnv("APPDATA")
961+
if !ok {
962+
t.Fatal("APPDATA is not set")
963+
}
964+
dir += GetOSPathSlash() + "GoCryptoTrader"
965+
actualOutput := GetDefaultDataDir("windows")
966+
if actualOutput != dir {
967+
t.Fatalf("Unexpected result. Got: %v Expected: %v", actualOutput, dir)
968+
}
969+
case "linux", "darwin":
970+
dir, ok := os.LookupEnv("HOME")
971+
if !ok {
972+
t.Fatal("HOME is not set")
973+
}
974+
dir += GetOSPathSlash() + ".gocryptotrader"
975+
actualOutput := GetDefaultDataDir(runtime.GOOS)
976+
if actualOutput != dir {
977+
t.Fatalf("Unexpected result. Got: %v Expected: %v", actualOutput, dir)
978+
}
979+
}
980+
}
981+
982+
func TestCreateDir(t *testing.T) {
983+
switch runtime.GOOS {
984+
case "windows":
985+
// test for a directory that exists
986+
dir, ok := os.LookupEnv("TEMP")
987+
if !ok {
988+
t.Fatal("LookupEnv failed. TEMP is not set")
989+
}
990+
err := CreateDir(dir)
991+
if err != nil {
992+
t.Fatalf("CreateDir failed. Err: %v", err)
993+
}
994+
995+
// test for creating a directory
996+
dir, ok = os.LookupEnv("APPDATA")
997+
if !ok {
998+
t.Fatal("LookupEnv failed. APPDATA is not set")
999+
}
1000+
dir = dir + GetOSPathSlash() + "GoCryptoTrader\\TestFileASDFG"
1001+
err = CreateDir(dir)
1002+
if err != nil {
1003+
t.Fatalf("CreateDir failed. Err: %v", err)
1004+
}
1005+
err = os.Remove(dir)
1006+
if err != nil {
1007+
t.Fatalf("Failed to remove file. Err: %v", err)
1008+
}
1009+
1010+
// test for looking up an invalid directory
1011+
err = CreateDir("")
1012+
if err == nil {
1013+
t.Fatal("expected err due to invalid path, but got nil")
1014+
}
1015+
case "linux":
1016+
// same tests for linux
1017+
dir := "/home"
1018+
err := CreateDir(dir)
1019+
if err != nil {
1020+
t.Fatalf("CreateDir failed. Err: %v", err)
1021+
}
1022+
var ok bool
1023+
dir, ok = os.LookupEnv("HOME")
1024+
if !ok {
1025+
t.Fatal("LookupEnv of HOME failed")
1026+
}
1027+
dir = path.Join(dir, ".gocryptotrader", "TestFileASFG")
1028+
err = CreateDir(dir)
1029+
if err != nil {
1030+
t.Errorf("CreateDir failed. Err: %s", err)
1031+
}
1032+
err = os.Remove(dir)
1033+
if err != nil {
1034+
t.Fatalf("Failed to remove file. Err: %v", err)
1035+
}
1036+
1037+
// test for creating an invalid directory
1038+
err = CreateDir("")
1039+
if err == nil {
1040+
t.Fatal("expected err due to invalid path, but got nil")
1041+
}
1042+
1043+
case "darwin":
1044+
// same test except for the invalid directory
1045+
dir := "/home"
1046+
err := CreateDir(dir)
1047+
if err != nil {
1048+
t.Fatalf("CreateDir failed. Err: %v", err)
1049+
}
1050+
var ok bool
1051+
dir, ok = os.LookupEnv("HOME")
1052+
if !ok {
1053+
t.Fatal("LookupEnv of HOME failed")
1054+
}
1055+
dir = path.Join(dir, ".gocryptotrader", "TestFileASFG")
1056+
err = CreateDir(dir)
1057+
if err != nil {
1058+
t.Fatalf("CreateDir failed. Err: %s", err)
1059+
}
1060+
err = os.Remove(dir)
1061+
if err != nil {
1062+
t.Fatalf("Failed to remove file. Err: %v", err)
1063+
}
1064+
1065+
err = CreateDir(":")
1066+
if err == nil {
1067+
t.Fatal("expected err due to invalid path, but got nil")
1068+
}
1069+
}
1070+
}
1071+
1072+
func TestChangePerm(t *testing.T) {
1073+
switch runtime.GOOS {
1074+
case "linux", "darwin":
1075+
if runtime.GOOS == "linux" {
1076+
err := ChangePerm("")
1077+
if err == nil {
1078+
t.Fatal("expected an error on non-existent path")
1079+
}
1080+
} else {
1081+
err := ChangePerm(":")
1082+
if err == nil {
1083+
t.Fatal("expected an error on non-existent path")
1084+
}
1085+
}
1086+
err := os.Mkdir(GetDefaultDataDir(runtime.GOOS)+GetOSPathSlash()+"TestFileASDFGHJ", 0777)
1087+
if err != nil {
1088+
t.Fatalf("Mkdir failed. Err: %v", err)
1089+
}
1090+
err = ChangePerm(GetDefaultDataDir(runtime.GOOS))
1091+
if err != nil {
1092+
t.Fatal("ChangePerm was unsuccessful")
1093+
}
1094+
var a os.FileInfo
1095+
a, err = os.Stat(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
1096+
if err != nil {
1097+
t.Fatalf("os.Stat failed. Err: %v", err)
1098+
}
1099+
if a.Mode().Perm() != 0770 {
1100+
t.Fatalf("expected file permissions differ. expecting 0770 got %#o", a.Mode().Perm())
1101+
}
1102+
err = RemoveFile(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
1103+
if err != nil {
1104+
t.Fatalf("RemoveFile failed. Err: %v", err)
1105+
}
1106+
1107+
case "windows":
1108+
err := ChangePerm("*")
1109+
if err == nil {
1110+
t.Fatal("expected an error on non-existent path")
1111+
}
1112+
err = os.Mkdir(GetDefaultDataDir(runtime.GOOS)+GetOSPathSlash()+"TestFileASDFGHJ", 0777)
1113+
if err != nil {
1114+
t.Fatalf("Mkdir failed. Err: %v", err)
1115+
}
1116+
err = ChangePerm(GetDefaultDataDir(runtime.GOOS))
1117+
if err != nil {
1118+
t.Fatalf("ChangePerm was unsuccessful. Err: %v", err)
1119+
}
1120+
_, err = os.Stat(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
1121+
if err != nil {
1122+
t.Fatalf("os.Stat failed. Err: %v", err)
1123+
}
1124+
err = RemoveFile(GetDefaultDataDir(runtime.GOOS) + GetOSPathSlash() + "TestFileASDFGHJ")
1125+
if err != nil {
1126+
t.Fatalf("RemoveFile failed. Err: %v", err)
1127+
}
1128+
}
1129+
}

config/config.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -1077,7 +1077,7 @@ func (c *Config) CheckLoggerConfig() error {
10771077

10781078
if len(c.Logging.File) > 0 {
10791079
logPath := path.Join(common.GetDefaultDataDir(runtime.GOOS), "logs")
1080-
err := common.CheckDir(logPath, true)
1080+
err := common.CreateDir(logPath)
10811081
if err != nil {
10821082
return err
10831083
}
@@ -1106,7 +1106,7 @@ func GetFilePath(file string) (string, error) {
11061106
oldDirs := []string{oldDir + ConfigFile, oldDir + EncryptedConfigFile}
11071107

11081108
newDir := common.GetDefaultDataDir(runtime.GOOS) + common.GetOSPathSlash()
1109-
err = common.CheckDir(newDir, true)
1109+
err = common.CreateDir(newDir)
11101110
if err != nil {
11111111
return "", err
11121112
}

main.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func main() {
8787
log.Fatalf("Failed to load config. Err: %s", err)
8888
}
8989

90-
err = common.CheckDir(bot.dataDir, true)
90+
err = common.CreateDir(bot.dataDir)
9191
if err != nil {
9292
log.Fatalf("Failed to open/create data directory: %s. Err: %s", bot.dataDir, err)
9393
}

testdata/README.md

-1
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,3 @@ When submitting a PR, please abide by our coding guidelines:
4242
If this framework helped you in any way, or you would like to support the developers working on it, please donate Bitcoin to:
4343

4444
***1F5zVDgNjorJ51oGebSvNCrSAHpwGkUdDB***
45-

0 commit comments

Comments
 (0)