github.com/RajatVaryani/mattermost-server@v5.11.1+incompatible/config/watcher_test.go (about)

     1  // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
     2  // See License.txt for license information.
     3  
     4  package config
     5  
     6  import (
     7  	"io/ioutil"
     8  	"os"
     9  	"path/filepath"
    10  	"testing"
    11  	"time"
    12  
    13  	"github.com/stretchr/testify/require"
    14  )
    15  
    16  func TestWatcherInvalidDirectory(t *testing.T) {
    17  	if testing.Short() {
    18  		t.Skip("skipping watcher test in short mode")
    19  	}
    20  
    21  	callback := func() {}
    22  	_, err := newWatcher("/does/not/exist", callback)
    23  	require.Error(t, err, "should have failed to watch a non-existent directory")
    24  }
    25  
    26  func TestWatcher(t *testing.T) {
    27  	if testing.Short() {
    28  		t.Skip("skipping watcher test in short mode")
    29  	}
    30  
    31  	tempDir, err := ioutil.TempDir("", "TestWatcher")
    32  	require.NoError(t, err)
    33  	defer os.RemoveAll(tempDir)
    34  
    35  	f, err := ioutil.TempFile(tempDir, "TestWatcher")
    36  	require.NoError(t, err)
    37  	defer f.Close()
    38  	defer os.Remove(f.Name())
    39  
    40  	called := make(chan bool)
    41  	callback := func() {
    42  		called <- true
    43  	}
    44  	watcher, err := newWatcher(f.Name(), callback)
    45  	require.NoError(t, err)
    46  	defer watcher.Close()
    47  
    48  	// Write to a different file
    49  	ioutil.WriteFile(filepath.Join(tempDir, "unrelated"), []byte("data"), 0644)
    50  	select {
    51  	case <-called:
    52  		t.Fatal("callback should not have been called for unrelated file")
    53  	case <-time.After(1 * time.Second):
    54  	}
    55  
    56  	// Write to the watched file
    57  	ioutil.WriteFile(f.Name(), []byte("data"), 0644)
    58  	select {
    59  	case <-called:
    60  	case <-time.After(5 * time.Second):
    61  		t.Fatal("callback should have been called when file written")
    62  	}
    63  }