Files
container/Tests/ContainerizationTests/ImageTests/ImageStoreTests.swift
T
Kathryn Baldauf 73596530fe Remove image push tests (#55)
This removes two image push tests. We cannot have the CI push to our
ghcr registry since external users do not have write access for pushing
the image. We will explore a better solution.

Signed-off-by: Kathryn Baldauf <k_baldauf@apple.com>
2025-06-09 17:28:24 -07:00

92 lines
3.6 KiB
Swift

//===----------------------------------------------------------------------===//
// Copyright © 2025 Apple Inc. and the Containerization project authors.
// All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//===----------------------------------------------------------------------===//
//
import ContainerizationArchive
import ContainerizationExtras
import ContainerizationOCI
import Foundation
import Testing
@testable import Containerization
@Suite
public class ImageStoreTests: ContainsAuth {
let store: ImageStore
let dir: URL
public init() {
let dir = FileManager.default.uniqueTemporaryDirectory(create: true)
let cs = try! LocalContentStore(path: dir)
let store = try! ImageStore(path: dir, contentStore: cs)
self.dir = dir
self.store = store
}
deinit {
try! FileManager.default.removeItem(at: self.dir)
}
@Test func testImageStoreOperation() async throws {
let fileManager = FileManager.default
let tempDir = fileManager.uniqueTemporaryDirectory()
defer {
try? fileManager.removeItem(at: tempDir)
}
let tarPath = Foundation.Bundle.module.url(forResource: "scratch", withExtension: "tar")!
let reader = try ArchiveReader(format: .pax, filter: .none, file: tarPath)
try reader.extractContents(to: tempDir)
let _ = try await self.store.load(from: tempDir)
let loaded = try await self.store.load(from: tempDir)
let expectedLoadedImage = "registry.local/integration-tests/scratch:latest"
#expect(loaded.first!.reference == "registry.local/integration-tests/scratch:latest")
guard let authentication = Self.authentication else {
return
}
let imageReference = "ghcr.io/apple/containerization/dockermanifestimage:0.0.2"
let busyboxImage = try await self.store.pull(reference: imageReference, auth: Self.authentication)
let got = try await self.store.get(reference: imageReference)
#expect(got.descriptor == busyboxImage.descriptor)
let newTag = "registry.local/integration-tests/dockermanifestimage:latest"
let _ = try await self.store.tag(existing: imageReference, new: newTag)
let tempFile = self.dir.appending(path: "export.tar")
try await self.store.save(references: [imageReference, expectedLoadedImage], out: tempFile)
}
@Test(.disabled("External users cannot push images, disable while we find a better solution"))
func testImageStorePush() async throws {
guard let authentication = Self.authentication else {
return
}
let imageReference = "ghcr.io/apple/containerization/dockermanifestimage:0.0.2"
let remoteImageName = "ghcr.io/apple/test-images/image-push"
let epoch = Int(Date().timeIntervalSince1970.description)
let tag = epoch != nil ? String(epoch!) : "latest"
let upstreamTag = "\(remoteImageName):\(tag)"
let _ = try await self.store.tag(existing: imageReference, new: upstreamTag)
try await self.store.push(reference: upstreamTag, auth: authentication)
}
}