github.com/masterhung0112/hk_server/v5@v5.0.0-20220302090640-ec71aef15e1c/config/watcher_test.go (about)

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