github.com/hashicorp/packer@v1.14.3/packer_test/plugin_tests/install_test.go (about)

     1  package plugin_tests
     2  
     3  import "github.com/hashicorp/packer/packer_test/common/check"
     4  
     5  func (ts *PackerPluginTestSuite) TestInstallPluginWithMetadata() {
     6  	tempPluginDir := ts.MakePluginDir()
     7  	defer tempPluginDir.Cleanup()
     8  
     9  	ts.Run("install plugin with metadata in version", func() {
    10  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    11  			SetArgs("plugins", "install", "--path", ts.GetPluginPath(ts.T(), "1.0.0+metadata"), "github.com/hashicorp/tester").
    12  			Assert(check.MustSucceed(), check.Grep("Successfully installed plugin", check.GrepStdout))
    13  	})
    14  
    15  	ts.Run("metadata plugin installed must not have metadata in its path", func() {
    16  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    17  			SetArgs("plugins", "installed").
    18  			Assert(check.MustSucceed(), check.Grep("packer-plugin-tester_v1.0.0[^+]", check.GrepStdout))
    19  	})
    20  
    21  	ts.Run("plugin with metadata should work with validate", func() {
    22  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    23  			SetArgs("validate", "./templates/simple.pkr.hcl").
    24  			Assert(check.MustSucceed(), check.Grep("packer-plugin-tester_v1.0.0[^+][^\\n]+plugin:", check.GrepStderr))
    25  	})
    26  
    27  	ts.Run("plugin with metadata should work with build", func() {
    28  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    29  			SetArgs("build", "./templates/simple.pkr.hcl").
    30  			Assert(check.MustSucceed(), check.Grep("packer-plugin-tester_v1.0.0[^+][^\\n]+plugin:", check.GrepStderr))
    31  	})
    32  }
    33  
    34  func (ts *PackerPluginTestSuite) TestInstallPluginWithPath() {
    35  	tempPluginDir := ts.MakePluginDir()
    36  	defer tempPluginDir.Cleanup()
    37  
    38  	ts.Run("install plugin with pre-release only", func() {
    39  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    40  			SetArgs("plugins", "install", "--path", ts.GetPluginPath(ts.T(), "1.0.0-dev"), "github.com/hashicorp/tester").
    41  			Assert(check.MustSucceed(), check.Grep("Successfully installed plugin", check.GrepStdout))
    42  	})
    43  
    44  	ts.Run("install same plugin with pre-release + metadata", func() {
    45  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    46  			SetArgs("plugins", "install", "--path", ts.GetPluginPath(ts.T(), "1.0.0-dev+metadata"), "github.com/hashicorp/tester").
    47  			Assert(check.MustSucceed(), check.Grep("Successfully installed plugin", check.GrepStdout))
    48  	})
    49  
    50  	ts.Run("list plugins, should only report one plugin", func() {
    51  		ts.PackerCommand().UsePluginDir(tempPluginDir).
    52  			SetArgs("plugins", "installed").
    53  			Assert(check.MustSucceed(),
    54  				check.Grep("plugin-tester_v1.0.0-dev[^+]", check.GrepStdout),
    55  				check.GrepInverted("plugin-tester_v1.0.0-dev\\+", check.GrepStdout),
    56  				check.LineCountCheck(1))
    57  	})
    58  }
    59  
    60  func (ts *PackerPluginTestSuite) TestInstallPluginPrerelease() {
    61  	pluginPath := ts.GetPluginPath(ts.T(), "1.0.1-alpha1")
    62  
    63  	pluginDir := ts.MakePluginDir()
    64  	defer pluginDir.Cleanup()
    65  
    66  	ts.Run("try install plugin with alpha1 prerelease - should fail", func() {
    67  		ts.PackerCommand().UsePluginDir(pluginDir).
    68  			SetArgs("plugins", "install", "--path", pluginPath, "github.com/hashicorp/tester").
    69  			Assert(check.MustFail(), check.Grep("Packer can only install plugin releases with this command", check.GrepStdout))
    70  	})
    71  }
    72  
    73  func (ts *PackerPluginTestSuite) TestRemoteInstallWithPluginsInstall() {
    74  	ts.SkipNoAcc()
    75  
    76  	pluginPath := ts.MakePluginDir()
    77  	defer pluginPath.Cleanup()
    78  
    79  	ts.Run("install latest version of a remote plugin with packer plugins install", func() {
    80  		ts.PackerCommand().UsePluginDir(pluginPath).
    81  			SetArgs("plugins", "install", "github.com/hashicorp/hashicups").
    82  			Assert(check.MustSucceed())
    83  	})
    84  }
    85  
    86  func (ts *PackerPluginTestSuite) TestRemoteInstallOfPreReleasePlugin() {
    87  	ts.SkipNoAcc()
    88  
    89  	pluginPath := ts.MakePluginDir()
    90  	defer pluginPath.Cleanup()
    91  
    92  	ts.Run("try to init with a pre-release constraint - should fail", func() {
    93  		ts.PackerCommand().UsePluginDir(pluginPath).
    94  			SetArgs("init", "templates/pre-release_constraint.pkr.hcl").
    95  			Assert(check.MustFail(),
    96  				check.Grep("Invalid version constraint", check.GrepStdout),
    97  				check.Grep("Unsupported prerelease for constraint", check.GrepStdout))
    98  	})
    99  
   100  	ts.Run("try to plugins install with a pre-release version - should fail", func() {
   101  		ts.PackerCommand().UsePluginDir(pluginPath).
   102  			SetArgs("plugin", "install", "github.com/hashicorp/hashicups", "1.0.2-dev").
   103  			Assert(check.MustFail(),
   104  				check.Grep("Unsupported prerelease for constraint", check.GrepStdout))
   105  	})
   106  }