bored-nightfall-11601
04/19/2026, 4:43 PMpulumi-test-language binary that is compiled from upstream and I don't see a way of injecting custom tests.echoing-dinner-19531
04/19/2026, 7:36 PMbored-nightfall-11601
04/19/2026, 7:40 PMbored-nightfall-11601
04/19/2026, 7:41 PMbored-nightfall-11601
04/19/2026, 8:10 PMechoing-dinner-19531
04/19/2026, 8:16 PMbored-nightfall-11601
04/19/2026, 8:18 PMbored-nightfall-11601
04/19/2026, 8:18 PM// runTestingHost boots up a new instance of the language conformance test runner, `pulumi-test-language`, as well as a
// fake Pulumi engine for collecting logs. It returns the address of the fake engine and a connection to the test runner
// that can be used to manage a test suite run.
func runTestingHost(t *testing.T) (string, testingrpc.LanguageTestClient) {
// We can't just go run the pulumi-test-language package because of
// <https://github.com/golang/go/issues/39172>, so we build it to a temp file then run that.
binary := t.TempDir() + "/pulumi-test-language"
cmd := exec.Command("go", "build", "-o", binary, "<http://github.com/pulumi/pulumi/pkg/v3/testing/pulumi-test-language|github.com/pulumi/pulumi/pkg/v3/testing/pulumi-test-language>") //nolint:gosec,lll
output, err := cmd.CombinedOutput()
t.Logf("build output: %s", output)
require.NoError(t, err)
cmd = exec.Command(binary)
stdout, err := cmd.StdoutPipe()
require.NoError(t, err)
stderr, err := cmd.StderrPipe()
require.NoError(t, err)
stderrReader := bufio.NewReader(stderr)
var wg sync.WaitGroup
wg.Add(1)
go func() {
for {
text, err := stderrReader.ReadString('\n')
if err != nil {
wg.Done()
return
}
t.Logf("engine: %s", text)
}
}()
err = cmd.Start()
require.NoError(t, err)
stdoutBytes, err := io.ReadAll(stdout)
require.NoError(t, err)
address := string(stdoutBytes)
conn, err := grpc.NewClient(
address,
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithUnaryInterceptor(rpcutil.OpenTracingClientInterceptor()),
grpc.WithStreamInterceptor(rpcutil.OpenTracingStreamClientInterceptor()),
rpcutil.GrpcChannelOptions(),
)
require.NoError(t, err)
client := testingrpc.NewLanguageTestClient(conn)
t.Cleanup(func() {
assert.NoError(t, cmd.Process.Kill())
wg.Wait()
// We expect this to error because we just killed it.
contract.IgnoreError(cmd.Wait())
})
return address, client
}
Making this a function. I think it's copied into every single language_testbored-nightfall-11601
04/19/2026, 8:18 PMechoing-dinner-19531
04/19/2026, 8:25 PMbored-nightfall-11601
04/19/2026, 8:37 PMbored-nightfall-11601
04/19/2026, 8:37 PMechoing-dinner-19531
04/19/2026, 8:39 PMechoing-dinner-19531
04/19/2026, 8:40 PMbored-nightfall-11601
04/19/2026, 8:42 PMpulumi-java. Well - anything that actually runs these tests.bored-nightfall-11601
04/19/2026, 8:42 PMbored-nightfall-11601
04/19/2026, 10:45 PMrunner inside language-test