mirror of
				https://github.com/edgelesssys/constellation.git
				synced 2025-11-03 20:24:16 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
Copyright (c) Edgeless Systems GmbH
 | 
						|
 | 
						|
SPDX-License-Identifier: AGPL-3.0-only
 | 
						|
*/
 | 
						|
 | 
						|
package provider
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"os"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	"github.com/bazelbuild/rules_go/go/runfiles"
 | 
						|
	"github.com/edgelesssys/constellation/v2/internal/constants"
 | 
						|
	"github.com/hashicorp/terraform-plugin-framework/providerserver"
 | 
						|
	"github.com/hashicorp/terraform-plugin-go/tfprotov6"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	// testingConfig is a shared configuration to combine with the actual
 | 
						|
	// test configuration so the constellation provider is properly configured
 | 
						|
	// for acceptance testing.
 | 
						|
	testingConfig = `provider "constellation" {}`
 | 
						|
)
 | 
						|
 | 
						|
// testAccProtoV6ProviderFactories are used to instantiate a provider during
 | 
						|
// acceptance testing. The factory function will be invoked for every Terraform
 | 
						|
// CLI command executed to create a provider server to which the CLI can
 | 
						|
// reattach. It sets a pseudo version for the provider version.
 | 
						|
var testAccProtoV6ProviderFactories = testAccProtoV6ProviderFactoriesWithVersion(constants.BinaryVersion().String())
 | 
						|
 | 
						|
// testAccProtoV6ProviderFactoriesWithVersion are used to instantiate a provider during
 | 
						|
// acceptance testing. The factory function will be invoked for every Terraform
 | 
						|
// CLI command executed to create a provider server to which the CLI can
 | 
						|
// reattach.
 | 
						|
var testAccProtoV6ProviderFactoriesWithVersion = func(version string) map[string]func() (tfprotov6.ProviderServer, error) {
 | 
						|
	return map[string]func() (tfprotov6.ProviderServer, error){
 | 
						|
		"constellation": providerserver.NewProtocol6WithError(New(version)()),
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// bazelSetTerraformBinaryPath sets the path to the Terraform binary for
 | 
						|
// acceptance testing when running under Bazel.
 | 
						|
func bazelSetTerraformBinaryPath(t *testing.T) {
 | 
						|
	if v := os.Getenv("TF_ACC"); v != "1" {
 | 
						|
		t.Fatal("TF_ACC must be set to \"1\" for acceptance tests")
 | 
						|
	}
 | 
						|
 | 
						|
	// If we don't run under Bazel, we need to use the host Terraform binary.
 | 
						|
	// Print a warning and return without setting the path.
 | 
						|
	if !runsUnderBazel() {
 | 
						|
		fmt.Println(
 | 
						|
			"Test is not runding under Bazel.\n" +
 | 
						|
				"Using Host Terraform binary for acceptance testing.\n" +
 | 
						|
				"Tests results may vary from the defaults (which run under Bazel).",
 | 
						|
		)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	tfPath := os.Getenv("TF_ACC_TERRAFORM_PATH")
 | 
						|
	if tfPath == "" {
 | 
						|
		t.Fatal("TF_ACC_TERRAFORM_PATH must be set for acceptance tests")
 | 
						|
	}
 | 
						|
 | 
						|
	absTfPath, err := runfiles.Rlocation(tfPath)
 | 
						|
	if err != nil {
 | 
						|
		panic("could not find path to artifact")
 | 
						|
	}
 | 
						|
 | 
						|
	// Set the path to the absolute Terraform binary for acceptance testing.
 | 
						|
	t.Setenv("TF_ACC_TERRAFORM_PATH", absTfPath)
 | 
						|
}
 | 
						|
 | 
						|
// runsUnderBazel checks whether the test is ran under bazel.
 | 
						|
func runsUnderBazel() bool {
 | 
						|
	return runsUnder == "bazel"
 | 
						|
}
 | 
						|
 | 
						|
// runsUnder is redefined only by the Bazel build at link time.
 | 
						|
var runsUnder = "go"
 |