github.com/fibonacci1729/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  }