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 }