|
1 | 1 | import AsyncHTTPClient
|
| 2 | +import Foundation |
2 | 3 | import Haystack
|
3 | 4 | import HaystackClientNIO
|
4 | 5 | import NIO
|
5 |
| -import XCTest |
| 6 | +import Testing |
6 | 7 |
|
7 | 8 | /// To use these tests, run a [Haxall](https://github.com/haxall/haxall) server and set the username and password
|
8 | 9 | /// in the `HAYSTACK_USER` and `HAYSTACK_PASSWORD` environment variables
|
9 |
| -final class HaystackClientNIOIntegrationTests: XCTestCase { |
10 |
| - let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) |
11 |
| - var httpClient: HTTPClient! |
12 |
| - var client: Client! |
13 |
| - |
14 |
| - override func setUp() async throws { |
15 |
| - httpClient = HTTPClient(eventLoopGroupProvider: .shared(eventLoopGroup)) |
16 |
| - client = try Client( |
| 10 | +struct HaystackClientNIOIntegrationTests { |
| 11 | + private func withClient(_ block: (Client) async throws -> Void) async throws { |
| 12 | + let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) |
| 13 | + let httpClient = HTTPClient(eventLoopGroupProvider: .shared(eventLoopGroup)) |
| 14 | + let client = try Client( |
17 | 15 | baseUrl: "http://localhost:8080/api/",
|
18 | 16 | username: ProcessInfo.processInfo.environment["HAYSTACK_USER"] ?? "su",
|
19 | 17 | password: ProcessInfo.processInfo.environment["HAYSTACK_PASSWORD"] ?? "su",
|
20 | 18 | httpClient: httpClient
|
21 | 19 | )
|
22 | 20 | try await client.open()
|
23 |
| - } |
24 | 21 |
|
25 |
| - override func tearDown() async throws { |
| 22 | + try await block(client) |
| 23 | + |
26 | 24 | try await client.close()
|
27 | 25 | try await httpClient.shutdown()
|
28 | 26 | }
|
29 | 27 |
|
30 |
| - func testCloseAndOpen() async throws { |
31 |
| - try print(await client.close()) |
32 |
| - try print(await client.open()) |
| 28 | + @Test func closeAndOpen() async throws { |
| 29 | + try await withClient { client in |
| 30 | + try print(await client.close()) |
| 31 | + try print(await client.open()) |
| 32 | + } |
33 | 33 | }
|
34 | 34 |
|
35 |
| - func testAbout() async throws { |
36 |
| - try print(await client.about().toZinc()) |
| 35 | + @Test func about() async throws { |
| 36 | + try await withClient { client in |
| 37 | + try print(await client.about().toZinc()) |
| 38 | + } |
37 | 39 | }
|
38 | 40 |
|
39 |
| - func testDefs() async throws { |
40 |
| - try print(await client.defs().toZinc()) |
41 |
| - try print(await client.defs(filter: "lib==^lib:phIoT").toZinc()) |
42 |
| - try print(await client.defs(limit: Number(1)).toZinc()) |
43 |
| - try print(await client.defs(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 41 | + @Test func defs() async throws { |
| 42 | + try await withClient { client in |
| 43 | + try print(await client.defs().toZinc()) |
| 44 | + try print(await client.defs(filter: "lib==^lib:phIoT").toZinc()) |
| 45 | + try print(await client.defs(limit: Number(1)).toZinc()) |
| 46 | + try print(await client.defs(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 47 | + } |
44 | 48 | }
|
45 | 49 |
|
46 |
| - func testLibs() async throws { |
47 |
| - try print(await client.libs().toZinc()) |
48 |
| - try print(await client.libs(filter: "lib==^lib:phIoT").toZinc()) |
49 |
| - try print(await client.libs(limit: Number(1)).toZinc()) |
50 |
| - try print(await client.libs(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 50 | + @Test func libs() async throws { |
| 51 | + try await withClient { client in |
| 52 | + try print(await client.libs().toZinc()) |
| 53 | + try print(await client.libs(filter: "lib==^lib:phIoT").toZinc()) |
| 54 | + try print(await client.libs(limit: Number(1)).toZinc()) |
| 55 | + try print(await client.libs(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 56 | + } |
51 | 57 | }
|
52 | 58 |
|
53 |
| - func testOps() async throws { |
54 |
| - try print(await client.ops().toZinc()) |
55 |
| - try print(await client.ops(filter: "lib==^lib:phIoT").toZinc()) |
56 |
| - try print(await client.ops(limit: Number(1)).toZinc()) |
57 |
| - try print(await client.ops(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 59 | + @Test func ops() async throws { |
| 60 | + try await withClient { client in |
| 61 | + try print(await client.ops().toZinc()) |
| 62 | + try print(await client.ops(filter: "lib==^lib:phIoT").toZinc()) |
| 63 | + try print(await client.ops(limit: Number(1)).toZinc()) |
| 64 | + try print(await client.ops(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 65 | + } |
58 | 66 | }
|
59 | 67 |
|
60 |
| - func testFiletypes() async throws { |
61 |
| - try print(await client.filetypes().toZinc()) |
62 |
| - try print(await client.filetypes(filter: "lib==^lib:phIoT").toZinc()) |
63 |
| - try print(await client.filetypes(limit: Number(1)).toZinc()) |
64 |
| - try print(await client.filetypes(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 68 | + @Test func filetypes() async throws { |
| 69 | + try await withClient { client in |
| 70 | + try print(await client.filetypes().toZinc()) |
| 71 | + try print(await client.filetypes(filter: "lib==^lib:phIoT").toZinc()) |
| 72 | + try print(await client.filetypes(limit: Number(1)).toZinc()) |
| 73 | + try print(await client.filetypes(filter: "lib==^lib:phIoT", limit: Number(1)).toZinc()) |
| 74 | + } |
65 | 75 | }
|
66 | 76 |
|
67 |
| - func testRead() async throws { |
68 |
| - try print(await client.read(ids: [Ref("28e7fb47-d67ab19a")]).toZinc()) |
| 77 | + @Test func read() async throws { |
| 78 | + try await withClient { client in |
| 79 | + try print(await client.read(ids: [Ref("28e7fb47-d67ab19a")]).toZinc()) |
| 80 | + } |
69 | 81 | }
|
70 | 82 |
|
71 |
| - func testReadAll() async throws { |
72 |
| - try print(await client.read(filter: "site").toZinc()) |
| 83 | + @Test func readAll() async throws { |
| 84 | + try await withClient { client in |
| 85 | + try print(await client.read(filter: "site").toZinc()) |
| 86 | + } |
73 | 87 | }
|
74 | 88 |
|
75 |
| - func testHisRead() async throws { |
76 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .today).toZinc()) |
77 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .yesterday).toZinc()) |
78 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .date(Date("2022-01-01"))).toZinc()) |
79 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .dateRange(from: Date("2022-01-01"), to: Date("2022-02-01"))).toZinc()) |
80 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .dateTimeRange(from: DateTime("2022-01-01T00:00:00Z"), to: DateTime("2022-02-01T00:00:00Z"))).toZinc()) |
81 |
| - try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .after(DateTime("2022-01-01T00:00:00Z"))).toZinc()) |
| 89 | + @Test func hisRead() async throws { |
| 90 | + try await withClient { client in |
| 91 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .today).toZinc()) |
| 92 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .yesterday).toZinc()) |
| 93 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .date(Date("2022-01-01"))).toZinc()) |
| 94 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .dateRange(from: Date("2022-01-01"), to: Date("2022-02-01"))).toZinc()) |
| 95 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .dateTimeRange(from: DateTime("2022-01-01T00:00:00Z"), to: DateTime("2022-02-01T00:00:00Z"))).toZinc()) |
| 96 | + try print(await client.hisRead(id: Ref("28e7fb7d-e20316e0"), range: .after(DateTime("2022-01-01T00:00:00Z"))).toZinc()) |
| 97 | + } |
82 | 98 | }
|
83 | 99 |
|
84 |
| - func testHisWrite() async throws { |
85 |
| - try print(await client.hisWrite( |
86 |
| - id: Ref("28e7fb7d-e20316e0"), |
87 |
| - items: [ |
88 |
| - HisItem(ts: DateTime("2022-01-01T00:00:00-07:00 Denver"), val: Number(14)), |
89 |
| - ] |
90 |
| - ).toZinc()) |
| 100 | + @Test func hisWrite() async throws { |
| 101 | + try await withClient { client in |
| 102 | + try print(await client.hisWrite( |
| 103 | + id: Ref("28e7fb7d-e20316e0"), |
| 104 | + items: [ |
| 105 | + HisItem(ts: DateTime("2022-01-01T00:00:00-07:00 Denver"), val: Number(14)), |
| 106 | + ] |
| 107 | + ).toZinc()) |
| 108 | + } |
91 | 109 | }
|
92 | 110 |
|
93 |
| - func testEval() async throws { |
94 |
| - try print(await client.eval(expression: "readAll(site)").toZinc()) |
| 111 | + @Test func eval() async throws { |
| 112 | + try await withClient { client in |
| 113 | + try print(await client.eval(expression: "readAll(site)").toZinc()) |
| 114 | + } |
95 | 115 | }
|
96 | 116 |
|
97 |
| - func testWatchUnsub() async throws { |
98 |
| - try print(await client.watchUnsubRemove(watchId: "id", ids: [Ref("28e7fb47-d67ab19a")])) |
| 117 | + @Test func watchUnsub() async throws { |
| 118 | + try await withClient { client in |
| 119 | + try print(await client.watchUnsubRemove(watchId: "id", ids: [Ref("28e7fb47-d67ab19a")])) |
| 120 | + } |
99 | 121 | }
|
100 | 122 | }
|
0 commit comments