github.com/Azure/draft@v0.16.0/pkg/draft/pack/load_test.go (about) 1 package pack 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 ) 9 10 const ( 11 packName = "foo" 12 dockerfileName = "Dockerfile" 13 expectedDockerfile = `FROM python:onbuild 14 15 CMD [ "python", "./hello.py" ] 16 17 EXPOSE 80 18 ` 19 ) 20 21 func TestFromDir(t *testing.T) { 22 pack, err := FromDir(filepath.Join("testdata", "pack-python")) 23 if err != nil { 24 t.Fatalf("could not load python pack: %v", err) 25 } 26 if pack.Chart == nil { 27 t.Errorf("expected chart to be non-nil") 28 } 29 30 defer func() { 31 for _, f := range pack.Files { 32 f.Close() 33 } 34 }() 35 36 if _, ok := pack.Files["README.md"]; ok { 37 t.Errorf("expected README.md to not have been loaded") 38 } 39 // check that the Dockerfile was loaded 40 dockerfile, ok := pack.Files[dockerfileName] 41 if !ok { 42 t.Error("expected Dockerfile to have been loaded") 43 } 44 45 dockerfileContents, err := ioutil.ReadAll(dockerfile) 46 if err != nil { 47 t.Errorf("expected Dockerfile to be readable, got %v", err) 48 } 49 50 if string(dockerfileContents) != expectedDockerfile { 51 t.Errorf("expected Dockerfile == expected file contents, got '%v'", dockerfileContents) 52 } 53 54 _, ok = pack.Files[filepath.Join("scripts", "some-script.sh")] 55 if !ok { 56 t.Errorf("Expected scripts/some-script.sh to have been loaded but wasn't") 57 } 58 59 if _, err := FromDir("dir-does-not-exist"); err == nil { 60 t.Errorf("expected err to be non-nil when path does not exist") 61 } 62 63 // post-cleanup: switch back to the cwd so other tests continue to work. 64 cwd, err := os.Getwd() 65 if err != nil { 66 t.Fatal(err) 67 } 68 defer func() { 69 if err := os.Chdir(cwd); err != nil { 70 t.Fatal(err) 71 } 72 }() 73 74 dir, err := ioutil.TempDir("", "draft-pack-test") 75 if err != nil { 76 t.Fatal(err) 77 } 78 if err := os.Chdir(dir); err != nil { 79 t.Fatal(err) 80 } 81 82 if os.Getenv("CI") != "" { 83 t.Skip("skipping file permission mode tests on CI servers") 84 } 85 86 if err := os.MkdirAll(filepath.Join(dir, packName, dockerfileName), 0755); err != nil { 87 t.Fatal(err) 88 } 89 90 // load a pack with an un-readable Dockerfile (file perms 0000) 91 if err := os.Chmod(filepath.Join(dir, packName, dockerfileName), 0000); err != nil { 92 t.Fatalf("dir %s: %s", dir, err) 93 } 94 if _, err := FromDir(dir); err == nil { 95 t.Errorf("expected err to be non-nil when reading the Dockerfile") 96 } 97 98 // revert file perms for the Dockerfile in prep for the detect script 99 if err := os.Chmod(filepath.Join(dir, packName, dockerfileName), 0644); err != nil { 100 t.Fatal(err) 101 } 102 103 // remove the dir from under our feet to force filepath.Abs to fail 104 os.RemoveAll(dir) 105 if _, err := FromDir("."); err == nil { 106 t.Errorf("expected err to be non-nil when filepath.Abs(\".\") should fail") 107 } 108 109 if err := os.Chdir(cwd); err != nil { 110 t.Fatal(err) 111 } 112 } 113 114 func TestExtractFiles(t *testing.T) { 115 116 packFiles, err := extractFiles(filepath.Join("testdata", "DirWithNestedDirs"), "") 117 if err != nil { 118 t.Fatalf("Did not expect err but got err: %v", err) 119 } 120 if len(packFiles) != 4 { 121 t.Errorf("Expected 4 files to be extracted but got %v", len(packFiles)) 122 } 123 124 }