mirror of
https://github.com/apple/container.git
synced 2026-11-05 21:43:24 +00:00
- `launchctl list` does not work as expected in the sandbox. - Probe with `launchctl print <domain>/<label>` instead, which launchd does allow a sandboxed process, and key off exit codes: 0 means registered, 113 (ENOSERVICE) means not registered, and anything else is an error rather than being mistranslated into a negative. - The probe is advisory in `system status`, so an indeterminate answer falls through to the XPC health check, whose success is authoritative. Signed-off-by: Renlord Yang <renlord@apple.com>
56 lines
2.0 KiB
Swift
56 lines
2.0 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
// Copyright © 2026 Apple Inc. and the container project authors.
|
|
//
|
|
// 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 Foundation
|
|
import Testing
|
|
|
|
@testable import ContainerPlugin
|
|
|
|
struct ServiceManagerTests {
|
|
@Test
|
|
func testInterpretPrintStatusSuccessMeansRegistered() throws {
|
|
#expect(try ServiceManager.interpretPrintStatus(0))
|
|
}
|
|
|
|
@Test
|
|
func testInterpretPrintStatusNoSuchServiceMeansUnregistered() throws {
|
|
#expect(try !ServiceManager.interpretPrintStatus(ServiceManager.LaunchctlStatus.noSuchService))
|
|
}
|
|
|
|
@Test
|
|
func testInterpretPrintStatusUnexpectedStatusThrows() throws {
|
|
let statuses: [Int32] = [1, 3, 64, 112]
|
|
for status in statuses {
|
|
#expect {
|
|
_ = try ServiceManager.interpretPrintStatus(
|
|
status,
|
|
target: "gui/501/com.apple.container.apiserver",
|
|
standardError: "marker"
|
|
)
|
|
} throws: { error in
|
|
"\(error)".contains("status \(status), message: marker")
|
|
}
|
|
}
|
|
}
|
|
|
|
@Test
|
|
func testIsRegisteredUnknownLabel() throws {
|
|
let domain = try ServiceManager.getDomainString()
|
|
let label = "\(domain)/com.apple.container.bogus-\(UUID().uuidString)"
|
|
#expect(try !ServiceManager.isRegistered(fullServiceLabel: label))
|
|
}
|
|
}
|