1
0
mirror of https://github.com/lensapp/lens.git synced 2025-05-20 05:10:56 +00:00

Add migration to new type of key

Signed-off-by: Juho Heikka <juho.heikka@gmail.com>
This commit is contained in:
Juho Heikka 2023-02-21 09:25:14 +02:00
parent 169bb1b8f6
commit 8d9d710463
2 changed files with 49 additions and 28 deletions

View File

@ -6,7 +6,7 @@
import type { ObservableMap } from "mobx"; import type { ObservableMap } from "mobx";
import { getInjectable } from "@ogre-tools/injectable"; import { getInjectable } from "@ogre-tools/injectable";
import { getOrInsertWithAsync } from "../../../common/utils"; import { getOrInsert } from "../../../common/utils";
import randomBytesInjectable from "../../../common/utils/random-bytes.injectable"; import randomBytesInjectable from "../../../common/utils/random-bytes.injectable";
import joinPathsInjectable from "../../../common/path/join-paths.injectable"; import joinPathsInjectable from "../../../common/path/join-paths.injectable";
import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable"; import directoryForExtensionDataInjectable from "./directory-for-extension-data.injectable";
@ -35,14 +35,16 @@ const ensureHashedDirectoryForExtensionInjectable = getInjectable({
const hashedDirectoryForLegacyDirPath = registeredExtensions.get(legacyDirPath); const hashedDirectoryForLegacyDirPath = registeredExtensions.get(legacyDirPath);
if (hashedDirectoryForLegacyDirPath) { if (hashedDirectoryForLegacyDirPath) {
registeredExtensions.set(extensionName, hashedDirectoryForLegacyDirPath);
registeredExtensions.delete(legacyDirPath);
dirPath = hashedDirectoryForLegacyDirPath; dirPath = hashedDirectoryForLegacyDirPath;
} else { } else {
dirPath = await getOrInsertWithAsync(registeredExtensions, extensionName, async () => { const salt = randomBytes(32).toString("hex");
const salt = (await randomBytes(32)).toString("hex"); const hashedName = getHash(`${extensionName}/${salt}`);
const hashedName = getHash(`${extensionName}/${salt}`);
return joinPaths(directoryForExtensionData, hashedName); const hashedExtensionDirectory = joinPaths(directoryForExtensionData, hashedName);
});
dirPath = getOrInsert(registeredExtensions, extensionName, hashedExtensionDirectory);
} }
await ensureDirectory(dirPath); await ensureDirectory(dirPath);

View File

@ -51,32 +51,51 @@ describe("ensure-hashed-directory-for-extension", () => {
registeredExtensions, registeredExtensions,
); );
expect(actual).not.toBe("some-directory"); expect(actual).toBe("some-directory-for-extension-data/12a427eae86fd78610c0404c3c1ef42cb28d8af1605552ed7cf30beaee21e876");
}); });
it("given extension directory was saved based on extension's package.json path, returns existing directory", async () => { describe("given extension directory was saved based on extension's package.json path", () => {
runInAction(() => { beforeEach(() => {
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory"); runInAction(() => {
}); registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
const actual = await ensureHashedDirectoryForExtension( });
"some-extension-name", ensureDirMock.mockClear();
registeredExtensions,
);
expect(actual).toBe("some-directory");
});
it("given extension directory was saved based on extension's package.json path, ensure dir is called with right parameter", async () => {
runInAction(() => {
registeredExtensions.set("/some-directory-for-user-data/node_modules/some-extension-name/package.json", "some-directory");
}); });
await ensureHashedDirectoryForExtension( it("returns existing directory", async () => {
"some-extension-name", const actual = await ensureHashedDirectoryForExtension(
registeredExtensions, "some-extension-name",
); registeredExtensions,
);
expect(ensureDirMock).toHaveBeenCalledWith("some-directory"); expect(actual).toBe("some-directory");
});
it("ensure dir is called with some directory", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(ensureDirMock).toHaveBeenCalledWith("some-directory");
});
it("is migrated to use the extension name as key", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(registeredExtensions.get("some-extension-name")).toEqual("some-directory");
});
it("old key is removed", async () => {
await ensureHashedDirectoryForExtension(
"some-extension-name",
registeredExtensions,
);
expect(registeredExtensions.has("/some-directory-for-user-data/node_modules/some-extension-name/package.json")).toEqual(false);
});
}); });
}); });