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  }