mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-23 07:33:32 -06:00
Provider Defined Functions direct e2e test (#1476)
Signed-off-by: Christian Mesh <christianmesh1@gmail.com> Signed-off-by: James Humphries <james@james-humphries.co.uk> Co-authored-by: James Humphries <james@james-humphries.co.uk>
This commit is contained in:
parent
d39b076cf0
commit
54e3b66dc1
75
internal/command/e2etest/provider_functions_test.go
Normal file
75
internal/command/e2etest/provider_functions_test.go
Normal file
@ -0,0 +1,75 @@
|
||||
package e2etest
|
||||
|
||||
import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/opentofu/opentofu/internal/e2e"
|
||||
)
|
||||
|
||||
func TestFunction_Simple(t *testing.T) {
|
||||
// This test reaches out to registry.opentofu.org to download the
|
||||
// test functions provider, so it can only run if network access is allowed
|
||||
skipIfCannotAccessNetwork(t)
|
||||
|
||||
fixturePath := filepath.Join("testdata", "functions")
|
||||
tf := e2e.NewBinary(t, tofuBin, fixturePath)
|
||||
|
||||
// tofu init
|
||||
_, stderr, err := tf.Run("init")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
if stderr != "" {
|
||||
t.Errorf("unexpected stderr output:\n%s", stderr)
|
||||
}
|
||||
|
||||
_, stderr, err = tf.Run("plan", "-out=fnplan")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
if stderr != "" {
|
||||
t.Errorf("unexpected stderr output:\n%s", stderr)
|
||||
}
|
||||
|
||||
plan, err := tf.Plan("fnplan")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
|
||||
if len(plan.Changes.Outputs) != 1 {
|
||||
t.Fatalf("expected 1 outputs, got %d", len(plan.Changes.Outputs))
|
||||
}
|
||||
for _, out := range plan.Changes.Outputs {
|
||||
if !strings.Contains(string(out.After), "Hello Functions") {
|
||||
t.Fatalf("unexpected plan output: %s", string(out.After))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFunction_Error(t *testing.T) {
|
||||
// This test reaches out to registry.opentofu.org to download the
|
||||
// test functions provider, so it can only run if network access is allowed
|
||||
skipIfCannotAccessNetwork(t)
|
||||
fixturePath := filepath.Join("testdata", "functions-error")
|
||||
tf := e2e.NewBinary(t, tofuBin, fixturePath)
|
||||
|
||||
// tofu init
|
||||
_, stderr, err := tf.Run("init")
|
||||
if err != nil {
|
||||
t.Errorf("unexpected error: %s", err)
|
||||
}
|
||||
if stderr != "" {
|
||||
t.Errorf("unexpected stderr output:\n%s", stderr)
|
||||
}
|
||||
|
||||
// tofu plan -out=fnplan
|
||||
_, stderr, err = tf.Run("plan", "-out=fnplan")
|
||||
if err == nil {
|
||||
t.Errorf("expected error: %s", err)
|
||||
}
|
||||
if !strings.Contains(stderr, "Call to function \"provider::example::error\" failed") {
|
||||
t.Errorf("unexpected stderr output:\n%s", stderr)
|
||||
}
|
||||
}
|
12
internal/command/e2etest/testdata/functions-error/main.tf
vendored
Normal file
12
internal/command/e2etest/testdata/functions-error/main.tf
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
example = {
|
||||
source = "opentofu/testfunctions"
|
||||
version = "1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output "dummy" {
|
||||
value = provider::example::error()
|
||||
}
|
12
internal/command/e2etest/testdata/functions/main.tf
vendored
Normal file
12
internal/command/e2etest/testdata/functions/main.tf
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
terraform {
|
||||
required_providers {
|
||||
example = {
|
||||
source = "opentofu/testfunctions"
|
||||
version = "1.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
output "dummy" {
|
||||
value = provider::example::echo("Hello Functions")
|
||||
}
|
Loading…
Reference in New Issue
Block a user