github.com/ranjib/nomad@v0.1.1-0.20160225204057-97751b02f70b/client/driver/logging/rotator_test.go (about)

     1  package logging
     2  
     3  import (
     4  	"io/ioutil"
     5  	"log"
     6  	"os"
     7  	"path/filepath"
     8  	"testing"
     9  	"time"
    10  )
    11  
    12  var (
    13  	logger       = log.New(os.Stdout, "", log.LstdFlags)
    14  	pathPrefix   = "logrotator"
    15  	baseFileName = "redis.stdout"
    16  )
    17  
    18  func TestFileRotator_IncorrectPath(t *testing.T) {
    19  	if _, err := NewFileRotator("/foo", baseFileName, 10, 10, logger); err == nil {
    20  		t.Fatalf("expected error")
    21  	}
    22  }
    23  
    24  func TestFileRotator_CreateNewFile(t *testing.T) {
    25  	var path string
    26  	var err error
    27  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
    28  		t.Fatalf("test setup err: %v", err)
    29  	}
    30  	defer os.RemoveAll(path)
    31  
    32  	_, err = NewFileRotator(path, baseFileName, 10, 10, logger)
    33  	if err != nil {
    34  		t.Fatalf("test setup err: %v", err)
    35  	}
    36  
    37  	if _, err := os.Stat(filepath.Join(path, "redis.stdout.0")); err != nil {
    38  		t.Fatalf("expected file")
    39  	}
    40  }
    41  
    42  func TestFileRotator_OpenLastFile(t *testing.T) {
    43  	var path string
    44  	var err error
    45  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
    46  		t.Fatalf("test setup err: %v", err)
    47  	}
    48  	defer os.RemoveAll(path)
    49  
    50  	fname1 := filepath.Join(path, "redis.stdout.0")
    51  	fname2 := filepath.Join(path, "redis.stdout.2")
    52  	if _, err := os.Create(fname1); err != nil {
    53  		t.Fatalf("test setup failure: %v", err)
    54  	}
    55  	if _, err := os.Create(fname2); err != nil {
    56  		t.Fatalf("test setup failure: %v", err)
    57  	}
    58  
    59  	fr, err := NewFileRotator(path, baseFileName, 10, 10, logger)
    60  	if err != nil {
    61  		t.Fatalf("test setup err: %v", err)
    62  	}
    63  
    64  	if fr.currentFile.Name() != fname2 {
    65  		t.Fatalf("expected current file: %v, got: %v", fname2, fr.currentFile.Name())
    66  	}
    67  }
    68  
    69  func TestFileRotator_WriteToCurrentFile(t *testing.T) {
    70  	var path string
    71  	var err error
    72  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
    73  		t.Fatalf("test setup err: %v", err)
    74  	}
    75  	defer os.RemoveAll(path)
    76  
    77  	fname1 := filepath.Join(path, "redis.stdout.0")
    78  	if _, err := os.Create(fname1); err != nil {
    79  		t.Fatalf("test setup failure: %v", err)
    80  	}
    81  
    82  	fr, err := NewFileRotator(path, baseFileName, 10, 5, logger)
    83  	if err != nil {
    84  		t.Fatalf("test setup err: %v", err)
    85  	}
    86  
    87  	fr.Write([]byte("abcde"))
    88  	time.Sleep(200 * time.Millisecond)
    89  	fi, err := os.Stat(fname1)
    90  	if err != nil {
    91  		t.Fatalf("error getting the file info: %v", err)
    92  	}
    93  	if fi.Size() != 5 {
    94  		t.Fatalf("expected size: %v, actual: %v", 5, fi.Size())
    95  	}
    96  }
    97  
    98  func TestFileRotator_RotateFiles(t *testing.T) {
    99  	var path string
   100  	var err error
   101  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
   102  		t.Fatalf("test setup err: %v", err)
   103  	}
   104  	defer os.RemoveAll(path)
   105  
   106  	fr, err := NewFileRotator(path, baseFileName, 10, 5, logger)
   107  	if err != nil {
   108  		t.Fatalf("test setup err: %v", err)
   109  	}
   110  
   111  	str := "abcdefgh"
   112  	nw, err := fr.Write([]byte(str))
   113  	time.Sleep(200 * time.Millisecond)
   114  	if err != nil {
   115  		t.Fatalf("got error while writing: %v", err)
   116  	}
   117  	if nw != len(str) {
   118  		t.Fatalf("expected %v, got %v", len(str), nw)
   119  	}
   120  	fname1 := filepath.Join(path, "redis.stdout.0")
   121  	fi, err := os.Stat(fname1)
   122  	if err != nil {
   123  		t.Fatalf("error getting the file info: %v", err)
   124  	}
   125  	if fi.Size() != 5 {
   126  		t.Fatalf("expected size: %v, actual: %v", 5, fi.Size())
   127  	}
   128  
   129  	fname2 := filepath.Join(path, "redis.stdout.1")
   130  	if _, err := os.Stat(fname2); err != nil {
   131  		t.Fatalf("expected file %v to exist", fname2)
   132  	}
   133  
   134  	if fi2, err := os.Stat(fname2); err == nil {
   135  		if fi2.Size() != 3 {
   136  			t.Fatalf("expected size: %v, actual: %v", 3, fi2.Size())
   137  		}
   138  	} else {
   139  		t.Fatalf("error getting the file info: %v", err)
   140  	}
   141  }
   142  
   143  func TestFileRotator_WriteRemaining(t *testing.T) {
   144  	var path string
   145  	var err error
   146  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
   147  		t.Fatalf("test setup err: %v", err)
   148  	}
   149  	defer os.RemoveAll(path)
   150  
   151  	fname1 := filepath.Join(path, "redis.stdout.0")
   152  	if f, err := os.Create(fname1); err == nil {
   153  		f.Write([]byte("abcd"))
   154  	} else {
   155  		t.Fatalf("test setup failure: %v", err)
   156  	}
   157  
   158  	fr, err := NewFileRotator(path, baseFileName, 10, 5, logger)
   159  	if err != nil {
   160  		t.Fatalf("test setup err: %v", err)
   161  	}
   162  
   163  	str := "efghijkl"
   164  	nw, err := fr.Write([]byte(str))
   165  	if err != nil {
   166  		t.Fatalf("got error while writing: %v", err)
   167  	}
   168  	time.Sleep(200 * time.Millisecond)
   169  	if nw != len(str) {
   170  		t.Fatalf("expected %v, got %v", len(str), nw)
   171  	}
   172  	fi, err := os.Stat(fname1)
   173  	if err != nil {
   174  		t.Fatalf("error getting the file info: %v", err)
   175  	}
   176  	if fi.Size() != 5 {
   177  		t.Fatalf("expected size: %v, actual: %v", 5, fi.Size())
   178  	}
   179  
   180  	fname2 := filepath.Join(path, "redis.stdout.1")
   181  	if _, err := os.Stat(fname2); err != nil {
   182  		t.Fatalf("expected file %v to exist", fname2)
   183  	}
   184  
   185  	if fi2, err := os.Stat(fname2); err == nil {
   186  		if fi2.Size() != 5 {
   187  			t.Fatalf("expected size: %v, actual: %v", 5, fi2.Size())
   188  		}
   189  	} else {
   190  		t.Fatalf("error getting the file info: %v", err)
   191  	}
   192  
   193  	fname3 := filepath.Join(path, "redis.stdout.2")
   194  	if _, err := os.Stat(fname3); err != nil {
   195  		t.Fatalf("expected file %v to exist", fname3)
   196  	}
   197  
   198  	if fi3, err := os.Stat(fname3); err == nil {
   199  		if fi3.Size() != 2 {
   200  			t.Fatalf("expected size: %v, actual: %v", 2, fi3.Size())
   201  		}
   202  	} else {
   203  		t.Fatalf("error getting the file info: %v", err)
   204  	}
   205  
   206  }
   207  
   208  func TestFileRotator_PurgeOldFiles(t *testing.T) {
   209  	var path string
   210  	var err error
   211  	if path, err = ioutil.TempDir("", pathPrefix); err != nil {
   212  		t.Fatalf("test setup err: %v", err)
   213  	}
   214  	defer os.RemoveAll(path)
   215  
   216  	fr, err := NewFileRotator(path, baseFileName, 2, 2, logger)
   217  	if err != nil {
   218  		t.Fatalf("test setup err: %v", err)
   219  	}
   220  
   221  	str := "abcdeghijklmn"
   222  	nw, err := fr.Write([]byte(str))
   223  	if err != nil {
   224  		t.Fatalf("got error while writing: %v", err)
   225  	}
   226  	if nw != len(str) {
   227  		t.Fatalf("expected %v, got %v", len(str), nw)
   228  	}
   229  
   230  	time.Sleep(1 * time.Second)
   231  	f, err := ioutil.ReadDir(path)
   232  	if err != nil {
   233  		t.Fatalf("test error: %v", err)
   234  	}
   235  
   236  	if len(f) != 2 {
   237  		t.Fatalf("expected number of files: %v, got: %v", 2, len(f))
   238  	}
   239  }