/modules/logger/parser/store_test.go

https://github.com/gruntwork-io/terratest · Go · 190 lines · 157 code · 33 blank · 0 comment · 23 complexity · d8c0c839887350bfbd80d259fe2891e0 MD5 · raw file

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