mirror of
https://github.com/hashicorp/packer.git
synced 2026-06-09 00:32:09 -04:00
The source parsing logic was heavily directed towards Github compatible source URIs, however if we want to support more cases, we need to make sure we are able to specify those URIs, and to load plugins installed from those sources. Right now, since the getters available are only github.com, we will not support remotely instlling plugins from sources other than github.com, with the same set of constraints as before. However, we do support now installing from a local plugin binary to any kind of source, and we support loading them, including if a template wants this plugin installed locally with version constraints.
64 lines
1.7 KiB
Go
64 lines
1.7 KiB
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: BUSL-1.1
|
|
|
|
// component_acc_test.go should contain acceptance tests for plugin components
|
|
// to make sure all component types can be discovered and started.
|
|
package plugin
|
|
|
|
import (
|
|
_ "embed"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
"os/exec"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/packer-plugin-sdk/acctest"
|
|
"github.com/hashicorp/packer/hcl2template/addrs"
|
|
)
|
|
|
|
//go:embed test-fixtures/basic-amazon-ami-datasource.pkr.hcl
|
|
var basicAmazonAmiDatasourceHCL2Template string
|
|
|
|
func TestAccInitAndBuildBasicAmazonAmiDatasource(t *testing.T) {
|
|
plugin := addrs.Plugin{
|
|
Source: "github.com/hashicorp/amazon",
|
|
}
|
|
testCase := &acctest.PluginTestCase{
|
|
Name: "amazon-ami_basic_datasource_test",
|
|
Setup: func() error {
|
|
return cleanupPluginInstallation(plugin)
|
|
},
|
|
Template: basicAmazonAmiDatasourceHCL2Template,
|
|
Type: "amazon-ami",
|
|
Init: true,
|
|
CheckInit: func(initCommand *exec.Cmd, logfile string) error {
|
|
if initCommand.ProcessState != nil {
|
|
if initCommand.ProcessState.ExitCode() != 0 {
|
|
return fmt.Errorf("Bad exit code. Logfile: %s", logfile)
|
|
}
|
|
}
|
|
logs, err := os.Open(logfile)
|
|
if err != nil {
|
|
return fmt.Errorf("Unable find %s", logfile)
|
|
}
|
|
defer logs.Close()
|
|
|
|
logsBytes, err := io.ReadAll(logs)
|
|
if err != nil {
|
|
return fmt.Errorf("Unable to read %s", logfile)
|
|
}
|
|
initOutput := string(logsBytes)
|
|
return checkPluginInstallation(initOutput, plugin)
|
|
},
|
|
Check: func(buildCommand *exec.Cmd, logfile string) error {
|
|
if buildCommand.ProcessState != nil {
|
|
if buildCommand.ProcessState.ExitCode() != 0 {
|
|
return fmt.Errorf("Bad exit code. Logfile: %s", logfile)
|
|
}
|
|
}
|
|
return nil
|
|
},
|
|
}
|
|
acctest.TestPlugin(t, testCase)
|
|
}
|