get.porter.sh/porter@v1.3.0/pkg/porter/create_test.go (about)

     1  package porter
     2  
     3  import (
     4  	"path/filepath"
     5  	"testing"
     6  
     7  	"get.porter.sh/porter/pkg"
     8  	"get.porter.sh/porter/pkg/manifest"
     9  	"get.porter.sh/porter/pkg/yaml"
    10  	"get.porter.sh/porter/tests"
    11  	"github.com/stretchr/testify/require"
    12  )
    13  
    14  func TestCreateInWorkingDirectory(t *testing.T) {
    15  	p := NewTestPorter(t)
    16  	defer p.Close()
    17  
    18  	err := p.Create()
    19  	require.NoError(t, err)
    20  
    21  	// Verify that files are present in the root directory
    22  	configFileStats, err := p.FileSystem.Stat("porter.yaml")
    23  	require.NoError(t, err)
    24  	tests.AssertFilePermissionsEqual(t, "porter.yaml", pkg.FileModeWritable, configFileStats.Mode())
    25  
    26  	helperFileStats, err := p.FileSystem.Stat("helpers.sh")
    27  	require.NoError(t, err)
    28  	tests.AssertFilePermissionsEqual(t, "helpers.sh", pkg.FileModeExecutable, helperFileStats.Mode())
    29  
    30  	dockerfileStats, err := p.FileSystem.Stat("template.Dockerfile")
    31  	require.NoError(t, err)
    32  	tests.AssertFilePermissionsEqual(t, "template.Dockerfile", pkg.FileModeWritable, dockerfileStats.Mode())
    33  
    34  	readmeStats, err := p.FileSystem.Stat("README.md")
    35  	require.NoError(t, err)
    36  	tests.AssertFilePermissionsEqual(t, "README.md", pkg.FileModeWritable, readmeStats.Mode())
    37  
    38  	gitignoreStats, err := p.FileSystem.Stat(".gitignore")
    39  	require.NoError(t, err)
    40  	tests.AssertFilePermissionsEqual(t, ".gitignore", pkg.FileModeWritable, gitignoreStats.Mode())
    41  
    42  	dockerignoreStats, err := p.FileSystem.Stat(".dockerignore")
    43  	require.NoError(t, err)
    44  	tests.AssertFilePermissionsEqual(t, ".dockerignore", pkg.FileModeWritable, dockerignoreStats.Mode())
    45  }
    46  
    47  // tests to ensure behavior similarity with helm create
    48  func TestCreateWithBundleName(t *testing.T) {
    49  	bundleName := "mybundle"
    50  
    51  	p := NewTestPorter(t)
    52  	err := p.CreateInDir(bundleName)
    53  	require.NoError(t, err)
    54  
    55  	// Verify that files are present in the "mybundle" directory
    56  	configFileStats, err := p.FileSystem.Stat(filepath.Join(bundleName, "porter.yaml"))
    57  	require.NoError(t, err)
    58  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, "porter.yaml"), pkg.FileModeWritable, configFileStats.Mode())
    59  
    60  	helperFileStats, err := p.FileSystem.Stat(filepath.Join(bundleName, "helpers.sh"))
    61  	require.NoError(t, err)
    62  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, "helpers.sh"), pkg.FileModeExecutable, helperFileStats.Mode())
    63  
    64  	dockerfileStats, err := p.FileSystem.Stat(filepath.Join(bundleName, "template.Dockerfile"))
    65  	require.NoError(t, err)
    66  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, "template.Dockerfile"), pkg.FileModeWritable, dockerfileStats.Mode())
    67  
    68  	readmeStats, err := p.FileSystem.Stat(filepath.Join(bundleName, "README.md"))
    69  	require.NoError(t, err)
    70  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, "README.md"), pkg.FileModeWritable, readmeStats.Mode())
    71  
    72  	gitignoreStats, err := p.FileSystem.Stat(filepath.Join(bundleName, ".gitignore"))
    73  	require.NoError(t, err)
    74  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, ".gitignore"), pkg.FileModeWritable, gitignoreStats.Mode())
    75  
    76  	dockerignoreStats, err := p.FileSystem.Stat(filepath.Join(bundleName, ".dockerignore"))
    77  	require.NoError(t, err)
    78  	tests.AssertFilePermissionsEqual(t, filepath.Join(bundleName, ".dockerignore"), pkg.FileModeWritable, dockerignoreStats.Mode())
    79  
    80  	// verify "name" inside porter.yaml is set to "mybundle"
    81  	porterYaml := &manifest.Manifest{}
    82  	data, err := p.FileSystem.ReadFile(filepath.Join(bundleName, "porter.yaml"))
    83  	require.NoError(t, err)
    84  	require.NoError(t, yaml.Unmarshal(data, &porterYaml))
    85  	require.True(t, porterYaml.Name == bundleName)
    86  }
    87  
    88  // make sure bundlename is not the entire file structure, just the "base"
    89  func TestCreateNestedBundleName(t *testing.T) {
    90  	dir := "foo/bar/bar"
    91  	bundleName := "mybundle"
    92  
    93  	p := NewTestPorter(t)
    94  	err := p.CreateInDir(filepath.Join(dir, bundleName))
    95  	require.NoError(t, err)
    96  
    97  	// Verify that files are present in the "mybundle" directory
    98  	configFileStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, "porter.yaml"))
    99  	require.NoError(t, err)
   100  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, "porter.yaml"), pkg.FileModeWritable, configFileStats.Mode())
   101  
   102  	helperFileStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, "helpers.sh"))
   103  	require.NoError(t, err)
   104  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, "helpers.sh"), pkg.FileModeExecutable, helperFileStats.Mode())
   105  
   106  	dockerfileStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, "template.Dockerfile"))
   107  	require.NoError(t, err)
   108  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, "template.Dockerfile"), pkg.FileModeWritable, dockerfileStats.Mode())
   109  
   110  	readmeStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, "README.md"))
   111  	require.NoError(t, err)
   112  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, "README.md"), pkg.FileModeWritable, readmeStats.Mode())
   113  
   114  	gitignoreStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, ".gitignore"))
   115  	require.NoError(t, err)
   116  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, ".gitignore"), pkg.FileModeWritable, gitignoreStats.Mode())
   117  
   118  	dockerignoreStats, err := p.FileSystem.Stat(filepath.Join(dir, bundleName, ".dockerignore"))
   119  	require.NoError(t, err)
   120  	tests.AssertFilePermissionsEqual(t, filepath.Join(dir, bundleName, ".dockerignore"), pkg.FileModeWritable, dockerignoreStats.Mode())
   121  
   122  	// verify "name" inside porter.yaml is set to "mybundle"
   123  	porterYaml := &manifest.Manifest{}
   124  	data, err := p.FileSystem.ReadFile(filepath.Join(dir, bundleName, "porter.yaml"))
   125  	require.NoError(t, err)
   126  	require.NoError(t, yaml.Unmarshal(data, &porterYaml))
   127  	require.True(t, porterYaml.Name == bundleName)
   128  }