Log errors coming from the language host (#1780)
* Log errors coming from the language host Similar to pulumi/pulumi#1762, fixes pulumi/pulumi#1775. The language host can fail without issuing any diagnostics and it is very unclear what happens if the engine does not log the error. * CR feedback
This commit is contained in:
parent
c924c18d2c
commit
d1524e1081
|
@ -1319,3 +1319,47 @@ func TestRefreshWithDelete(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Tests that errors returned directly from the language host get logged by the engine.
|
||||
func TestLanguageHostDiagnostics(t *testing.T) {
|
||||
loaders := []*deploytest.ProviderLoader{
|
||||
deploytest.NewProviderLoader("pkgA", semver.MustParse("1.0.0"), func() (plugin.Provider, error) {
|
||||
return &deploytest.Provider{}, nil
|
||||
}),
|
||||
}
|
||||
|
||||
errorText := "oh no"
|
||||
program := deploytest.NewLanguageRuntime(func(_ plugin.RunInfo, _ *deploytest.ResourceMonitor) error {
|
||||
// Exiting immediately with an error simulates a language exiting immediately with a non-zero exit code.
|
||||
return errors.New(errorText)
|
||||
})
|
||||
|
||||
host := deploytest.NewPluginHost(nil, program, loaders...)
|
||||
p := &TestPlan{
|
||||
Options: UpdateOptions{host: host},
|
||||
Steps: []TestStep{{
|
||||
Op: Update,
|
||||
ExpectFailure: true,
|
||||
SkipPreview: true,
|
||||
Validate: func(project workspace.Project, target deploy.Target, j *Journal, evts []Event, err error) error {
|
||||
assert.Error(t, err)
|
||||
sawExitCode := false
|
||||
for _, evt := range evts {
|
||||
if evt.Type == DiagEvent {
|
||||
e := evt.Payload.(DiagEventPayload)
|
||||
msg := colors.Never.Colorize(e.Message)
|
||||
sawExitCode = strings.Contains(msg, errorText) && e.Severity == diag.Error
|
||||
if sawExitCode {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert.True(t, sawExitCode)
|
||||
return err
|
||||
},
|
||||
}},
|
||||
}
|
||||
|
||||
p.Run(t, nil)
|
||||
}
|
||||
|
|
|
@ -120,6 +120,7 @@ outer:
|
|||
if event.Error != nil {
|
||||
logging.V(planExecutorLogLevel).Infof("PlanExecutor.Execute(...): saw incoming error: %v", event.Error)
|
||||
pe.cancelDueToError()
|
||||
pe.plan.Diag().Errorf(diag.RawMessage("" /*urn*/, event.Error.Error()))
|
||||
break outer
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue