Skip to content

Commit 01c822a

Browse files
committed
test: fix prune regression digest fixtures
1 parent f77b409 commit 01c822a

1 file changed

Lines changed: 41 additions & 2 deletions

File tree

Tests/TartTests/VMStorageOCITests.swift

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -737,17 +737,22 @@ final class VMStorageOCITests: XCTestCase {
737737
// Use syntactically valid digests here; the test only exercises record
738738
// and tag-symlink cleanup, not content installation.
739739
let deletedManifest = try stackedManifest(
740-
baseContentDigest: "sha256:" + String(repeating: "a", count: 64)
740+
baseContentDigest: "sha256:" + String(repeating: "a", count: 64),
741+
overlayContentDigest: "sha256:" + String(repeating: "e", count: 64)
741742
)
742743
let retainedManifest = try stackedManifest(
743-
baseContentDigest: "sha256:" + String(repeating: "b", count: 64)
744+
baseContentDigest: "sha256:" + String(repeating: "b", count: 64),
745+
overlayContentDigest: "sha256:" + String(repeating: "f", count: 64)
744746
)
745747
let deletedName = try digestName(for: deletedManifest)
746748
let deletedRecord = try createRecord(for: deletedManifest, in: storage)
747749
let tagName = RemoteName(host: "example.com", namespace: "org/image", reference: Reference(tag: "deleted"))
748750
let tagURL = storage.baseURL.appendingRemoteName(tagName)
749751
try storage.link(from: tagName, to: deletedName)
750752
let retainedRecord = try createRecord(for: retainedManifest, in: storage)
753+
let retainedTagName = RemoteName(host: "example.com", namespace: "org/image", reference: Reference(tag: "retained"))
754+
let retainedTagURL = storage.baseURL.appendingRemoteName(retainedTagName)
755+
try storage.link(from: retainedTagName, to: try digestName(for: retainedManifest))
751756
try deletedRecord.url.updateAccessDate(Date(timeIntervalSince1970: 1))
752757

753758
try Prune.pruneOlderThan(
@@ -758,6 +763,40 @@ final class VMStorageOCITests: XCTestCase {
758763
XCTAssertFalse(FileManager.default.fileExists(atPath: deletedRecord.url.path))
759764
XCTAssertThrowsError(try FileManager.default.destinationOfSymbolicLink(atPath: tagURL.path))
760765
XCTAssertTrue(FileManager.default.fileExists(atPath: retainedRecord.url.path))
766+
XCTAssertTrue(FileManager.default.fileExists(atPath: retainedTagURL.path))
767+
}
768+
}
769+
770+
func testSpaceBudgetPruningCachedImageRemovesOnlyItsTagSymlink() throws {
771+
try withTemporaryTartHome {
772+
let storage = try VMStorageOCI()
773+
let deletedManifest = try stackedManifest(
774+
baseContentDigest: "sha256:" + String(repeating: "c", count: 64),
775+
overlayContentDigest: "sha256:" + String(repeating: "0", count: 64)
776+
)
777+
let retainedManifest = try stackedManifest(
778+
baseContentDigest: "sha256:" + String(repeating: "d", count: 64),
779+
overlayContentDigest: "sha256:" + String(repeating: "1", count: 64)
780+
)
781+
let deletedName = try digestName(for: deletedManifest)
782+
let deletedRecord = try createRecord(for: deletedManifest, in: storage)
783+
let tagName = RemoteName(host: "example.com", namespace: "org/image", reference: Reference(tag: "deleted"))
784+
let tagURL = storage.baseURL.appendingRemoteName(tagName)
785+
try storage.link(from: tagName, to: deletedName)
786+
let retainedRecord = try createRecord(for: retainedManifest, in: storage)
787+
let retainedTagName = RemoteName(host: "example.com", namespace: "org/image", reference: Reference(tag: "retained"))
788+
let retainedTagURL = storage.baseURL.appendingRemoteName(retainedTagName)
789+
try storage.link(from: retainedTagName, to: try digestName(for: retainedManifest))
790+
try deletedRecord.url.updateAccessDate(Date(timeIntervalSince1970: 1))
791+
try retainedRecord.url.updateAccessDate(Date(timeIntervalSince1970: 2))
792+
let retainedSize = UInt64(try retainedRecord.url.allocatedSizeBytes())
793+
794+
try Prune.pruneSpaceBudget(prunableStorages: [storage], spaceBudgetBytes: retainedSize)
795+
796+
XCTAssertFalse(FileManager.default.fileExists(atPath: deletedRecord.url.path))
797+
XCTAssertThrowsError(try FileManager.default.destinationOfSymbolicLink(atPath: tagURL.path))
798+
XCTAssertTrue(FileManager.default.fileExists(atPath: retainedRecord.url.path))
799+
XCTAssertTrue(FileManager.default.fileExists(atPath: retainedTagURL.path))
761800
}
762801
}
763802

0 commit comments

Comments
 (0)