github.com/hashicorp/packer@v1.14.3/packer_test/provisioner_tests/hcp-sbom/provisioner_test.go (about)

     1  package plugin_tests
     2  
     3  import (
     4  	"os"
     5  
     6  	"github.com/hashicorp/packer/packer_test/common/check"
     7  )
     8  
     9  func (ts *PackerHCPSbomTestSuite) TestSourceNotExisting() {
    10  	ts.SkipNoAcc()
    11  
    12  	dir := ts.MakePluginDir()
    13  	defer dir.Cleanup()
    14  
    15  	ts.PackerCommand().UsePluginDir(dir).
    16  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
    17  		Assert(check.MustSucceed())
    18  
    19  	ts.PackerCommand().UsePluginDir(dir).
    20  		AddEnv("HOME", os.Getenv("HOME")).
    21  		AddEnv("PATH", os.Getenv("PATH")).
    22  		SetArgs("build", "templates/source_not_existing.pkr.hcl").
    23  		Assert(check.MustFail(), check.Grep("download failed for SBOM file"))
    24  }
    25  
    26  // Greayed out because the communicator for the docker plugin does not return an error
    27  // when downloading a full directory, instead it returns a 0-byte stream without an error.
    28  //
    29  // So the sbom provisioner fails with a validation error instead of a file not found type
    30  // of error.
    31  //
    32  // func (ts *PackerHCPSbomTestSuite) TestSourceIsDir() {
    33  // 	ts.SkipNoAcc()
    34  //
    35  // 	path, cleanup := ts.MakePluginDir()
    36  // 	defer cleanup()
    37  //
    38  // 	ts.PackerCommand().UsePluginDir(path).
    39  // 		SetArgs("plugins", "install", "github.com/hashicorp/docker").
    40  // 		Assert(check.MustSucceed())
    41  //
    42  // 	ts.PackerCommand().UsePluginDir(path).
    43  // 		SetArgs("build", "templates/source_is_dir.pkr.hcl").
    44  // 		Assert(check.MustFail(), check.Grep("download failed for SBOM file"), check.Dump(ts.T()))
    45  // }
    46  
    47  // * output file - does not exist, and intermediate dirs don't exist
    48  func (ts *PackerHCPSbomTestSuite) TestDestFile_NoIntermediateDirs() {
    49  	ts.SkipNoAcc()
    50  
    51  	dir := ts.MakePluginDir()
    52  	defer dir.Cleanup()
    53  
    54  	ts.PackerCommand().UsePluginDir(dir).
    55  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
    56  		Assert(check.MustSucceed())
    57  
    58  	ts.PackerCommand().UsePluginDir(dir).
    59  		AddEnv("HOME", os.Getenv("HOME")).
    60  		AddEnv("PATH", os.Getenv("PATH")).
    61  		SetArgs("build", "./templates/dest_is_file_no_interm_dirs.pkr.hcl").
    62  		Assert(check.MustSucceed(), check.FileExists("sbom/sbom_cyclonedx.json", false))
    63  
    64  	os.RemoveAll("sbom")
    65  }
    66  
    67  // * output file - does not exist, and intermediate dirs already exist
    68  func (ts *PackerHCPSbomTestSuite) TestDestFile_WithIntermediateDirs() {
    69  	ts.SkipNoAcc()
    70  
    71  	dir := ts.MakePluginDir()
    72  	defer dir.Cleanup()
    73  
    74  	os.MkdirAll("sbom", 0755)
    75  
    76  	ts.PackerCommand().UsePluginDir(dir).
    77  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
    78  		Assert(check.MustSucceed())
    79  
    80  	ts.PackerCommand().UsePluginDir(dir).
    81  		AddEnv("HOME", os.Getenv("HOME")).
    82  		AddEnv("PATH", os.Getenv("PATH")).
    83  		SetArgs("build", "./templates/dest_is_file_no_interm_dirs.pkr.hcl").
    84  		Assert(check.MustSucceed(), check.FileExists("sbom/sbom_cyclonedx.json", false))
    85  
    86  	os.RemoveAll("sbom")
    87  }
    88  
    89  // * output directory (without trailing slash) - directory exists
    90  func (ts *PackerHCPSbomTestSuite) TestDestDir_NoTrailingSlash() {
    91  	ts.SkipNoAcc()
    92  
    93  	dir := ts.MakePluginDir()
    94  	defer dir.Cleanup()
    95  
    96  	os.MkdirAll("sbom", 0755)
    97  
    98  	ts.PackerCommand().UsePluginDir(dir).
    99  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
   100  		Assert(check.MustSucceed())
   101  
   102  	ts.PackerCommand().UsePluginDir(dir).
   103  		AddEnv("HOME", os.Getenv("HOME")).
   104  		AddEnv("PATH", os.Getenv("PATH")).
   105  		SetArgs("build", "./templates/dest_is_dir.pkr.hcl").
   106  		Assert(check.MustSucceed(), check.FileGlob("./sbom/packer-user-sbom-*.json"))
   107  
   108  	os.RemoveAll("sbom")
   109  }
   110  
   111  // * output directory (with trailing slash) - directory exists
   112  func (ts *PackerHCPSbomTestSuite) TestDestDir_WithTrailingSlash() {
   113  	ts.SkipNoAcc()
   114  
   115  	dir := ts.MakePluginDir()
   116  	defer dir.Cleanup()
   117  
   118  	os.MkdirAll("sbom", 0755)
   119  
   120  	ts.PackerCommand().UsePluginDir(dir).
   121  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
   122  		Assert(check.MustSucceed())
   123  
   124  	ts.PackerCommand().UsePluginDir(dir).
   125  		AddEnv("HOME", os.Getenv("HOME")).
   126  		AddEnv("PATH", os.Getenv("PATH")).
   127  		SetArgs("build", "./templates/dest_is_dir_with_trailing_slash.pkr.hcl").
   128  		Assert(check.MustSucceed(), check.FileGlob("./sbom/packer-user-sbom-*.json"))
   129  
   130  	os.RemoveAll("sbom")
   131  }
   132  
   133  // * output directory (with trailing slash) - directory doesn't exist
   134  func (ts *PackerHCPSbomTestSuite) TestDestDir_WithTrailingSlash_NoDir() {
   135  	ts.SkipNoAcc()
   136  
   137  	dir := ts.MakePluginDir()
   138  	defer dir.Cleanup()
   139  
   140  	ts.PackerCommand().UsePluginDir(dir).
   141  		SetArgs("plugins", "install", "github.com/hashicorp/docker").
   142  		Assert(check.MustSucceed())
   143  
   144  	ts.PackerCommand().UsePluginDir(dir).
   145  		AddEnv("HOME", os.Getenv("HOME")).
   146  		AddEnv("PATH", os.Getenv("PATH")).
   147  		SetArgs("build", "./templates/dest_is_dir_with_trailing_slash.pkr.hcl").
   148  		Assert(check.MustSucceed(), check.FileGlob("./sbom/packer-user-sbom-*.json"))
   149  
   150  	os.RemoveAll("sbom")
   151  }