mirror of
https://github.com/apple/swift-nio.git
synced 2026-05-20 20:30:36 +00:00
a18bddb0ac
Motivation: We accidentally removed the 'NIOFileSystem' module from the '_NIOFileSystem' product in the last release. Modifications: - Rename 'NIOFileSystem' and 'NIOFileSystemFoundationCompat' to 'NIOFS' and 'NIOFSFoundationCompat' - Add back 'NIOFileSystem' which re-exports '_NIOFileSystem' (there was no publicly available 'NIOFileSystemFoundationCompat' module to remove, only '_NIOFileSystemFoundationCompat'). Result: Fewer breaks
101 lines
4.1 KiB
Swift
101 lines
4.1 KiB
Swift
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This source file is part of the SwiftNIO open source project
|
|
//
|
|
// Copyright (c) 2023 Apple Inc. and the SwiftNIO project authors
|
|
// Licensed under Apache License v2.0
|
|
//
|
|
// See LICENSE.txt for license information
|
|
// See CONTRIBUTORS.txt for the list of SwiftNIO project authors
|
|
//
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
@_spi(Testing) import NIOFS
|
|
import XCTest
|
|
|
|
final class FileOpenOptionsTests: XCTestCase {
|
|
private let expectedDefaults: FilePermissions = [
|
|
.ownerReadWrite,
|
|
.groupRead,
|
|
.otherRead,
|
|
]
|
|
|
|
func testReadOptions() {
|
|
var options = OpenOptions.Read()
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [])
|
|
|
|
options.followSymbolicLinks = false
|
|
options.closeOnExec = true
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.noFollow, .closeOnExec])
|
|
}
|
|
|
|
func testDirectoryOptions() {
|
|
var options = OpenOptions.Directory()
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.directory])
|
|
|
|
options.followSymbolicLinks = false
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.noFollow, .directory])
|
|
|
|
options.followSymbolicLinks = true
|
|
options.closeOnExec = true
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.directory, .closeOnExec])
|
|
}
|
|
|
|
func testWriteOpenOrCreate() {
|
|
var options = OpenOptions.Write.modifyFile(createIfNecessary: true)
|
|
XCTAssertEqual(options.existingFile, .open)
|
|
XCTAssertEqual(options.permissionsForRegularFile, self.expectedDefaults)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create])
|
|
|
|
options = OpenOptions.Write.modifyFile(createIfNecessary: true, permissions: .groupExecute)
|
|
XCTAssertEqual(options.existingFile, .open)
|
|
XCTAssertEqual(options.permissionsForRegularFile, .groupExecute)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create])
|
|
|
|
options.followSymbolicLinks = false
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .noFollow])
|
|
}
|
|
|
|
func testWriteTruncateOrCreate() {
|
|
var options = OpenOptions.Write.newFile(replaceExisting: true)
|
|
XCTAssertEqual(options.existingFile, .truncate)
|
|
XCTAssertEqual(options.permissionsForRegularFile, self.expectedDefaults)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .truncate])
|
|
|
|
options = OpenOptions.Write.newFile(replaceExisting: true, permissions: .groupExecute)
|
|
XCTAssertEqual(options.existingFile, .truncate)
|
|
XCTAssertEqual(options.permissionsForRegularFile, .groupExecute)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .truncate])
|
|
|
|
options.followSymbolicLinks = false
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .truncate, .noFollow])
|
|
}
|
|
|
|
func testWriteExclusiveOpen() {
|
|
var options = OpenOptions.Write(existingFile: .open, newFile: nil)
|
|
XCTAssertEqual(options.existingFile, .open)
|
|
XCTAssertNil(options.newFile)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [])
|
|
|
|
options.followSymbolicLinks = false
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.noFollow])
|
|
}
|
|
|
|
func testWriteExclusiveCreate() {
|
|
var options = OpenOptions.Write.newFile(replaceExisting: false)
|
|
XCTAssertEqual(options.existingFile, .none)
|
|
XCTAssertEqual(options.permissionsForRegularFile, self.expectedDefaults)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .exclusiveCreate])
|
|
|
|
options = OpenOptions.Write.newFile(replaceExisting: false, permissions: .groupExecute)
|
|
XCTAssertEqual(options.existingFile, .none)
|
|
XCTAssertEqual(options.permissionsForRegularFile, .groupExecute)
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .exclusiveCreate])
|
|
|
|
options.followSymbolicLinks = false
|
|
XCTAssertEqual(FileDescriptor.OpenOptions(options), [.create, .exclusiveCreate, .noFollow])
|
|
}
|
|
}
|