From 9a8ea77f8dca2f5c575f77ba896883dfde5586b5 Mon Sep 17 00:00:00 2001 From: Othello Maurer Date: Tue, 5 Apr 2022 10:05:56 +0200 Subject: [PATCH 1/2] Log error if node-id file can not be written --- common/helper.go | 33 ++++++++++++++++++++++----------- common/helper_test.go | 21 +++++++++++++++++++++ 2 files changed, 43 insertions(+), 11 deletions(-) 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..fd172838 100644 --- a/common/helper_test.go +++ b/common/helper_test.go @@ -64,6 +64,27 @@ func TestGetCollectorIdFromNonExistingFile(t *testing.T) { } } +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, "/") From 1926df449ff6d8abbdeea8d1da5e8f4e416363f7 Mon Sep 17 00:00:00 2001 From: Othello Maurer Date: Tue, 5 Apr 2022 11:04:14 +0200 Subject: [PATCH 2/2] Fix directory existence test on Windows --- common/fs.go | 7 +++---- common/helper_test.go | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 4 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_test.go b/common/helper_test.go index fd172838..80a9be42 100644 --- a/common/helper_test.go +++ b/common/helper_test.go @@ -64,6 +64,25 @@ 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 {