mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-04 13:17:43 -06:00
4a21b763aa
After the refactoring to integrate HCL2 many of the tests were no longer using correct types, attribute names, etc. This is a bulk update of all of the tests to make them compile again, with minimal changes otherwise. Although the tests now compile, many of them do not yet pass. The tests will be gradually repaired in subsequent commits, as we continue to complete the refactoring and retrofit work.
173 lines
3.1 KiB
Go
173 lines
3.1 KiB
Go
package terraform
|
|
|
|
import (
|
|
"archive/tar"
|
|
"bytes"
|
|
"compress/gzip"
|
|
"io"
|
|
"io/ioutil"
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// debugInfo should be safe when nil
|
|
func TestDebugInfo_nil(t *testing.T) {
|
|
var d *debugInfo
|
|
|
|
d.SetPhase("none")
|
|
d.WriteFile("none", nil)
|
|
d.Close()
|
|
}
|
|
|
|
func TestDebugInfo_basicFile(t *testing.T) {
|
|
var w bytes.Buffer
|
|
debug, err := newDebugInfo("test-debug-info", &w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
debug.SetPhase("test")
|
|
|
|
fileData := map[string][]byte{
|
|
"file1": []byte("file 1 data"),
|
|
"file2": []byte("file 2 data"),
|
|
"file3": []byte("file 3 data"),
|
|
}
|
|
|
|
for f, d := range fileData {
|
|
err = debug.WriteFile(f, d)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|
|
|
|
err = debug.Close()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
gz, err := gzip.NewReader(&w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tr := tar.NewReader(gz)
|
|
|
|
for {
|
|
hdr, err := tr.Next()
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// get the filename part of the archived file
|
|
name := regexp.MustCompile(`\w+$`).FindString(hdr.Name)
|
|
data := fileData[name]
|
|
|
|
delete(fileData, name)
|
|
|
|
tarData, err := ioutil.ReadAll(tr)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if !bytes.Equal(data, tarData) {
|
|
t.Fatalf("got '%s' for file '%s'", tarData, name)
|
|
}
|
|
}
|
|
|
|
for k := range fileData {
|
|
t.Fatalf("didn't find file %s", k)
|
|
}
|
|
}
|
|
|
|
// Test that we get logs and graphs from a walk. We're not looking for anything
|
|
// specific, since the output is going to change in the near future.
|
|
func TestDebug_plan(t *testing.T) {
|
|
var out bytes.Buffer
|
|
d, err := newDebugInfo("test-debug-info", &out)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// set the global debug value
|
|
dbug = d
|
|
|
|
// run a basic plan
|
|
m := testModule(t, "plan-good")
|
|
p := testProvider("aws")
|
|
p.DiffFn = testDiffFn
|
|
ctx := testContext2(t, &ContextOpts{
|
|
Config: m,
|
|
ProviderResolver: ResourceProviderResolverFixed(
|
|
map[string]ResourceProviderFactory{
|
|
"aws": testProviderFuncFixed(p),
|
|
},
|
|
),
|
|
})
|
|
|
|
_, diags := ctx.Plan()
|
|
if diags.HasErrors() {
|
|
t.Fatalf("err: %s", diags.Err())
|
|
}
|
|
|
|
err = CloseDebugInfo()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
gz, err := gzip.NewReader(&out)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
tr := tar.NewReader(gz)
|
|
|
|
graphLogs := 0
|
|
for {
|
|
hdr, err := tr.Next()
|
|
if err == io.EOF {
|
|
break
|
|
}
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// record any file that contains data
|
|
if hdr.Size > 0 {
|
|
if strings.HasSuffix(hdr.Name, "graph.json") {
|
|
graphLogs++
|
|
}
|
|
}
|
|
}
|
|
|
|
if graphLogs == 0 {
|
|
t.Fatal("no json graphs")
|
|
}
|
|
}
|
|
|
|
// verify that no hooks panic on nil input
|
|
func TestDebugHook_nilArgs(t *testing.T) {
|
|
// make sure debug isn't nil, so the hooks try to execute
|
|
var w bytes.Buffer
|
|
var err error
|
|
dbug, err = newDebugInfo("test-debug-info", &w)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
var h DebugHook
|
|
h.PostApply(nil, nil, nil)
|
|
h.PostDiff(nil, nil)
|
|
h.PostImportState(nil, nil)
|
|
h.PostProvision(nil, "", nil)
|
|
h.PostProvisionResource(nil, nil)
|
|
h.PostRefresh(nil, nil)
|
|
h.PostStateUpdate(nil)
|
|
h.PreApply(nil, nil, nil)
|
|
h.PreDiff(nil, nil)
|
|
h.PreImportState(nil, "")
|
|
h.PreProvision(nil, "")
|
|
h.PreProvisionResource(nil, nil)
|
|
h.PreRefresh(nil, nil)
|
|
h.ProvisionOutput(nil, "", "")
|
|
}
|