QuietUnrar/Carthage/Checkouts/UnzipKit/Tests/PermissionsTests.swift

184 lines
7.0 KiB
Swift

//
// PermissionsTests.swift
// UnzipKitTests
//
// Created by Dov Frankel on 6/24/19.
// Copyright © 2019 Abbey Code. All rights reserved.
//
import XCTest
class PermissionsTests: UZKArchiveTestCase {
#if os(OSX)
func testReadFileInfo() {
let permissionLevelsToTest: [Int16] = [
0o777,
0o707,
0o770,
0o477,
0o666,
0o606,
0o660,
0o466,
]
let fileURLs: [URL] = permissionLevelsToTest.map {
let textFile = self.emptyTextFile(ofLength: 20)!
try! FileManager.default.setAttributes([.posixPermissions: $0],
ofItemAtPath: textFile.path)
return textFile
}
let archiveURL = self.archive(withFiles: fileURLs)!
let archive = try! UZKArchive(url: archiveURL)
let fileInfo = try! archive.listFileInfo()
let expectedPermissions = zip(
fileURLs.map { $0.lastPathComponent },
permissionLevelsToTest
)
.reduce(into: [String:Int16]()) { result, pair in
result[pair.0] = pair.1
}
let actualPermissions = fileInfo.reduce([String: Int16]()) {
var resultDict = $0
resultDict[$1.filename] = $1.posixPermissions
return resultDict
}
XCTAssertEqual(actualPermissions, expectedPermissions)
}
func testExtraction() {
let permissionLevelsToTest: [Int16] = [
0o777,
0o707,
0o770,
0o477,
0o666,
0o606,
0o660,
0o466,
]
let fileURLs: [URL] = permissionLevelsToTest.map {
let textFile = self.emptyTextFile(ofLength: 20)!
try! FileManager.default.setAttributes([.posixPermissions: $0],
ofItemAtPath: textFile.path)
return textFile
}
let archiveURL = self.archive(withFiles: fileURLs)!
let archive = try! UZKArchive(url: archiveURL)
let extractDirectory = self.randomDirectory(withPrefix: "PermissionsTest")!
let extractURL = self.tempDirectory.appendingPathComponent(extractDirectory)
try! archive.extractFiles(to: extractURL.path, overwrite: false)
NSLog("Extracted to \(extractURL.path)")
let expectedPermissions = zip(
fileURLs.map { extractURL.appendingPathComponent($0.lastPathComponent).path },
permissionLevelsToTest
)
for (path, expectedPermissionLevel) in expectedPermissions {
let actualPermissions = try! FileManager.default.attributesOfItem(atPath: path)[.posixPermissions] as! NSNumber
XCTAssertEqual(actualPermissions.int16Value, expectedPermissionLevel, "Permissions mismatch for \(path)")
}
}
#endif
func testWriteData_Default() {
let testArchiveURL = tempDirectory.appendingPathComponent("PermissionsTestWriteData.zip")
let testFilename = nonZipTestFilePaths.first as! String
let testFileURL = testFileURLs[testFilename] as! URL
let testFileData = try! Data(contentsOf: testFileURL)
let writeArchive = try! UZKArchive(url: testArchiveURL)
try! writeArchive.write(testFileData, filePath: testFilename)
let readArchive = try! UZKArchive(url: testArchiveURL)
let fileList = try! readArchive.listFileInfo()
let writtenFileInfo = fileList.first { $0.filename == testFilename }
let actualPermissions = writtenFileInfo!.posixPermissions
XCTAssertEqual(actualPermissions, 0o644)
}
func testWriteData_NonDefault() {
let testArchiveURL = tempDirectory.appendingPathComponent("PermissionsTestWriteData.zip")
let testFilename = nonZipTestFilePaths.first as! String
let testFileURL = testFileURLs[testFilename] as! URL
let testFileData = try! Data(contentsOf: testFileURL)
let writeArchive = try! UZKArchive(url: testArchiveURL)
let expectedPermissions: Int16 = 0o742
try! writeArchive.write(testFileData, filePath: testFilename, fileDate: nil, posixPermissions: expectedPermissions,
compressionMethod: .default, password: nil, overwrite: true)
let readArchive = try! UZKArchive(url: testArchiveURL)
let fileList = try! readArchive.listFileInfo()
let writtenFileInfo = fileList.first { $0.filename == testFilename }
let actualPermissions = writtenFileInfo!.posixPermissions
XCTAssertEqual(actualPermissions, expectedPermissions)
}
func testWriteIntoBuffer_Default() {
let testArchiveURL = tempDirectory.appendingPathComponent("PermissionsTestWriteBufferedData.zip")
let testFilename = nonZipTestFilePaths.first as! String
let testFileURL = testFileURLs[testFilename] as! URL
let testFileData = try! Data(contentsOf: testFileURL)
let writeArchive = try! UZKArchive(url: testArchiveURL)
try! writeArchive.write(intoBuffer: testFilename) { (writeDataHandler, error) in
testFileData.withUnsafeBytes({ buffer in
writeDataHandler(buffer, UInt32(testFileData.count))
})
}
let readArchive = try! UZKArchive(url: testArchiveURL)
let fileList = try! readArchive.listFileInfo()
let writtenFileInfo = fileList.first { $0.filename == testFilename }
let actualPermissions = writtenFileInfo!.posixPermissions
XCTAssertEqual(actualPermissions, 0o644)
}
func testWriteIntoBuffer_NonDefault() {
let testArchiveURL = tempDirectory.appendingPathComponent("PermissionsTestWriteBufferedData_CustomPermissions.zip")
let testFilename = nonZipTestFilePaths.first as! String
let testFileURL = testFileURLs[testFilename] as! URL
let testFileData = try! Data(contentsOf: testFileURL)
let expectedPermissions: Int16 = 0o764
let writeArchive = try! UZKArchive(url: testArchiveURL)
try! writeArchive.write(intoBuffer: testFilename, fileDate: nil, posixPermissions: expectedPermissions,
compressionMethod: .default, overwrite: false, crc: 0, password: nil)
{ (writeDataHandler, error) in
testFileData.withUnsafeBytes({ buffer in
writeDataHandler(buffer, UInt32(testFileData.count))
})
}
let readArchive = try! UZKArchive(url: testArchiveURL)
let fileList = try! readArchive.listFileInfo()
let writtenFileInfo = fileList.first { $0.filename == testFilename }
let actualPermissions = writtenFileInfo!.posixPermissions
XCTAssertEqual(actualPermissions, expectedPermissions)
}
}