mirror of https://github.com/pulumi/pulumi.git
77 lines
2.2 KiB
Markdown
77 lines
2.2 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
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:
|
|
|
|
```bash
|
|
$ 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`.
|