From 8b416ac3bc622b09df1b6f10c2b6628f89d51be9 Mon Sep 17 00:00:00 2001 From: Othello Maurer Date: Thu, 28 Apr 2022 20:02:12 +0200 Subject: [PATCH] Fix directory existence test on Windows (#424) * Log error if node-id file can not be written * Fix directory existence test on Windows --- common/fs.go | 7 +++---- common/helper.go | 33 ++++++++++++++++++++++----------- common/helper_test.go | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 15 deletions(-) diff --git a/common/fs.go b/common/fs.go index 4a9c5253..5a0e800d 100644 --- a/common/fs.go +++ b/common/fs.go @@ -17,7 +17,6 @@ package common import ( "os" - "path" "path/filepath" "github.com/Graylog2/collector-sidecar/logger" @@ -47,11 +46,11 @@ func IsDir(filePath string) bool { } -func CreatePathToFile(filepath string) error { - dir := path.Dir(filepath) +func CreatePathToFile(path string) error { + dir := filepath.Dir(path) _, err := os.Open(dir) if err != nil { - log.Info("Trying to create directory for: ", filepath) + log.Info("Trying to create directory for: ", path) err = os.MkdirAll(dir, 0750) if err != nil { log.Error("Not able to create directory path: ", dir) diff --git a/common/helper.go b/common/helper.go index a3284f3d..bda01e71 100644 --- a/common/helper.go +++ b/common/helper.go @@ -80,17 +80,7 @@ func GetCollectorId(collectorId string) string { id := collectorId if strings.HasPrefix(collectorId, "file:") { filePath := strings.SplitAfterN(collectorId, ":", 2)[1] - err := FileExists(filePath) - if err != nil { - log.Info("node-id file doesn't exist, generating a new one") - CreatePathToFile(filePath) - ioutil.WriteFile(filePath, []byte(RandomUuid()), 0644) - } - file, err := ioutil.ReadFile(filePath) - if err != nil { - log.Fatal("Can not read node-id file: ", err) - } - id = strings.Trim(string(file), " \n") + id = idFromFile(filePath) } if id != "" && !cfgfile.ValidateConfig() { @@ -99,6 +89,27 @@ func GetCollectorId(collectorId string) string { return id } +func idFromFile(filePath string) string { + err := FileExists(filePath) + if err != nil { + log.Info("node-id file doesn't exist, generating a new one") + err = CreatePathToFile(filePath) + if err == nil { + err = ioutil.WriteFile(filePath, []byte(RandomUuid()), 0644) + if err != nil { + log.Error("Can not write node-id file: ", err) + } + } + } + + file, err := ioutil.ReadFile(filePath) + if err != nil { + log.Error("Can not read node-id file: ", err) + return "" + } + return strings.Trim(string(file), " \n") +} + func RandomUuid() string { return uuid.NewRandom().String() } diff --git a/common/helper_test.go b/common/helper_test.go index b0032c7f..80a9be42 100644 --- a/common/helper_test.go +++ b/common/helper_test.go @@ -64,6 +64,46 @@ func TestGetCollectorIdFromNonExistingFile(t *testing.T) { } } +func TestGetCollectorIdFromNonExistingPath(t *testing.T) { + dir, err := ioutil.TempDir("", "test-node-id") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + tmpfile := filepath.Join(dir, "subdir", "node-id") + result := GetCollectorId("file:/" + tmpfile) + match, err := regexp.Match("^[0-9a-f]{8}-", []byte(result)) + if err != nil { + t.Fatal(err) + } + + if !match { + t.Fail() + } +} + +func TestCollectorIdFileNotWritable(t *testing.T) { + dir, err := ioutil.TempDir("", "test-node-id") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(dir) + + nodeIdDir := filepath.Join(dir, "non-writable") + + err = os.MkdirAll(nodeIdDir, 0500) + if err != nil { + t.Fatal(err) + } + + tmpfile := filepath.Join(nodeIdDir, "node-id") + result := GetCollectorId("file:/" + tmpfile) + if result != "" { + t.Fatalf("Unwritable node-id file should result in empty node-id") + } +} + func TestEncloseWithWithoutAction(t *testing.T) { content := "/some regex/" result := EncloseWith(content, "/")