Emcee

Форк
0
/
FileLockTests.swift 
102 строки · 3.3 Кб
1
import Foundation
2
import FileLock
3
import XCTest
4

5
final class FileLockTests: XCTestCase {
6
    let tmp = NSTemporaryDirectory() as NSString
7
    lazy var uniqueTempFile = tmp.appendingPathComponent(ProcessInfo.processInfo.globallyUniqueString + ".lock")
8
    
9
    func test__lock_unlock() throws {
10
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
11
        
12
        XCTAssertNoThrow(try fileLock.lock())
13
        XCTAssertNoThrow(try fileLock.unlock())
14
    }
15
    
16
    func test__paired_lock_and_unlock() throws {
17
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
18
        
19
        XCTAssertNoThrow(try fileLock.lock())
20
        XCTAssertNoThrow(try fileLock.unlock())
21
        
22
        XCTAssertNoThrow(try fileLock.lock())
23
        XCTAssertNoThrow(try fileLock.unlock())
24
    }
25
    
26
    func test__recursive_lock() throws {
27
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
28
        
29
        XCTAssertNoThrow(try fileLock.lock())
30
        XCTAssertNoThrow(try fileLock.lock())
31
        
32
        XCTAssertTrue(fileLock.isLocked)
33
        XCTAssertNoThrow(try fileLock.unlock())
34
        XCTAssertTrue(fileLock.isLocked)
35
        XCTAssertNoThrow(try fileLock.unlock())
36
        XCTAssertFalse(fileLock.isLocked)
37
    }
38
    
39
    func test__lock_on_same_file_from_different_locks() throws {
40
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
41
        let otherSameFileLock = try FileLock(lockFilePath: uniqueTempFile)
42
        
43
        XCTAssertNoThrow(try fileLock.lock())
44
        XCTAssertFalse(otherSameFileLock.tryToLock())
45
        XCTAssertNoThrow(try fileLock.unlock())
46
        
47
        XCTAssertTrue(otherSameFileLock.tryToLock())
48
        XCTAssertNoThrow(try otherSameFileLock.unlock())
49
    }
50
    
51
    func test__try_lock() throws {
52
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
53
        
54
        XCTAssertTrue(fileLock.tryToLock())
55
        XCTAssertTrue(fileLock.isLocked)
56
        XCTAssertNoThrow(try fileLock.unlock())
57
    }
58
    
59
    func test__unbalanced_calls() throws {
60
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
61
        
62
        XCTAssertThrowsError(try fileLock.unlock())
63
    }
64
    
65
    func test__unexisting_path_throws() throws {
66
        XCTAssertThrowsError(
67
            try FileLock(lockFilePath: tmp.appendingPathComponent("\(UUID().uuidString)/\(ProcessInfo.processInfo.globallyUniqueString)"))
68
        )
69
    }
70
    
71
    func test__while_locked() throws {
72
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
73
        
74
        try fileLock.whileLocked {
75
            XCTAssertTrue(fileLock.isLocked)
76
        }
77
        
78
        XCTAssertFalse(fileLock.isLocked)
79
    }
80
    
81
    func test__while_locked_throws___on_unbalanced_unlock() throws {
82
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
83
        
84
        XCTAssertThrowsError(
85
            try fileLock.whileLocked {
86
                XCTAssertNoThrow(try fileLock.unlock())
87
            }
88
        )
89
    }
90
    
91
    func test__while_locked_correctly_unlocks___when_closure_throws_error() throws {
92
        let fileLock = try FileLock(lockFilePath: uniqueTempFile)
93
        
94
        XCTAssertThrowsError(
95
            try fileLock.whileLocked {
96
                throw CocoaError.error(CocoaError.Code.fileReadCorruptFile, userInfo: nil, url: nil)
97
            }
98
        )
99
        
100
        XCTAssertFalse(fileLock.isLocked)
101
    }
102
}
103

104

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.