gitlab.com/jfprevost/gitlab-runner-notlscheck@v11.11.4+incompatible/commands/helpers/file_archiver_test.go (about) 1 package helpers 2 3 import ( 4 "os" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/assert" 9 "github.com/stretchr/testify/require" 10 ) 11 12 const fileArchiverUntrackedFile = "untracked_test_file.txt" 13 const fileArchiverUntrackedUnicodeFile = "неотслеживаемый_тестовый_файл.txt" 14 const fileArchiverArchiveZipFile = "archive.zip" 15 const fileArchiverOtherFile = "other_test_file.txt" 16 const fileArchiverNotExistingFile = "not_existing_file.txt" 17 const fileArchiverAbsoluteFile = "/absolute.txt" 18 const fileArchiverRelativeFile = "../../../relative.txt" 19 20 func TestCacheArchiverAddingUntrackedFiles(t *testing.T) { 21 writeTestFile(t, artifactsTestArchivedFile) 22 defer os.Remove(artifactsTestArchivedFile) 23 24 writeTestFile(t, artifactsTestArchivedFile2) 25 defer os.Remove(artifactsTestArchivedFile2) 26 27 f := fileArchiver{ 28 Untracked: true, 29 } 30 err := f.enumerate() 31 assert.NoError(t, err) 32 assert.Len(t, f.sortedFiles(), 2) 33 assert.Contains(t, f.sortedFiles(), artifactsTestArchivedFile) 34 assert.Contains(t, f.sortedFiles(), artifactsTestArchivedFile2) 35 } 36 37 func TestCacheArchiverAddingUntrackedUnicodeFiles(t *testing.T) { 38 writeTestFile(t, fileArchiverUntrackedUnicodeFile) 39 defer os.Remove(fileArchiverUntrackedUnicodeFile) 40 41 f := fileArchiver{ 42 Untracked: true, 43 } 44 err := f.enumerate() 45 assert.NoError(t, err) 46 assert.Len(t, f.sortedFiles(), 1) 47 assert.Contains(t, f.sortedFiles(), fileArchiverUntrackedUnicodeFile) 48 } 49 50 func TestCacheArchiverAddingFile(t *testing.T) { 51 writeTestFile(t, fileArchiverUntrackedFile) 52 defer os.Remove(fileArchiverUntrackedFile) 53 54 f := fileArchiver{ 55 Paths: []string{fileArchiverUntrackedFile}, 56 } 57 err := f.enumerate() 58 assert.NoError(t, err) 59 assert.Len(t, f.sortedFiles(), 1) 60 assert.Contains(t, f.sortedFiles(), fileArchiverUntrackedFile) 61 } 62 63 func TestFileArchiverToFailOnAbsoulteFile(t *testing.T) { 64 f := fileArchiver{ 65 Paths: []string{fileArchiverAbsoluteFile}, 66 } 67 err := f.enumerate() 68 assert.NoError(t, err) 69 assert.Empty(t, f.sortedFiles()) 70 assert.NotContains(t, f.sortedFiles(), fileArchiverAbsoluteFile) 71 } 72 73 func TestFileArchiverToFailOnRelativeFile(t *testing.T) { 74 f := fileArchiver{ 75 Paths: []string{fileArchiverRelativeFile}, 76 } 77 err := f.enumerate() 78 assert.NoError(t, err) 79 assert.Empty(t, f.sortedFiles()) 80 } 81 82 func TestFileArchiverToAddNotExistingFile(t *testing.T) { 83 f := fileArchiver{ 84 Paths: []string{fileArchiverNotExistingFile}, 85 } 86 err := f.enumerate() 87 assert.NoError(t, err) 88 assert.Empty(t, f.sortedFiles()) 89 } 90 91 func TestFileArchiverChanged(t *testing.T) { 92 writeTestFile(t, fileArchiverUntrackedFile) 93 defer os.Remove(fileArchiverUntrackedFile) 94 95 now := time.Now() 96 require.NoError(t, os.Chtimes(fileArchiverUntrackedFile, now, now.Add(-time.Second))) 97 98 f := fileArchiver{ 99 Paths: []string{fileArchiverUntrackedFile}, 100 } 101 err := f.enumerate() 102 require.NoError(t, err) 103 assert.Len(t, f.sortedFiles(), 1) 104 assert.False(t, f.isChanged(now.Add(time.Minute))) 105 assert.True(t, f.isChanged(now.Add(-time.Minute))) 106 } 107 108 func TestFileArchiverFileIsNotChanged(t *testing.T) { 109 now := time.Now() 110 111 writeTestFile(t, fileArchiverUntrackedFile) 112 defer os.Remove(fileArchiverUntrackedFile) 113 114 writeTestFile(t, fileArchiverArchiveZipFile) 115 defer os.Remove(fileArchiverArchiveZipFile) 116 117 f := fileArchiver{ 118 Paths: []string{fileArchiverUntrackedFile}, 119 } 120 err := f.enumerate() 121 require.NoError(t, err) 122 123 require.NoError(t, os.Chtimes(fileArchiverUntrackedFile, now, now.Add(-time.Second))) 124 assert.False(t, f.isFileChanged(fileArchiverArchiveZipFile), "should return false if file was modified before the listed file") 125 } 126 127 func TestFileArchiverFileIsChanged(t *testing.T) { 128 now := time.Now() 129 130 writeTestFile(t, fileArchiverUntrackedFile) 131 defer os.Remove(fileArchiverUntrackedFile) 132 133 writeTestFile(t, fileArchiverArchiveZipFile) 134 defer os.Remove(fileArchiverArchiveZipFile) 135 136 f := fileArchiver{ 137 Paths: []string{fileArchiverUntrackedFile}, 138 } 139 err := f.enumerate() 140 require.NoError(t, err) 141 142 require.NoError(t, os.Chtimes(fileArchiverArchiveZipFile, now, now.Add(-time.Minute))) 143 assert.True(t, f.isFileChanged(fileArchiverArchiveZipFile), "should return true if file was modified") 144 } 145 146 func TestFileArchiverFileDoesNotExist(t *testing.T) { 147 writeTestFile(t, fileArchiverUntrackedFile) 148 defer os.Remove(fileArchiverUntrackedFile) 149 150 f := fileArchiver{ 151 Paths: []string{fileArchiverUntrackedFile}, 152 } 153 err := f.enumerate() 154 require.NoError(t, err) 155 156 assert.True(t, f.isFileChanged(fileArchiverNotExistingFile), "should return true if file doesn't exist") 157 }