github.com/superfly/nomad@v0.10.5-fly/command/agent/log_file_test.go (about)

     1  package agent
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/hashicorp/logutils"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  const (
    15  	testFileName = "Nomad.log"
    16  	testDuration = 2 * time.Second
    17  	testBytes    = 10
    18  )
    19  
    20  func TestLogFile_timeRotation(t *testing.T) {
    21  	t.Parallel()
    22  	require := require.New(t)
    23  
    24  	tempDir, err := ioutil.TempDir("", "LogWriterTimeTest")
    25  	require.NoError(err)
    26  
    27  	defer os.Remove(tempDir)
    28  
    29  	filt := LevelFilter()
    30  	logFile := logFile{
    31  		logFilter: filt,
    32  		fileName:  testFileName,
    33  		logPath:   tempDir,
    34  		duration:  testDuration,
    35  	}
    36  	logFile.Write([]byte("Hello World"))
    37  	time.Sleep(2 * time.Second)
    38  	logFile.Write([]byte("Second File"))
    39  	want := 2
    40  	if got, _ := ioutil.ReadDir(tempDir); len(got) != want {
    41  		t.Errorf("Expected %d files, got %v file(s)", want, len(got))
    42  	}
    43  }
    44  
    45  func TestLogFile_openNew(t *testing.T) {
    46  	t.Parallel()
    47  	require := require.New(t)
    48  
    49  	tempDir, err := ioutil.TempDir("", "LogWriterOpenTest")
    50  	require.NoError(err)
    51  	defer os.Remove(tempDir)
    52  
    53  	logFile := logFile{fileName: testFileName, logPath: tempDir, duration: testDuration}
    54  	require.NoError(logFile.openNew())
    55  
    56  	_, err = ioutil.ReadFile(logFile.FileInfo.Name())
    57  	require.NoError(err)
    58  }
    59  
    60  func TestLogFile_byteRotation(t *testing.T) {
    61  	t.Parallel()
    62  	require := require.New(t)
    63  
    64  	tempDir, err := ioutil.TempDir("", "LogWriterByteTest")
    65  	require.NoError(err)
    66  	defer os.Remove(tempDir)
    67  
    68  	filt := LevelFilter()
    69  	filt.MinLevel = logutils.LogLevel("INFO")
    70  	logFile := logFile{
    71  		logFilter: filt,
    72  		fileName:  testFileName,
    73  		logPath:   tempDir,
    74  		MaxBytes:  testBytes,
    75  		duration:  24 * time.Hour,
    76  	}
    77  	logFile.Write([]byte("Hello World"))
    78  	logFile.Write([]byte("Second File"))
    79  	want := 2
    80  	tempFiles, _ := ioutil.ReadDir(tempDir)
    81  	require.Equal(want, len(tempFiles))
    82  }
    83  
    84  func TestLogFile_logLevelFiltering(t *testing.T) {
    85  	t.Parallel()
    86  	require := require.New(t)
    87  
    88  	tempDir, err := ioutil.TempDir("", "LogWriterFilterTest")
    89  	require.NoError(err)
    90  	defer os.Remove(tempDir)
    91  	filt := LevelFilter()
    92  	logFile := logFile{
    93  		logFilter: filt,
    94  		fileName:  testFileName,
    95  		logPath:   tempDir,
    96  		MaxBytes:  testBytes,
    97  		duration:  testDuration,
    98  	}
    99  	logFile.Write([]byte("[INFO] This is an info message"))
   100  	logFile.Write([]byte("[DEBUG] This is a debug message"))
   101  	logFile.Write([]byte("[ERR] This is an error message"))
   102  	want := 2
   103  	tempFiles, _ := ioutil.ReadDir(tempDir)
   104  	require.Equal(want, len(tempFiles))
   105  }
   106  
   107  func TestLogFile_deleteArchives(t *testing.T) {
   108  	t.Parallel()
   109  	require := require.New(t)
   110  
   111  	tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesTest")
   112  	require.NoError(err)
   113  	defer os.Remove(tempDir)
   114  
   115  	filt := LevelFilter()
   116  	filt.MinLevel = logutils.LogLevel("INFO")
   117  	logFile := logFile{
   118  		logFilter: filt,
   119  		fileName:  testFileName,
   120  		logPath:   tempDir,
   121  		MaxBytes:  testBytes,
   122  		duration:  24 * time.Hour,
   123  		MaxFiles:  1,
   124  	}
   125  	logFile.Write([]byte("[INFO] Hello World"))
   126  	logFile.Write([]byte("[INFO] Second File"))
   127  	logFile.Write([]byte("[INFO] Third File"))
   128  	want := 2
   129  	tempFiles, _ := ioutil.ReadDir(tempDir)
   130  
   131  	require.Equal(want, len(tempFiles))
   132  
   133  	for _, tempFile := range tempFiles {
   134  		var bytes []byte
   135  		var err error
   136  		path := filepath.Join(tempDir, tempFile.Name())
   137  		if bytes, err = ioutil.ReadFile(path); err != nil {
   138  			t.Errorf(err.Error())
   139  			return
   140  		}
   141  		contents := string(bytes)
   142  
   143  		require.NotEqual("[INFO] Hello World", contents, "oldest log should have been deleted")
   144  	}
   145  }
   146  
   147  func TestLogFile_deleteArchivesDisabled(t *testing.T) {
   148  	t.Parallel()
   149  
   150  	require := require.New(t)
   151  	tempDir, err := ioutil.TempDir("", "LogWriterDeleteArchivesDisabledTest")
   152  	require.NoError(err)
   153  	defer os.Remove(tempDir)
   154  
   155  	filt := LevelFilter()
   156  	filt.MinLevel = logutils.LogLevel("INFO")
   157  	logFile := logFile{
   158  		logFilter: filt,
   159  		fileName:  testFileName,
   160  		logPath:   tempDir,
   161  		MaxBytes:  testBytes,
   162  		duration:  24 * time.Hour,
   163  		MaxFiles:  0,
   164  	}
   165  	logFile.Write([]byte("[INFO] Hello World"))
   166  	logFile.Write([]byte("[INFO] Second File"))
   167  	logFile.Write([]byte("[INFO] Third File"))
   168  	want := 3
   169  	tempFiles, _ := ioutil.ReadDir(tempDir)
   170  	require.Equal(want, len(tempFiles))
   171  }