github.com/mponton/terratest@v0.44.0/modules/logger/parser/store_test.go (about)

     1  package parser
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"path/filepath"
     7  	"testing"
     8  
     9  	"github.com/gruntwork-io/go-commons/files"
    10  	"github.com/mponton/terratest/modules/random"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func createLogWriter(t *testing.T) LogWriter {
    15  	logWriter := LogWriter{
    16  		lookup:    make(map[string]*os.File),
    17  		outputDir: t.TempDir(),
    18  	}
    19  	return logWriter
    20  }
    21  
    22  func TestEnsureDirectoryExistsCreatesDirectory(t *testing.T) {
    23  	t.Parallel()
    24  
    25  	dir := t.TempDir()
    26  
    27  	logger := NewTestLogger(t)
    28  	tmpd := filepath.Join(dir, "tmpdir")
    29  	assert.False(t, files.IsDir(tmpd))
    30  	ensureDirectoryExists(logger, tmpd)
    31  	assert.True(t, files.IsDir(tmpd))
    32  }
    33  
    34  func TestEnsureDirectoryExistsHandlesExistingDirectory(t *testing.T) {
    35  	t.Parallel()
    36  
    37  	dir := t.TempDir()
    38  
    39  	logger := NewTestLogger(t)
    40  	assert.True(t, files.IsDir(dir))
    41  	ensureDirectoryExists(logger, dir)
    42  	assert.True(t, files.IsDir(dir))
    43  }
    44  
    45  func TestGetOrCreateFileCreatesNewFile(t *testing.T) {
    46  	t.Parallel()
    47  
    48  	logWriter := createLogWriter(t)
    49  
    50  	logger := NewTestLogger(t)
    51  	testFileName := filepath.Join(logWriter.outputDir, t.Name()+".log")
    52  	assert.False(t, files.FileExists(testFileName))
    53  	file, err := logWriter.getOrCreateFile(logger, t.Name())
    54  	defer file.Close()
    55  	assert.Nil(t, err)
    56  	assert.NotNil(t, file)
    57  	assert.True(t, files.FileExists(testFileName))
    58  }
    59  
    60  func TestGetOrCreateFileCreatesNewFileIfTestNameHasDir(t *testing.T) {
    61  	t.Parallel()
    62  
    63  	logWriter := createLogWriter(t)
    64  
    65  	logger := NewTestLogger(t)
    66  	dirName := filepath.Join(logWriter.outputDir, "TestMain")
    67  	testFileName := filepath.Join(dirName, t.Name()+".log")
    68  	assert.False(t, files.IsDir(dirName))
    69  	assert.False(t, files.FileExists(testFileName))
    70  	file, err := logWriter.getOrCreateFile(logger, filepath.Join("TestMain", t.Name()))
    71  	defer file.Close()
    72  	assert.Nil(t, err)
    73  	assert.NotNil(t, file)
    74  	assert.True(t, files.IsDir(dirName))
    75  	assert.True(t, files.FileExists(testFileName))
    76  }
    77  
    78  func TestGetOrCreateChannelReturnsExistingFileHandle(t *testing.T) {
    79  	t.Parallel()
    80  
    81  	logWriter := createLogWriter(t)
    82  
    83  	testName := t.Name()
    84  	logger := NewTestLogger(t)
    85  	testFileName := filepath.Join(logWriter.outputDir, t.Name())
    86  	file, err := os.Create(testFileName)
    87  	if err != nil {
    88  		t.Fatalf("error creating test file %s", testFileName)
    89  	}
    90  	defer file.Close()
    91  
    92  	logWriter.lookup[testName] = file
    93  	lookupFile, err := logWriter.getOrCreateFile(logger, testName)
    94  	assert.Nil(t, err)
    95  	assert.Equal(t, lookupFile, file)
    96  }
    97  
    98  func TestCloseFilesClosesAll(t *testing.T) {
    99  	t.Parallel()
   100  
   101  	logWriter := createLogWriter(t)
   102  
   103  	logger := NewTestLogger(t)
   104  	testName := t.Name()
   105  	testFileName := filepath.Join(logWriter.outputDir, testName)
   106  	testFile, err := os.Create(testFileName)
   107  	if err != nil {
   108  		t.Fatalf("error creating test file %s", testFileName)
   109  	}
   110  	alternativeTestName := t.Name() + "Alternative"
   111  	alternativeTestFileName := filepath.Join(logWriter.outputDir, alternativeTestName)
   112  	alternativeTestFile, err := os.Create(alternativeTestFileName)
   113  	if err != nil {
   114  		t.Fatalf("error creating test file %s", alternativeTestFileName)
   115  	}
   116  	logWriter.lookup[testName] = testFile
   117  	logWriter.lookup[alternativeTestName] = alternativeTestFile
   118  
   119  	logWriter.closeFiles(logger)
   120  	err = testFile.Close()
   121  	assert.Contains(t, err.Error(), os.ErrClosed.Error())
   122  	err = alternativeTestFile.Close()
   123  	assert.Contains(t, err.Error(), os.ErrClosed.Error())
   124  }
   125  
   126  func TestWriteLogWritesToCorrectLogFile(t *testing.T) {
   127  	t.Parallel()
   128  
   129  	logWriter := createLogWriter(t)
   130  
   131  	logger := NewTestLogger(t)
   132  	testName := t.Name()
   133  	testFileName := filepath.Join(logWriter.outputDir, testName)
   134  	testFile, err := os.Create(testFileName)
   135  	if err != nil {
   136  		t.Fatalf("error creating test file %s", testFileName)
   137  	}
   138  	defer testFile.Close()
   139  	alternativeTestName := t.Name() + "Alternative"
   140  	alternativeTestFileName := filepath.Join(logWriter.outputDir, alternativeTestName)
   141  	alternativeTestFile, err := os.Create(alternativeTestFileName)
   142  	if err != nil {
   143  		t.Fatalf("error creating test file %s", alternativeTestFileName)
   144  	}
   145  	defer alternativeTestFile.Close()
   146  	logWriter.lookup[testName] = testFile
   147  	logWriter.lookup[alternativeTestName] = alternativeTestFile
   148  
   149  	randomString := random.UniqueId()
   150  	err = logWriter.writeLog(logger, testName, randomString)
   151  	assert.Nil(t, err)
   152  	alternativeRandomString := random.UniqueId()
   153  	err = logWriter.writeLog(logger, alternativeTestName, alternativeRandomString)
   154  	assert.Nil(t, err)
   155  
   156  	buf, err := ioutil.ReadFile(testFileName)
   157  	assert.Nil(t, err)
   158  	assert.Equal(t, string(buf), randomString+"\n")
   159  	buf, err = ioutil.ReadFile(alternativeTestFileName)
   160  	assert.Nil(t, err)
   161  	assert.Equal(t, string(buf), alternativeRandomString+"\n")
   162  }
   163  
   164  func TestWriteLogCreatesLogFileIfNotExists(t *testing.T) {
   165  	t.Parallel()
   166  
   167  	logWriter := createLogWriter(t)
   168  
   169  	logger := NewTestLogger(t)
   170  	testName := t.Name()
   171  	testFileName := filepath.Join(logWriter.outputDir, testName+".log")
   172  
   173  	randomString := random.UniqueId()
   174  	err := logWriter.writeLog(logger, testName, randomString)
   175  	assert.Nil(t, err)
   176  
   177  	assert.True(t, files.FileExists(testFileName))
   178  	buf, err := ioutil.ReadFile(testFileName)
   179  	assert.Nil(t, err)
   180  	assert.Equal(t, string(buf), randomString+"\n")
   181  }