|
1 | | -import XCTest |
| 1 | +import Testing |
2 | 2 | import NIO |
3 | 3 | import Casbin |
4 | 4 |
|
5 | | - |
6 | | -final class RbacApiTests: XCTestCase { |
7 | | - var elg = MultiThreadedEventLoopGroup(numberOfThreads: 1) |
8 | | - var pool = NIOThreadPool(numberOfThreads: 1) |
9 | | - deinit { |
10 | | - do { |
11 | | - try pool.syncShutdownGracefully() |
12 | | - try elg.syncShutdownGracefully() |
13 | | - } catch { |
14 | | - |
15 | | - } |
16 | | - } |
17 | | - func makeEnforer(_ mfile:String,_ aFile:String? = nil) throws -> Enforcer { |
18 | | - |
| 5 | +@Suite("RBAC API", .timeLimit(.minutes(1))) |
| 6 | +struct RbacApiTests { |
| 7 | + private func withEnforcer(_ mfile: String, _ aFile: String? = nil, body: (Enforcer) throws -> Void) throws { |
| 8 | + let pool = NIOThreadPool(numberOfThreads: 1) |
19 | 9 | pool.start() |
| 10 | + let elg = MultiThreadedEventLoopGroup(numberOfThreads: 1) |
| 11 | + defer { |
| 12 | + try? elg.syncShutdownGracefully() |
| 13 | + try? pool.syncShutdownGracefully() |
| 14 | + } |
20 | 15 | let fileIo = NonBlockingFileIO(threadPool: pool) |
21 | | - let m = try DefaultModel.from(file:TestsfilePath + mfile , fileIo: fileIo, on: elg.next()).wait() |
22 | | - var adapter:Adapter |
| 16 | + let m = try DefaultModel.from(file: TestsfilePath + mfile, fileIo: fileIo, on: elg.next()).wait() |
| 17 | + let adapter: Adapter |
23 | 18 | if let aFile = aFile { |
24 | | - adapter = FileAdapter.init(filePath: TestsfilePath + aFile, fileIo: fileIo, eventloop: elg.next()) |
| 19 | + adapter = FileAdapter(filePath: TestsfilePath + aFile, fileIo: fileIo, eventloop: elg.next()) |
25 | 20 | } else { |
26 | | - adapter = MemoryAdapter.init(on: elg.next()) |
| 21 | + adapter = MemoryAdapter(on: elg.next()) |
27 | 22 | } |
28 | | - let e = try Enforcer.init(m: m, adapter: adapter) |
29 | | - return e |
| 23 | + let e = try Enforcer(m: m, adapter: adapter) |
| 24 | + e.enableLog = false |
| 25 | + e.logger.logLevel = .warning |
| 26 | + try body(e) |
30 | 27 | } |
31 | | - |
32 | | - func testRoleApi() throws { |
33 | | - let e = try makeEnforer("examples/rbac_model.conf", "examples/rbac_policy.csv") |
34 | | - XCTAssertEqual(["data2_admin"], e.getRoles(for: "alice", domain: nil)) |
35 | | - XCTAssertEqual([], e.getRoles(for: "bob", domain: nil)) |
36 | | - XCTAssertEqual([], e.getRoles(for: "data2_admin", domain: nil)) |
37 | | - XCTAssertEqual([], e.getRoles(for: "non_exists", domain: nil)) |
38 | | - |
39 | | - XCTAssertEqual(false, e.hasRole(for: "alice", role: "data1_admin", domain: nil)) |
40 | | - XCTAssertEqual(true, e.hasRole(for: "alice", role: "data2_admin", domain: nil)) |
41 | | - _ = try e.addRole(for: "alice", role: "data1_admin", domain: nil).wait() |
42 | | - XCTAssertEqual(["data1_admin", "data2_admin"], e.getRoles(for: "alice", domain: nil).sorted()) |
43 | | - XCTAssertEqual([], e.getRoles(for: "bob", domain: nil).sorted()) |
44 | | - XCTAssertEqual([], e.getRoles(for: "data2_admin", domain: nil).sorted()) |
45 | | - XCTAssertEqual(["read", "write"], e.getAllActions().sorted()) |
46 | | - //XCTAssertEqual(["data1", "data2"], e.getAllObjects().sorted()) |
47 | | - //XCTAssertEqual(["alice", "bob", "data2_admin"], e.getAllSubjects().sorted()) |
48 | | - //XCTAssertEqual(["data1_admin", "data2_admin"], e.getAllRoles().sorted()) |
| 28 | + |
| 29 | + @Test("basic role APIs") |
| 30 | + func roleApi() throws { |
| 31 | + try withEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv") { e in |
| 32 | + #expect(e.getRoles(for: "alice", domain: nil) == ["data2_admin"]) |
| 33 | + #expect(e.getRoles(for: "bob", domain: nil).isEmpty) |
| 34 | + #expect(e.getRoles(for: "data2_admin", domain: nil).isEmpty) |
| 35 | + #expect(e.getRoles(for: "non_exists", domain: nil).isEmpty) |
| 36 | + |
| 37 | + #expect(!e.hasRole(for: "alice", role: "data1_admin", domain: nil)) |
| 38 | + #expect(e.hasRole(for: "alice", role: "data2_admin", domain: nil)) |
| 39 | + _ = try e.addRole(for: "alice", role: "data1_admin", domain: nil).wait() |
| 40 | + #expect(e.getRoles(for: "alice", domain: nil).sorted() == ["data1_admin", "data2_admin"]) |
| 41 | + #expect(e.getRoles(for: "bob", domain: nil).sorted() == []) |
| 42 | + #expect(e.getRoles(for: "data2_admin", domain: nil).sorted() == []) |
| 43 | + #expect(e.getAllActions().sorted() == ["read", "write"]) |
| 44 | + } |
49 | 45 | } |
50 | | - func testCoreApi_for_RoleApi_with_domain() throws { |
51 | | - let e = try makeEnforer("examples/rbac_with_domains_model.conf", "examples/rbac_with_domains_policy.csv") |
52 | | - XCTAssertEqual(["read", "write"], e.getAllActions().sorted()) |
53 | | - //XCTAssertEqual(["data1", "data2"], e.getAllObjects()) |
54 | | - //XCTAssertEqual(["admin",], e.getAllSubjects()) |
55 | | - //XCTAssertEqual(["admin", ], e.getAllRoles()) |
| 46 | + |
| 47 | + @Test("core API with domain") |
| 48 | + func coreApiWithDomain() throws { |
| 49 | + try withEnforcer("examples/rbac_with_domains_model.conf", "examples/rbac_with_domains_policy.csv") { e in |
| 50 | + #expect(e.getAllActions().sorted() == ["read", "write"]) |
| 51 | + } |
56 | 52 | } |
57 | 53 | } |
0 commit comments