From 05e835e48c659893fd934a46927675ad0975d752 Mon Sep 17 00:00:00 2001 From: aler9 <46489434+aler9@users.noreply.github.com> Date: Wed, 13 Jan 2021 20:48:57 +0100 Subject: [PATCH] confwatcher: add tests --- internal/confwatcher/confwatcher_test.go | 126 +++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 internal/confwatcher/confwatcher_test.go diff --git a/internal/confwatcher/confwatcher_test.go b/internal/confwatcher/confwatcher_test.go new file mode 100644 index 00000000..32db8cab --- /dev/null +++ b/internal/confwatcher/confwatcher_test.go @@ -0,0 +1,126 @@ +package confwatcher + +import ( + "io/ioutil" + "os" + "testing" + "time" + + "github.com/stretchr/testify/require" +) + +func writeTempFile(byts []byte) (string, error) { + tmpf, err := ioutil.TempFile(os.TempDir(), "confwatcher-") + if err != nil { + return "", err + } + defer tmpf.Close() + + _, err = tmpf.Write(byts) + if err != nil { + return "", err + } + + return tmpf.Name(), nil +} + +func TestNoFile(t *testing.T) { + _, err := New("/nonexistent") + require.Error(t, err) +} + +func TestFileWrite(t *testing.T) { + fpath, err := writeTempFile([]byte("{}")) + require.NoError(t, err) + + w, err := New(fpath) + require.NoError(t, err) + defer w.Close() + + func() { + f, err := os.Create(fpath) + require.NoError(t, err) + defer f.Close() + + _, err = f.Write([]byte("{}")) + require.NoError(t, err) + }() + + select { + case <-w.Watch(): + case <-time.After(500 * time.Millisecond): + t.Errorf("timed out") + return + } +} + +func TestFileWriteMultipleTimes(t *testing.T) { + fpath, err := writeTempFile([]byte("{}")) + require.NoError(t, err) + + w, err := New(fpath) + require.NoError(t, err) + defer w.Close() + + func() { + f, err := os.Create(fpath) + require.NoError(t, err) + defer f.Close() + + _, err = f.Write([]byte("{}")) + require.NoError(t, err) + }() + + time.Sleep(10 * time.Millisecond) + + func() { + f, err := os.Create(fpath) + require.NoError(t, err) + defer f.Close() + + _, err = f.Write([]byte("{}")) + require.NoError(t, err) + }() + + select { + case <-w.Watch(): + case <-time.After(500 * time.Millisecond): + t.Errorf("timed out") + return + } + + select { + case <-time.After(500 * time.Millisecond): + case <-w.Watch(): + t.Errorf("should not happen") + return + } +} + +/*func TestFileDeleteCreate(t *testing.T) { + fpath, err := writeTempFile([]byte("{}")) + require.NoError(t, err) + + w, err := New(fpath) + require.NoError(t, err) + defer w.Close() + + os.Remove(fpath) + time.Sleep(10 * time.Millisecond) + + func() { + f, err := os.Create(fpath) + require.NoError(t, err) + defer f.Close() + + _, err = f.Write([]byte("{}")) + require.NoError(t, err) + }() + + select { + case <-w.Watch(): + //case <-time.After(500 * time.Millisecond): + // t.Errorf("timed out") + // return + } +}*/