-
Notifications
You must be signed in to change notification settings - Fork 62
/
Copy pathResolverTests.swift
113 lines (107 loc) · 4.56 KB
/
ResolverTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import Quick
import Nimble
@testable import Resolver
import dnssd
class ResolverSpec: QuickSpec {
override func spec() {
describe("The resolve method") {
context("If it is asked to resolve IPv4 address") {
it("gives one IP") {
var result: Resolver?
var errorCode: DNSServiceErrorType?
waitUntil(timeout: 6) { done in
expect(Resolver.resolve(hostname: "cloudflare.com") { res, error in
result = res
errorCode = error
done()
}) == true
}
expect(result?.result.count) == 1
expect(result?.ipv4Result.count) == 1
expect(errorCode).to(beNil())
expect(Resolver.activeCount) == 0
}
it("gives all IPs") {
var result: Resolver?
var errorCode: DNSServiceErrorType?
waitUntil(timeout: 6) { done in
expect(Resolver.resolve(hostname: "cloudflare.com", firstResult: false) { res, error in
result = res
errorCode = error
done()
}) == true
}
expect(result?.result.count) > 1
expect(result?.ipv4Result.count) > 1
expect(errorCode).to(beNil())
expect(Resolver.activeCount) == 0
}
}
context("If it is asked to resolve IPv6 address") {
it("gives one IP") {
var result: Resolver?
var errorCode: DNSServiceErrorType?
waitUntil(timeout: 6) { done in
expect(Resolver.resolve(hostname: "cloudflare.com", qtype: .ipv6) { res, error in
result = res
errorCode = error
done()
}) == true
}
expect(result?.result.count) == 1
expect(result?.ipv6Result.count) == 1
expect(errorCode).to(beNil())
expect(Resolver.activeCount) == 0
}
it("gives all IPs") {
var result: Resolver?
var errorCode: DNSServiceErrorType?
waitUntil(timeout: 6) { done in
expect(Resolver.resolve(hostname: "cloudflare.com", qtype: .ipv6, firstResult: false) { res, error in
result = res
errorCode = error
done()
}) == true
}
expect(result?.result.count) > 1
expect(result?.ipv6Result.count) > 1
expect(errorCode).to(beNil())
expect(Resolver.activeCount) == 0
}
}
context("When it is given an invalid domain") {
it("gives error") {
var result: Resolver?
var errorCode: DNSServiceErrorType?
waitUntil(timeout: 6) { done in
expect(Resolver.resolve(hostname: "0.cloudflare.com") { res, error in
result = res
errorCode = error
done()
}) == true
}
expect(result).to(beNil())
expect(errorCode).toNot(beNil())
expect(Resolver.activeCount) == 0
}
}
it("resolves queries asynchronously") {
var count = 100
waitUntil(timeout: 8) { done in
let semaphore = DispatchSemaphore(value: 1)
for i in 0..<count {
expect(Resolver.resolve(hostname: "\(i).cloudflare.com") { res, error in
semaphore.wait()
count -= 1
if (count == 0) {
done()
}
semaphore.signal()
}) == true
}
}
expect(Resolver.activeCount) == 0
}
}
}
}