github.com/jchauncey/draft@v0.3.0/pkg/draft/pack/load_test.go (about) 1 package pack 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path" 7 "path/filepath" 8 "testing" 9 ) 10 11 const expectedDockerfile = `FROM python:onbuild 12 13 CMD [ "python", "./hello.py" ] 14 15 EXPOSE 80 16 ` 17 18 const expectedDetect = `#!/usr/bin/env bash 19 20 APP_DIR=$1 21 22 # Exit early if app is clearly not Python. 23 if [ ! -f $APP_DIR/requirements.txt ] && [ ! -f $APP_DIR/setup.py ] && [ ! -f $APP_DIR/Pipfile ]; then 24 exit 1 25 fi 26 27 echo Python 28 ` 29 30 func TestFromDir(t *testing.T) { 31 pack, err := FromDir("testdata/pack-python") 32 if err != nil { 33 t.Fatalf("could not load python pack: %v", err) 34 } 35 if pack.Chart == nil { 36 t.Errorf("expected chart to be non-nil") 37 } 38 39 if string(pack.Dockerfile) != expectedDockerfile { 40 t.Errorf("expected dockerfile == expected, got '%v'", pack.Dockerfile) 41 } 42 43 if string(pack.DetectScript) != expectedDetect { 44 t.Errorf("expected detect == expected, got '%v'", pack.DetectScript) 45 } 46 47 if _, err := FromDir("dir-does-not-exist"); err == nil { 48 t.Errorf("expected err to be non-nil when path does not exist") 49 } 50 51 // post-cleanup: switch back to the cwd so other tests continue to work. 52 cwd, err := os.Getwd() 53 if err != nil { 54 t.Fatal(err) 55 } 56 57 dir, err := ioutil.TempDir("", "draft-pack-test") 58 if err != nil { 59 t.Fatal(err) 60 } 61 if err := os.Chdir(dir); err != nil { 62 t.Fatal(err) 63 } 64 // remove the dir from under our feet to force filepath.Abs to fail 65 os.RemoveAll(dir) 66 if _, err := FromDir("."); err == nil { 67 t.Errorf("expected err to be non-nil when filepath.Abs(\".\") should fail") 68 } 69 70 if err := os.Chdir(cwd); err != nil { 71 t.Fatal(err) 72 } 73 74 if os.Getenv("CI") != "" { 75 t.Skip("skipping file permission mode tests on CI servers") 76 } 77 78 // re-use the dir 79 if err := os.MkdirAll(dir, 0755); err != nil { 80 t.Fatal(err) 81 } 82 defer os.RemoveAll(dir) 83 if _, err := Create(path.Base(dir), path.Dir(dir), fooPackFiles()); err != nil { 84 t.Fatal(err) 85 } 86 // load a pack with an un-readable Dockerfile (file perms 0000) 87 if err := os.Chmod(filepath.Join(dir, DockerfileName), 0000); err != nil { 88 t.Fatal(err) 89 } 90 if _, err := FromDir(dir); err == nil { 91 t.Errorf("expected err to be non-nil when reading the Dockerfile") 92 } 93 94 // revert file perms for the Dockerfile in prep for the detect script 95 if err := os.Chmod(filepath.Join(dir, DockerfileName), 0644); err != nil { 96 t.Fatal(err) 97 } 98 99 // make the detect script available but unreadable 100 if err := os.Chmod(filepath.Join(dir, DetectName), 0000); err != nil { 101 t.Fatal(err) 102 } 103 if _, err := FromDir(dir); err == nil { 104 t.Errorf("expected err to be non-nil when reading the detect script") 105 } 106 } 107 108 func TestFromDirNoDetect(t *testing.T) { 109 pack, err := FromDir("testdata/pack-python-no-detect") 110 if err != nil { 111 t.Fatalf("could not load python pack: %v", err) 112 } 113 if pack.Chart == nil { 114 t.Errorf("expected chart to be non-nil") 115 } 116 117 if string(pack.Dockerfile) != expectedDockerfile { 118 t.Errorf("expected dockerfile == expected, got '%v'", pack.Dockerfile) 119 } 120 121 if pack.DetectScript != nil { 122 t.Errorf("expected detect to be nil, got '%v'", pack.DetectScript) 123 } 124 }