github.com/rohankumardubey/draft-classic@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  }