Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
joseivanlopez committed Nov 8, 2024
1 parent 9e37157 commit 7e26d2a
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 15 deletions.
48 changes: 39 additions & 9 deletions web/src/storage/model/config/space-policy.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -62,24 +62,32 @@ describe("#generate", () => {
expect(model.generate(
{
partitions: [
{ search: "*", size: { min: 0 } }
{ search: "*", size: { min: 0, max: "current" } }
]
}
)).toEqual("resize");

expect(model.generate(
{
partitions: [
{ search: { ifNotFound: "skip" }, size: { min: 0 } }
{ search: "*", size: [0, "current"] }
]
}
)).toEqual("resize");

expect(model.generate(
{
partitions: [
{ search: "*", size: { min: 0, max: 2048 } },
{ filesystem: { path: "/" } }
{ search: { ifNotFound: "skip" }, size: { min: 0, max: "current" } }
]
}
)).toEqual("resize");

expect(model.generate(
{
partitions: [
{ search: "*", size: { min: 0, max: "current" } },
{ generate: "default" }
]
}
)).toEqual("resize");
Expand Down Expand Up @@ -113,25 +121,47 @@ describe("#generate", () => {
expect(model.generate(
{
partitions: [
{ search: "/dev/vda", size: { min: 0 } }
{ search: "*", deleteIfNeeded: true, size: [0, "current"] }
]
}
)).toEqual("custom");

expect(model.generate(
{
partitions: [
{ search: "*", size: { min: 0 } }
]
}
)).toEqual("custom");

expect(model.generate(
{
partitions: [
{ search: "*", size: { min: 0, max: 1024 } }
]
}
)).toEqual("custom");

expect(model.generate(
{
partitions: [
{ search: "/dev/vda", delete: true }
]
}
)).toEqual("custom");

expect(model.generate(
{
partitions: [
{ search: "/dev/vda", deleteIfNeeded: true, size: { min: 0 } }
{ search: "/dev/vda", size: { min: 0, max: "current" } }
]
}
)).toEqual("custom");

expect(model.generate(
{
partitions: [
{ search: "/dev/vda", deleteIfNeeded: true, size: { min: 0 } },
{ search: "/dev/vdb", delete: true },
{ search: "/dev/vdc", size: { min: 0 } },
{ search: "/dev/vda", delete: true },
{ filesystem: { path: "/" } }
]
}
Expand Down
38 changes: 32 additions & 6 deletions web/src/storage/model/config/space-policy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@

import { config } from "~/api/storage/types";
import * as checks from "~/api/storage/types/checks";
import { generate as generateSize } from "~/storage/model/config/size";

export type SpacePolicy = "keep" | "resize" | "delete" | "custom";

Expand Down Expand Up @@ -90,16 +89,21 @@ class SpacePolicyGenerator {
checks.isPartition(partitionConfig) &&
partitionConfig.search &&
this.isSearchAll(partitionConfig.search) &&
generateSize(partitionConfig)?.min === 0
partitionConfig.size &&
this.isShrinkAllSize(partitionConfig.size)
);
}

// TODO: if the size is not a range, then detect resize partitions by comparing with the size of
// the system device.
private isResizePartition(partitionConfig: config.PartitionElement): boolean {
if (!checks.isPartition(partitionConfig)) return false;

return (
checks.isPartition(partitionConfig) &&
!this.isResizeAllPartition(partitionConfig) &&
partitionConfig.search &&
generateSize(partitionConfig)?.min === 0 &&
!this.isResizeAllPartition(partitionConfig)
partitionConfig.size &&
this.isResizeSize(partitionConfig.size)
);
}

Expand All @@ -110,7 +114,29 @@ class SpacePolicyGenerator {
!searchConfig.max &&
searchConfig.ifNotFound === "skip";

return checks.isSearchAll(searchConfig) || isAdvancedSearchAll;
return isAdvancedSearchAll || checks.isSearchAll(searchConfig);
}

private isShrinkAllSize(sizeConfig: config.Size): boolean {
if (!this.isResizeSize(sizeConfig)) return false;

return (
(checks.isSizeTuple(sizeConfig) &&
sizeConfig[0] === 0 &&
sizeConfig[1] &&
checks.isSizeCurrent(sizeConfig[1])) ||
(checks.isSizeRange(sizeConfig) &&
sizeConfig.min === 0 &&
sizeConfig.max &&
checks.isSizeCurrent(sizeConfig.max))
);
}

private isResizeSize(sizeConfig: config.Size): boolean {
if (checks.isSizeBytes(sizeConfig)) return false;
if (checks.isSizeString(sizeConfig)) return false;
if (checks.isSizeTuple(sizeConfig)) return sizeConfig[0] !== sizeConfig[1];
if (checks.isSizeRange(sizeConfig)) return sizeConfig.min !== sizeConfig.max;
}

private partitionConfigs(): config.PartitionElement[] {
Expand Down

0 comments on commit 7e26d2a

Please sign in to comment.