diff --git a/glusterd2/main.go b/glusterd2/main.go index 77d44866..7f7a5ca6 100644 --- a/glusterd2/main.go +++ b/glusterd2/main.go @@ -163,7 +163,7 @@ func main() { } case unix.SIGUSR1: log.Info("Received SIGUSR1. Dumping statedump") - utils.WriteStatedump() + utils.WriteStatedump(config.GetString("rundir")) default: continue } diff --git a/pkg/utils/statedump.go b/pkg/utils/statedump.go index 24e57faf..6324afb2 100644 --- a/pkg/utils/statedump.go +++ b/pkg/utils/statedump.go @@ -11,12 +11,12 @@ import ( "time" log "github.com/sirupsen/logrus" - config "github.com/spf13/viper" ) // WriteStatedump writes statedump information to a file. The file name is -// of the format glusterd2..dump. -func WriteStatedump() { +// of the format glusterd2..dump.. This file will be +// written to the directory passed. +func WriteStatedump(dirpath string) { // Run the expvar http handler w := httptest.NewRecorder() @@ -27,10 +27,9 @@ func WriteStatedump() { return } - dumpDir := config.GetString("rundir") dumpFileName := fmt.Sprintf("glusterd2.%s.dump.%s", strconv.Itoa(os.Getpid()), strconv.Itoa(int(time.Now().Unix()))) - dumpPath := path.Join(dumpDir, dumpFileName) + dumpPath := path.Join(dirpath, dumpFileName) if err := ioutil.WriteFile(dumpPath, respBody, 0644); err != nil { log.WithError(err).WithField("file", dumpPath).Error("Failed to write statedump to file") diff --git a/pkg/utils/statedump_test.go b/pkg/utils/statedump_test.go index d5db8b8a..2ea39565 100644 --- a/pkg/utils/statedump_test.go +++ b/pkg/utils/statedump_test.go @@ -2,18 +2,26 @@ package utils import ( "fmt" + "io/ioutil" "os" + "path/filepath" "strconv" "testing" - "time" - "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) func TestWriteStatedump(t *testing.T) { - filename := fmt.Sprintf("glusterd2.%s.dump.%s", - strconv.Itoa(os.Getpid()), strconv.Itoa(int(time.Now().Unix()))) - WriteStatedump() - assert.FileExists(t, filename) - os.Remove(filename) + r := require.New(t) + + dir, err := ioutil.TempDir("", t.Name()) + r.Nil(err) + defer os.RemoveAll(dir) + + WriteStatedump(dir) + + filePattern := fmt.Sprintf("glusterd2.%s.dump.*", strconv.Itoa(os.Getpid())) + matches, err := filepath.Glob(filepath.Join(dir, filePattern)) + r.Nil(err) + r.NotEmpty(matches) }