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:
Christian Mesh 2024-04-22 08:15:59 -04:00 committed by GitHub
parent d39b076cf0
commit 54e3b66dc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 99 additions and 0 deletions

View 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)
}
}

View File

@ -0,0 +1,12 @@
terraform {
required_providers {
example = {
source = "opentofu/testfunctions"
version = "1.0.0"
}
}
}
output "dummy" {
value = provider::example::error()
}

View File

@ -0,0 +1,12 @@
terraform {
required_providers {
example = {
source = "opentofu/testfunctions"
version = "1.0.0"
}
}
}
output "dummy" {
value = provider::example::echo("Hello Functions")
}