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