github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/commands/helpers/cache_archiver_test.go (about) 1 package helpers 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 "gitlab.com/gitlab-org/gitlab-ci-multi-runner/helpers" 8 "io/ioutil" 9 "net/http" 10 "net/http/httptest" 11 "os" 12 "time" 13 ) 14 15 const cacheArchiverArchive = "archive.zip" 16 const cacheArchiverTestArchivedFile = "archive_file" 17 18 func TestCacheArchiverIsUpToDate(t *testing.T) { 19 ioutil.WriteFile(cacheArchiverTestArchivedFile, nil, 0600) 20 defer os.Remove(cacheArchiverTestArchivedFile) 21 22 defer os.Remove(cacheArchiverArchive) 23 cmd := CacheArchiverCommand{ 24 File: cacheArchiverArchive, 25 fileArchiver: fileArchiver{ 26 Paths: []string{ 27 cacheArchiverTestArchivedFile, 28 }, 29 }, 30 } 31 cmd.Execute(nil) 32 fi, _ := os.Stat(cacheArchiverArchive) 33 cmd.Execute(nil) 34 fi2, _ := os.Stat(cacheArchiverArchive) 35 assert.Equal(t, fi.ModTime(), fi2.ModTime(), "archive is up to date") 36 37 // We need to wait one second, since the FS doesn't save milliseconds 38 time.Sleep(time.Second) 39 40 os.Chtimes(cacheArchiverTestArchivedFile, time.Now(), time.Now()) 41 cmd.Execute(nil) 42 fi3, _ := os.Stat(cacheArchiverArchive) 43 assert.NotEqual(t, fi.ModTime(), fi3.ModTime(), "archive should get updated") 44 } 45 46 func TestCacheArchiverForIfNoFileDefined(t *testing.T) { 47 helpers.MakeFatalToPanic() 48 cmd := CacheArchiverCommand{} 49 assert.Panics(t, func() { 50 cmd.Execute(nil) 51 }) 52 } 53 54 func testCacheUploadHandler(w http.ResponseWriter, r *http.Request) { 55 if r.Method != "PUT" { 56 http.Error(w, "408 Method not allowed", 408) 57 return 58 } 59 if r.URL.Path != "/cache.zip" { 60 http.NotFound(w, r) 61 return 62 } 63 } 64 65 func TestCacheArchiverRemoteServerNotFound(t *testing.T) { 66 ts := httptest.NewServer(http.HandlerFunc(testCacheUploadHandler)) 67 defer ts.Close() 68 69 helpers.MakeFatalToPanic() 70 os.Remove(cacheExtractorArchive) 71 cmd := CacheArchiverCommand{ 72 File: cacheExtractorArchive, 73 URL: ts.URL + "/invalid-file.zip", 74 } 75 assert.NotPanics(t, func() { 76 cmd.Execute(nil) 77 }) 78 } 79 80 func TestCacheArchiverRemoteServe(t *testing.T) { 81 ts := httptest.NewServer(http.HandlerFunc(testCacheUploadHandler)) 82 defer ts.Close() 83 84 helpers.MakeFatalToPanic() 85 os.Remove(cacheExtractorArchive) 86 cmd := CacheArchiverCommand{ 87 File: cacheExtractorArchive, 88 URL: ts.URL + "/cache.zip", 89 } 90 assert.NotPanics(t, func() { 91 cmd.Execute(nil) 92 }) 93 } 94 95 func TestCacheArchiverRemoteServerDoesntFailOnInvalidServer(t *testing.T) { 96 helpers.MakeFatalToPanic() 97 os.Remove(cacheExtractorArchive) 98 cmd := CacheArchiverCommand{ 99 File: cacheExtractorArchive, 100 URL: "http://localhost:65333/cache.zip", 101 } 102 assert.NotPanics(t, func() { 103 cmd.Execute(nil) 104 }) 105 106 _, err := os.Stat(cacheExtractorTestArchivedFile) 107 assert.Error(t, err) 108 }