11eff25a20
Long term I want to introduce a new snake_case based naming system to schemas. There's an internal design doc about this at https://docs.google.com/document/d/1ns07htpLjw0dJPn5p7TBPVULvwwYc1Pl7l1c1jdGXoY/edit. As part of that we get the nice feature that _nearly_ all current names are either valid and the same in both system (e.g. "foo"), or they look different in the current system (e.g. "fooBar"). But there are a handful of odd cases where we have providers using names that look like they should be new style snake case names (e.g. kubernetes has a load of "x_kubernetes_" properties). To provide a way to ensure k8s can stay on the current name generation (even though it gives pretty odd results) this change adds a test with a schema demonstrating a load of snake_case names. When we do add the new naming system this test _should not diff_, excepting possibly setting an option if the new naming system is opt-out rather than opt-in. |
||
---|---|---|
.. | ||
testdata | ||
README.md | ||
helpers.go | ||
program_driver.go | ||
program_driver_test.go | ||
sdk_driver.go | ||
type_driver.go |
README.md
SDK Codegen Tests
TestSDKCodegen runs the complete set of SDK code generation tests against a particular language's code generator. It also verifies that the generated code is structurally sound.
The test files live in pkg/codegen/testing/test/testdata
and
are registered in the following globals in pkg/codegen/testing/test.
- sdk_driver.go:
PulumiPulumiSDKTests
- program_driver.go:
PulumiPulumiProgramTests
- program_driver.go:
PulumiPulumiYAMLProgramTests
An SDK code generation test files consists of a schema and a set of expected outputs for each language. Each test is structured as a directory that contains that information:
testdata/
my-simple-schema/ # i.e. `simple-enum-schema`
schema.(json|yaml)
go/
python/
nodejs/
dotnet/
...
The schema is the only piece that must be manually authored.
Once the schema has been written, the actual codegen outputs can be
generated by running the following in pkg/codegen
directory:
PULUMI_ACCEPT=true go test ./...
This will rebuild subfolders such as go/
from scratch and store
the set of code-generated file names in go/codegen-manifest.json
.
To generate the code for a specific directory in testdata,
run the following instead:
PULUMI_ACCEPT=true go test ./... -run TestGenerate/$dirName
If these outputs look correct, they need to be checked into git and will then serve as the expected values for the normal test runs:
$ go test ./...
That is, the normal test runs will fail if changes to codegen or
schema lead to a diff in the generated file set. If the diff is
intentional, it can be accepted again via PULUMI_ACCEPT=true
.
Writing Program Tests on Generated Code
To support running unit tests over the generated code, the tests
also support mixing in manually written $lang-extras
files into
the generated tree. For example, given the following input:
testdata/
my-simple-schema/
schema.json
go/
go-extras/
tests/
go_test.go
The system will copy go-extras/tests/go_test.go
into
go/tests/go_test.go
before performing compilation and unit test
checks over the project generated in go
.