github.com/jenkins-x/draft-repo@v0.9.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  	expectedDockerfile = `FROM python:onbuild
    13  
    14  CMD [ "python", "./hello.py" ]
    15  
    16  EXPOSE 80
    17  `
    18  )
    19  
    20  func TestFromDir(t *testing.T) {
    21  	pack, err := FromDir("testdata/pack-python")
    22  	if err != nil {
    23  		t.Fatalf("could not load python pack: %v", err)
    24  	}
    25  	if pack.Chart == nil {
    26  		t.Errorf("expected chart to be non-nil")
    27  	}
    28  
    29  	if string(pack.Dockerfile) != expectedDockerfile {
    30  		t.Errorf("expected dockerfile == expected, got '%v'", pack.Dockerfile)
    31  	}
    32  
    33  	if _, err := FromDir("dir-does-not-exist"); err == nil {
    34  		t.Errorf("expected err to be non-nil when path does not exist")
    35  	}
    36  
    37  	// post-cleanup: switch back to the cwd so other tests continue to work.
    38  	cwd, err := os.Getwd()
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  
    43  	dir, err := ioutil.TempDir("", "draft-pack-test")
    44  	if err != nil {
    45  		t.Fatal(err)
    46  	}
    47  	if err := os.Chdir(dir); err != nil {
    48  		t.Fatal(err)
    49  	}
    50  
    51  	if os.Getenv("CI") != "" {
    52  		t.Skip("skipping file permission mode tests on CI servers")
    53  	}
    54  
    55  	// load a pack with an un-readable Dockerfile (file perms 0000)
    56  	if err := os.Chmod(filepath.Join(dir, packName, DockerfileName), 0000); err != nil {
    57  		t.Fatalf("dir %s: %s", dir, err)
    58  	}
    59  	if _, err := FromDir(dir); err == nil {
    60  		t.Errorf("expected err to be non-nil when reading the Dockerfile")
    61  	}
    62  
    63  	// revert file perms for the Dockerfile in prep for the detect script
    64  	if err := os.Chmod(filepath.Join(dir, packName, DockerfileName), 0644); err != nil {
    65  		t.Fatal(err)
    66  	}
    67  
    68  	// remove the dir from under our feet to force filepath.Abs to fail
    69  	os.RemoveAll(dir)
    70  	if _, err := FromDir("."); err == nil {
    71  		t.Errorf("expected err to be non-nil when filepath.Abs(\".\") should fail")
    72  	}
    73  
    74  	if err := os.Chdir(cwd); err != nil {
    75  		t.Fatal(err)
    76  	}
    77  }