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  }