pulumi/pkg/codegen/python/gen_program_test.go
Pat Gavlin b4daf94c2f
[codegen] Add support for caching package schemas. (#4534)
If a single process is going to bind and generate multiple programs, it
is useful to be able to cache package schemas in order to avoid the
(large) overhead of deserializing schemas multiple times.
2020-04-30 13:22:24 -07:00

66 lines
1.6 KiB
Go

package python
import (
"bytes"
"io/ioutil"
"path/filepath"
"testing"
"github.com/stretchr/testify/assert"
"github.com/pulumi/pulumi/pkg/v2/codegen/hcl2"
"github.com/pulumi/pulumi/pkg/v2/codegen/hcl2/syntax"
"github.com/pulumi/pulumi/pkg/v2/codegen/internal/test"
)
var testdataPath = filepath.Join("..", "internal", "test", "testdata")
func TestGenProgram(t *testing.T) {
files, err := ioutil.ReadDir(testdataPath)
if err != nil {
t.Fatalf("could not read test data: %v", err)
}
for _, f := range files {
if filepath.Ext(f.Name()) != ".pp" {
continue
}
t.Run(f.Name(), func(t *testing.T) {
path := filepath.Join(testdataPath, f.Name())
contents, err := ioutil.ReadFile(path)
if err != nil {
t.Fatalf("could not read %v: %v", path, err)
}
expected, err := ioutil.ReadFile(path + ".py")
if err != nil {
t.Fatalf("could not read %v: %v", path+".py", err)
}
parser := syntax.NewParser()
err = parser.ParseFile(bytes.NewReader(contents), f.Name())
if err != nil {
t.Fatalf("could not read %v: %v", path, err)
}
if parser.Diagnostics.HasErrors() {
t.Fatalf("failed to parse files: %v", parser.Diagnostics)
}
program, diags, err := hcl2.BindProgram(parser.Files, hcl2.PluginHost(test.NewHost(testdataPath)))
if err != nil {
t.Fatalf("could not bind program: %v", err)
}
if diags.HasErrors() {
t.Fatalf("failed to bind program: %v", diags)
}
files, diags, err := GenerateProgram(program)
assert.NoError(t, err)
if diags.HasErrors() {
t.Fatalf("failed to bind program: %v", diags)
}
assert.Equal(t, string(expected), string(files["__main__.py"]))
})
}
}