rework logic to explicitly rely on the list of plugins to create the map keys

Signed-off-by: aramissennyeydd <aramis.sennyey@doordash.com>
This commit is contained in:
aramissennyeydd
2025-10-22 22:31:04 -04:00
parent 9ea2c4fb35
commit 769e2b7880
2 changed files with 65 additions and 27 deletions
@@ -1129,6 +1129,44 @@ describe('BackendInitializer', () => {
await backend.start();
});
it('should ignore modules that do not have a matching plugin', async () => {
expect.assertions(1);
const backend = new BackendInitializer(baseFactories);
const instanceMetadataPlugin = createBackendPlugin({
pluginId: 'instance-metadata',
register(reg) {
reg.registerInit({
deps: {
instanceMetadata: coreServices.rootInstanceMetadata,
},
async init({ instanceMetadata }) {
await expect(
instanceMetadata.getInstalledPlugins(),
).resolves.toEqual([
{
pluginId: 'instance-metadata',
modules: [],
},
]);
},
});
},
});
const module = createBackendModule({
pluginId: 'test',
moduleId: 'test',
register(reg) {
reg.registerInit({
deps: {},
async init() {},
});
},
});
backend.add(module);
backend.add(instanceMetadataPlugin);
await backend.start();
});
it('should prevent writes to the instance metadata service', async () => {
expect.assertions(1);
const backend = new BackendInitializer(baseFactories);
@@ -99,38 +99,38 @@ const instanceRegistry = new (class InstanceRegistry {
})();
function createRootInstanceMetadataServiceFactory(
registrations: InternalBackendRegistrations[],
rawRegistrations: InternalBackendRegistrations[],
) {
const installedPlugins: Map<string, RootInstanceMetadataServicePluginInfo> =
new Map();
for (const registration of registrations) {
if (registration.featureType === 'registrations') {
for (const feature of registration.getRegistrations()) {
if (feature.type === 'plugin') {
if (!installedPlugins.get(feature.pluginId)) {
installedPlugins.set(feature.pluginId, {
pluginId: feature.pluginId,
modules: [],
});
}
} else if (feature.type === 'module') {
if (!installedPlugins.get(feature.pluginId)) {
installedPlugins.set(feature.pluginId, {
pluginId: feature.pluginId,
modules: [],
});
}
(
installedPlugins.get(feature.pluginId)!.modules as Array<{
moduleId: string;
}>
).push({
moduleId: feature.moduleId,
});
}
}
const registrations = rawRegistrations
.filter(registration => registration.featureType === 'registrations')
.flatMap(registration => registration.getRegistrations());
const plugins = registrations.filter(
registration => registration.type === 'plugin',
);
const modules = registrations.filter(
registration => registration.type === 'module',
);
for (const plugin of plugins) {
const { pluginId } = plugin;
if (!installedPlugins.get(pluginId)) {
installedPlugins.set(pluginId, {
pluginId,
modules: [],
});
}
}
for (const module of modules) {
const { pluginId, moduleId } = module;
const installedPlugin = installedPlugins.get(pluginId);
if (installedPlugin) {
(installedPlugin.modules as Array<{ moduleId: string }>).push({
moduleId,
});
}
}
return createServiceFactory({
service: coreServices.rootInstanceMetadata,
deps: {},