Skip to content

Commit 944f444

Browse files
committed
Increase test coverage
1 parent 6002eac commit 944f444

File tree

3 files changed

+61
-9
lines changed

3 files changed

+61
-9
lines changed

Tests/GatekeeperTests/GatekeeperTests.swift

+36-7
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ class GatekeeperTests: XCTestCase {
1111
peerName: "::1"
1212
)
1313

14-
let gateKeeper = try request.make(Gatekeeper.self)
14+
let gatekeeperMiddleware = try request.make(GatekeeperMiddleware.self)
1515

1616
for i in 1...11 {
1717
do {
18-
_ = try gateKeeper.accessEndpoint(on: request).wait()
18+
_ = try gatekeeperMiddleware.respond(to: request, chainingTo: TestResponder()).wait()
1919
XCTAssertTrue(i <= 10, "ran \(i) times.")
2020
} catch let error as Abort {
2121
switch error.status {
@@ -39,10 +39,10 @@ class GatekeeperTests: XCTestCase {
3939
peerName: nil
4040
)
4141

42-
let gateKeeper = try request.make(Gatekeeper.self)
42+
let gatekeeperMiddleware = try request.make(GatekeeperMiddleware.self)
4343

4444
do {
45-
_ = try gateKeeper.accessEndpoint(on: request).wait()
45+
_ = try gatekeeperMiddleware.respond(to: request, chainingTo: TestResponder()).wait()
4646
XCTAssertTrue(false, "Gatekeeper should throw")
4747
} catch let error as Abort {
4848
switch error.status {
@@ -64,11 +64,11 @@ class GatekeeperTests: XCTestCase {
6464
peerName: "192.168.1.2"
6565
)
6666

67-
let gateKeeper = try request.make(Gatekeeper.self)
67+
let gatekeeperMiddleware = try request.make(GatekeeperMiddleware.self)
6868

6969
for _ in 0..<50 {
7070
do {
71-
_ = try gateKeeper.accessEndpoint(on: request).wait()
71+
_ = try gatekeeperMiddleware.respond(to: request, chainingTo: TestResponder()).wait()
7272
} catch {
7373
XCTFail("Rate limiter failed: \(error)")
7474
break
@@ -81,7 +81,7 @@ class GatekeeperTests: XCTestCase {
8181

8282
Thread.sleep(forTimeInterval: 1)
8383
do {
84-
_ = try gateKeeper.accessEndpoint(on: request).wait()
84+
_ = try gatekeeperMiddleware.respond(to: request, chainingTo: TestResponder()).wait()
8585
} catch {
8686
XCTFail("Rate limiter failed: \(error)")
8787
}
@@ -90,6 +90,35 @@ class GatekeeperTests: XCTestCase {
9090
XCTAssertEqual(entry!.requestsLeft, 99, "Requests left should've reset")
9191
}
9292

93+
func testGateKeeperWithCacheFactory() throws {
94+
95+
let request = try Request.test(
96+
gatekeeperConfig: GatekeeperConfig(maxRequests: 10, per: .minute),
97+
peerName: "::1",
98+
cacheFactory: { try $0.make(KeyedCache.self) }
99+
)
100+
101+
let gatekeeperMiddleware = try request.make(GatekeeperMiddleware.self)
102+
103+
for i in 1...11 {
104+
do {
105+
_ = try gatekeeperMiddleware.respond(to: request, chainingTo: TestResponder()).wait()
106+
XCTAssertTrue(i <= 10, "ran \(i) times.")
107+
} catch let error as Abort {
108+
switch error.status {
109+
case .tooManyRequests:
110+
//success
111+
XCTAssertEqual(i, 11, "Should've failed after the 11th attempt.")
112+
break
113+
default:
114+
XCTFail("Expected too many request: \(error)")
115+
}
116+
} catch {
117+
XCTFail("Caught wrong error: \(error)")
118+
}
119+
}
120+
}
121+
93122
func testRefreshIntervalValues() {
94123
let expected: [(GatekeeperConfig.Interval, Double)] = [
95124
(.second, 1),

Tests/GatekeeperTests/Utilities/Request+test.swift

+18-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ extension Request {
66
static func test(
77
gatekeeperConfig: GatekeeperConfig,
88
url: URLRepresentable = "http://localhost:8080/test",
9-
peerName: String? = "::1"
9+
peerName: String? = "::1",
10+
cacheFactory: ((Container) throws -> KeyedCache)? = nil
1011
) throws -> Request {
1112
let config = Config()
1213

@@ -15,7 +16,22 @@ extension Request {
1516
return MemoryKeyedCache()
1617
}
1718

18-
try services.register(GatekeeperProvider(config: gatekeeperConfig))
19+
if let cacheFactory = cacheFactory {
20+
try services.register(
21+
GatekeeperProvider(
22+
config: gatekeeperConfig,
23+
cacheFactory: cacheFactory
24+
)
25+
)
26+
} else {
27+
try services.register(
28+
GatekeeperProvider(
29+
config: gatekeeperConfig
30+
)
31+
)
32+
}
33+
34+
services.register(GatekeeperMiddleware.self)
1935

2036
let sharedThreadPool = BlockingIOThreadPool(numberOfThreads: 2)
2137
sharedThreadPool.start()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import Vapor
2+
3+
public struct TestResponder: Responder {
4+
public func respond(to req: Request) throws -> EventLoopFuture<Response> {
5+
return req.future(req.response())
6+
}
7+
}

0 commit comments

Comments
 (0)