pulumi/pulumi · error
registry.Mock.ListPackagesF not implemented
Error message
registry.Mock.ListPackagesF not implemented
What it means
registry.Mock.ListPackages iterates packages via the ListPackagesF function field; if that field is nil the mock was never configured for listing and it panics with this message rather than returning an empty or fake sequence.
Source
Thrown at pkg/registry/mock.go:56
) (apitype.TemplateMetadata, error)
ListTemplatesF func(ctx context.Context, opts ListTemplatesOptions) iter.Seq2[apitype.ListTemplatesResponse, error]
DownloadTemplateF func(ctx context.Context, downloadURL string) (io.ReadCloser, error)
}
func (m Mock) GetPackage(
ctx context.Context, source, publisher, name string, version *semver.Version,
) (apitype.PackageMetadata, error) {
if m.GetPackageF == nil {
panic("registry.Mock.GetPackageF not implemented")
}
return m.GetPackageF(ctx, source, publisher, name, version)
}
func (m Mock) ListPackages(ctx context.Context, name *string) iter.Seq2[apitype.PackageMetadata, error] {
if m.ListPackagesF == nil {
panic("registry.Mock.ListPackagesF not implemented")
}
return m.ListPackagesF(ctx, name)
}
func (m Mock) GetTemplate(
ctx context.Context, source, publisher, name string, version *semver.Version,
) (apitype.TemplateMetadata, error) {
if m.GetTemplateF == nil {
panic("registry.Mock.GetTemplateF not implemented")
}
return m.GetTemplateF(ctx, source, publisher, name, version)
}
func (m Mock) ListTemplates(
ctx context.Context, opts ListTemplatesOptions,
) iter.Seq2[apitype.ListTemplatesResponse, error] {
if m.ListTemplatesF == nil {
panic("registry.Mock.ListTemplatesF not implemented")View on GitHub (pinned to 793f7b2e16)
Solutions
- Set ListPackagesF in the test fixture, e.g. ListPackagesF: func(name *string) iter.Seq2[apitype.PackageMetadata, error] { ... } returning a small sequence
- If listing isn't relevant to the test, route the code under test to a different dependency or stub it
- Add a default-populated Mock constructor to keep fixtures complete
- Update stale test setups after registry interface changes
Example fix
// before
mock := registry.Mock{}
// after
mock := registry.Mock{
ListPackagesF: func(name *string) iter.Seq2[apitype.PackageMetadata, error] {
return func(yield func(apitype.PackageMetadata, error) bool) {
yield(apitype.PackageMetadata{Name: deref(name)}, nil)
}
},
} Defensive patterns
Strategy: validation
Validate before calling
if mock.ListPackagesF == nil {
t.Fatal("test bug: registry.Mock.ListPackagesF must be set before use")
} Type guard
func configuredListPackages(m registry.Mock) bool { return m.ListPackagesF != nil } Try / catch
// panic is intentional; guard in test setup: require.NotNil(t, mock.ListPackagesF, "ListPackagesF not configured")
Prevention
- Stub list methods (iterators) when setting up the mock, not only get methods
- Re-check mock completeness after adding list-based call paths in production code
- Use a shared fixture builder that fills all fields
When it happens
Trigger: Code under test calls Mock.ListPackages (e.g. pulumi package list or search flows) while the test's Mock lacks ListPackagesF, or a test exercising a newly added list path with an older fixture.
Common situations: Existing tests re-used after production code started calling ListPackages; forgetting to stub iterator-returning methods when setting up the registry mock; incremental interface changes leaving fixtures incomplete.
Related errors
- registry.Mock.GetPackageF not implemented
- registry.Mock.GetTemplateF not implemented
- registry.Mock.ListTemplatesF not implemented
- could not start engine service: %w
- unknown diff kind %v
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/614175f63431c240.
Report an issue: GitHub.