Emcee
118 строк · 4.2 Кб
1import BalancingBucketQueue
2import BucketQueue
3import BucketQueueModels
4import BucketQueueTestHelpers
5import CommonTestModelsTestHelpers
6import Foundation
7import QueueModels
8import QueueModelsTestHelpers
9import TestHelpers
10import XCTest
11
12final class MultipleQueuesBucketResultAcceptorTests: XCTestCase {
13private lazy var bucketResultAcceptorProvider = FakeBucketResultAcceptorProvider()
14private lazy var multipleQueuesContainer = MultipleQueuesContainer()
15private lazy var multipleQueuesBucketResultAcceptor = MultipleQueuesBucketResultAcceptor(
16bucketResultAcceptorProvider: bucketResultAcceptorProvider,
17multipleQueuesContainer: multipleQueuesContainer
18)
19private lazy var workerId = WorkerId("worker")
20
21func test___accepting_results___rethrows___if_accepter_throws() {
22bucketResultAcceptorProvider.resultProvider = { _, _, _ in
23throw ErrorForTestingPurposes()
24}
25
26assertThrows {
27_ = try multipleQueuesBucketResultAcceptor.accept(
28bucketId: "bucket_id",
29bucketResult: .testingResult(
30TestingResultFixtures().testingResult()
31),
32workerId: workerId
33)
34}
35}
36
37
38func test___accepting_results___in_running_job___does_not_throw___if_accepter_does_not_throw() {
39let jobQueue = createJobQueue()
40multipleQueuesContainer.add(runningJobQueue: jobQueue)
41
42let acceptanceRoutineInvoked = XCTestExpectation()
43
44bucketResultAcceptorProvider.resultProvider = { bucketId, bucketResult, workerId in
45assertTrue { workerId == self.workerId }
46
47acceptanceRoutineInvoked.fulfill()
48
49return BucketQueueAcceptResult(
50dequeuedBucket: DequeuedBucket(
51enqueuedBucket: EnqueuedBucket(
52bucket: BucketFixtures().with(bucketId: "bucket_id").bucket(),
53enqueueTimestamp: Date(),
54uniqueIdentifier: "doesnotmatter"
55),
56workerId: self.workerId
57),
58bucketResultToCollect: bucketResult
59)
60}
61
62assertDoesNotThrow {
63_ = try multipleQueuesBucketResultAcceptor.accept(
64bucketId: "bucket_id",
65bucketResult: .testingResult(TestingResultFixtures().testingResult()),
66workerId: workerId
67)
68}
69
70wait(for: [acceptanceRoutineInvoked], timeout: 15)
71}
72
73
74func test___accepting_results___in_deleted_job___does_not_throw___if_accepter_does_not_throw() {
75let jobQueue = createJobQueue()
76multipleQueuesContainer.add(deletedJobQueues: [jobQueue])
77
78let acceptanceRoutineInvoked = XCTestExpectation()
79
80bucketResultAcceptorProvider.resultProvider = { bucketId, bucketResult, workerId in
81assertTrue { workerId == self.workerId }
82
83acceptanceRoutineInvoked.fulfill()
84
85return BucketQueueAcceptResult(
86dequeuedBucket: DequeuedBucket(
87enqueuedBucket: EnqueuedBucket(
88bucket: BucketFixtures().with(bucketId: "bucket_id").bucket(),
89enqueueTimestamp: Date(),
90uniqueIdentifier: "doesnotmatter"
91),
92workerId: self.workerId
93),
94bucketResultToCollect: bucketResult
95)
96}
97
98assertDoesNotThrow {
99_ = try multipleQueuesBucketResultAcceptor.accept(
100bucketId: "bucket_id",
101bucketResult: .testingResult(TestingResultFixtures().testingResult()),
102workerId: workerId
103)
104}
105
106wait(for: [acceptanceRoutineInvoked], timeout: 15)
107}
108
109func test___accepting_unknown_bucket___throws() {
110assertThrows {
111_ = try multipleQueuesBucketResultAcceptor.accept(
112bucketId: "bucket_id",
113bucketResult: .testingResult(TestingResultFixtures().testingResult()),
114workerId: "worker"
115)
116}
117}
118}
119
120