github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/commands/helpers/file_archiver_test.go (about)

     1  package helpers
     2  
     3  import (
     4  	"io/ioutil"
     5  	"os"
     6  	"testing"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"time"
    10  )
    11  
    12  const fileArchiverUntrackedFile = "untracked_test_file.txt"
    13  const fileArchiverOtherFile = "other_test_file.txt"
    14  const fileArchiverNotExistingFile = "not_existing_file.txt"
    15  const fileArchiverAbsoluteFile = "/absolute.txt"
    16  const fileArchiverRelativeFile = "../../../relative.txt"
    17  
    18  func TestCacheArchiverAddingUntrackedFiles(t *testing.T) {
    19  	ioutil.WriteFile(fileArchiverUntrackedFile, nil, 0600)
    20  	defer os.Remove(fileArchiverUntrackedFile)
    21  
    22  	f := fileArchiver{
    23  		Untracked: true,
    24  	}
    25  	err := f.enumerate()
    26  	assert.NoError(t, err)
    27  	assert.Len(t, f.sortedFiles(), 1)
    28  	assert.Contains(t, f.sortedFiles(), fileArchiverUntrackedFile)
    29  }
    30  
    31  func TestCacheArchiverAddingFile(t *testing.T) {
    32  	ioutil.WriteFile(fileArchiverUntrackedFile, nil, 0600)
    33  	defer os.Remove(fileArchiverUntrackedFile)
    34  
    35  	f := fileArchiver{
    36  		Paths: []string{fileArchiverUntrackedFile},
    37  	}
    38  	err := f.enumerate()
    39  	assert.NoError(t, err)
    40  	assert.Len(t, f.sortedFiles(), 1)
    41  	assert.Contains(t, f.sortedFiles(), fileArchiverUntrackedFile)
    42  }
    43  
    44  func TestFileArchiverToFailOnAbsoulteFile(t *testing.T) {
    45  	f := fileArchiver{
    46  		Paths: []string{fileArchiverAbsoluteFile},
    47  	}
    48  	err := f.enumerate()
    49  	assert.NoError(t, err)
    50  	assert.Empty(t, f.sortedFiles())
    51  	assert.NotContains(t, f.sortedFiles(), fileArchiverAbsoluteFile)
    52  }
    53  
    54  func TestFileArchiverToFailOnRelativeFile(t *testing.T) {
    55  	f := fileArchiver{
    56  		Paths: []string{fileArchiverRelativeFile},
    57  	}
    58  	err := f.enumerate()
    59  	assert.NoError(t, err)
    60  	assert.Empty(t, f.sortedFiles())
    61  }
    62  
    63  func TestFileArchiverToAddNotExistingFile(t *testing.T) {
    64  	f := fileArchiver{
    65  		Paths: []string{fileArchiverNotExistingFile},
    66  	}
    67  	err := f.enumerate()
    68  	assert.NoError(t, err)
    69  	assert.Empty(t, f.sortedFiles())
    70  }
    71  
    72  func TestFileArchiverChanged(t *testing.T) {
    73  	ioutil.WriteFile(fileArchiverOtherFile, nil, 0600)
    74  	defer os.Remove(fileArchiverOtherFile)
    75  
    76  	ioutil.WriteFile(fileArchiverUntrackedFile, nil, 0600)
    77  	defer os.Remove(fileArchiverUntrackedFile)
    78  
    79  	f := fileArchiver{
    80  		Paths: []string{fileArchiverUntrackedFile},
    81  	}
    82  	err := f.enumerate()
    83  	assert.NoError(t, err)
    84  	assert.Len(t, f.sortedFiles(), 1)
    85  	assert.False(t, f.isChanged(time.Now().Add(time.Minute)))
    86  	assert.True(t, f.isChanged(time.Now().Add(-time.Minute)))
    87  
    88  	assert.False(t, f.isFileChanged(fileArchiverOtherFile), "should return false if file was modified before the listed file")
    89  	os.Chtimes(fileArchiverOtherFile, time.Now(), time.Now().Add(-time.Minute))
    90  	assert.True(t, f.isFileChanged(fileArchiverOtherFile), "should return true if file was modified")
    91  	assert.True(t, f.isFileChanged(fileArchiverNotExistingFile), "should return true if file doesn't exist")
    92  }