Skip to content

Commit

Permalink
chore: Add support for testing on Linux
Browse files Browse the repository at this point in the history
  • Loading branch information
kylef committed Dec 2, 2016
1 parent 654bc93 commit 8cd089b
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 20 deletions.
41 changes: 21 additions & 20 deletions Tests/JWTTests/JWTTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,30 +17,30 @@ class EncodeTests: XCTestCase {
}

assertSuccess(try JWT.decode(jwt, algorithm: algorithm)) { payload in
XCTAssertEqual(payload as NSDictionary, ["iss": "fuller.li"])
XCTAssertEqual(payload as! [String: String], ["iss": "fuller.li"])
}
}
}

class PayloadTests: XCTestCase {
func testIssuer() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
builder.issuer = "fuller.li"
XCTAssertEqual(builder.issuer, "fuller.li")
XCTAssertEqual(builder["iss"] as? String, "fuller.li")
}
}

func testAudience() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
builder.audience = "cocoapods"
XCTAssertEqual(builder.audience, "cocoapods")
XCTAssertEqual(builder["aud"] as? String, "cocoapods")
}
}

func testExpiration() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
let date = Date(timeIntervalSince1970: Date().timeIntervalSince1970)
builder.expiration = date
XCTAssertEqual(builder.expiration, date)
Expand All @@ -49,7 +49,7 @@ class PayloadTests: XCTestCase {
}

func testNotBefore() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
let date = Date(timeIntervalSince1970: Date().timeIntervalSince1970)
builder.notBefore = date
XCTAssertEqual(builder.notBefore, date)
Expand All @@ -58,7 +58,7 @@ class PayloadTests: XCTestCase {
}

func testIssuedAt() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
let date = Date(timeIntervalSince1970: Date().timeIntervalSince1970)
builder.issuedAt = date
XCTAssertEqual(builder.issuedAt, date)
Expand All @@ -67,7 +67,7 @@ class PayloadTests: XCTestCase {
}

func testCustomAttributes() {
JWT.encode(.none) { builder in
_ = JWT.encode(.none) { builder in
builder["user"] = "kyle"
XCTAssertEqual(builder["user"] as? String, "kyle")
}
Expand All @@ -79,7 +79,7 @@ class DecodeTests: XCTestCase {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYW1lIjoiS3lsZSJ9.zxm7xcp1eZtZhp4t-nlw09ATQnnFKIiSN83uG8u6cAg"

assertSuccess(try JWT.decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["name": "Kyle"])
XCTAssertEqual(payload as! [String: String], ["name": "Kyle"])
}
}

Expand All @@ -99,7 +99,7 @@ class DecodeTests: XCTestCase {
func testSuccessfulIssuerValidation() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJmdWxsZXIubGkifQ.d7B7PAQcz1E6oNhrlxmHxHXHgg39_k7X7wWeahl8kSQ"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!), issuer:"fuller.li")) { payload in
XCTAssertEqual(payload as NSDictionary, ["iss": "fuller.li"])
XCTAssertEqual(payload as! [String: String], ["iss": "fuller.li"])
}
}

Expand Down Expand Up @@ -129,15 +129,15 @@ class DecodeTests: XCTestCase {
// If this just started failing, hello 2024!
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE3MjgxODg0OTF9.EW7k-8Mvnv0GpvOKJalFRLoCB3a3xGG3i7hAZZXNAz0"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["exp": 1728188491])
XCTAssertEqual(payload as! [String: Int], ["exp": 1728188491])
}
}

func testUnexpiredClaimString() {
// If this just started failing, hello 2024!
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOiIxNzI4MTg4NDkxIn0.y4w7lNLrfRRPzuNUfM-ZvPkoOtrTU_d8ZVYasLdZGpk"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["exp": "1728188491"])
XCTAssertEqual(payload as! [String: String], ["exp": "1728188491"])
}
}

Expand All @@ -146,14 +146,14 @@ class DecodeTests: XCTestCase {
func testNotBeforeClaim() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0MjgxODk3MjB9.jFT0nXAJvEwyG6R7CMJlzNJb7FtZGv30QRZpYam5cvs"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["nbf": 1428189720])
XCTAssertEqual(payload as! [String: Int], ["nbf": 1428189720])
}
}

func testNotBeforeClaimString() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOiIxNDI4MTg5NzIwIn0.qZsj36irdmIAeXv6YazWDSFbpuxHtEh4Deof5YTpnVI"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["nbf": "1428189720"])
XCTAssertEqual(payload as! [String: String], ["nbf": "1428189720"])
}
}

Expand All @@ -173,14 +173,14 @@ class DecodeTests: XCTestCase {
func testIssuedAtClaimInThePast() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOjE0MjgxODk3MjB9.I_5qjRcCUZVQdABLwG82CSuu2relSdIyJOyvXWUAJh4"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["iat": 1428189720])
XCTAssertEqual(payload as! [String: Int], ["iat": 1428189720])
}
}

func testIssuedAtClaimInThePastString() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpYXQiOiIxNDI4MTg5NzIwIn0.M8veWtsY52oBwi7LRKzvNnzhjK0QBS8Su1r0atlns2k"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["iat": "1428189720"])
XCTAssertEqual(payload as! [String: String], ["iat": "1428189720"])
}
}

Expand All @@ -201,14 +201,15 @@ class DecodeTests: XCTestCase {
func testAudiencesClaim() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOlsibWF4aW5lIiwia2F0aWUiXX0.-PKvdNLCClrWG7CvesHP6PB0-vxu-_IZcsYhJxBy5JM"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!), audience:"maxine")) { payload in
XCTAssertEqual(payload as NSDictionary, ["aud": ["maxine", "katie"]])
XCTAssertEqual(payload.count, 1)
XCTAssertEqual(payload["aud"] as! [String], ["maxine", "katie"])
}
}

func testAudienceClaim() {
let jwt = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhdWQiOiJreWxlIn0.dpgH4JOwueReaBoanLSxsGTc7AjKUvo7_M1sAfy_xVE"
assertSuccess(try decode(jwt, algorithm: .hs256("secret".data(using: .utf8)!), audience:"kyle")) { payload in
XCTAssertEqual(payload as NSDictionary, ["aud": "kyle"])
XCTAssertEqual(payload as! [String: String], ["aud": "kyle"])
}
}

Expand All @@ -227,7 +228,7 @@ class DecodeTests: XCTestCase {
func testNoneAlgorithm() {
let jwt = "eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0.eyJ0ZXN0IjoiaW5nIn0."
assertSuccess(try decode(jwt, algorithm:.none)) { payload in
XCTAssertEqual(payload as NSDictionary, ["test": "ing"])
XCTAssertEqual(payload as! [String: String], ["test": "ing"])
}
}

Expand All @@ -244,14 +245,14 @@ class DecodeTests: XCTestCase {
func testHS384Algorithm() {
let jwt = "eyJhbGciOiJIUzM4NCIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.lddiriKLoo42qXduMhCTKZ5Lo3njXxOC92uXyvbLyYKzbq4CVVQOb3MpDwnI19u4"
assertSuccess(try decode(jwt, algorithm: .hs384("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["some": "payload"])
XCTAssertEqual(payload as! [String: String], ["some": "payload"])
}
}

func testHS512Algorithm() {
let jwt = "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.WTzLzFO079PduJiFIyzrOah54YaM8qoxH9fLMQoQhKtw3_fMGjImIOokijDkXVbyfBqhMo2GCNu4w9v7UXvnpA"
assertSuccess(try decode(jwt, algorithm: .hs512("secret".data(using: .utf8)!))) { payload in
XCTAssertEqual(payload as NSDictionary, ["some": "payload"])
XCTAssertEqual(payload as! [String: String], ["some": "payload"])
}
}
}
Expand Down
67 changes: 67 additions & 0 deletions Tests/LinuxMain.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import XCTest
@testable import JWTTests


extension EncodeTests {
static var allTests : [(String, (EncodeTests) -> () throws -> Void)] {
return [
("testEncodingJWT", testEncodingJWT),
("testEncodingWithBuilder", testEncodingWithBuilder),
]
}
}


extension DecodeTests {
static var allTests : [(String, (DecodeTests) -> () throws -> Void)] {
return [
("testDecodingValidJWT", testDecodingValidJWT),
("testFailsToDecodeInvalidStringWithoutThreeSegments", testFailsToDecodeInvalidStringWithoutThreeSegments),
("testDisablingVerify", testDisablingVerify),
("testSuccessfulIssuerValidation", testSuccessfulIssuerValidation),
("testIncorrectIssuerValidation", testIncorrectIssuerValidation),
("testMissingIssuerValidation", testMissingIssuerValidation),
("testExpiredClaim", testExpiredClaim),
("testInvalidExpiaryClaim", testInvalidExpiaryClaim),
("testUnexpiredClaim", testUnexpiredClaim),
("testUnexpiredClaimString", testUnexpiredClaimString),
("testNotBeforeClaim", testNotBeforeClaim),
("testNotBeforeClaimString", testNotBeforeClaimString),
("testInvalidNotBeforeClaim", testInvalidNotBeforeClaim),
("testUnmetNotBeforeClaim", testUnmetNotBeforeClaim),
("testIssuedAtClaimInThePast", testIssuedAtClaimInThePast),
("testIssuedAtClaimInThePastString", testIssuedAtClaimInThePastString),
("testIssuedAtClaimInTheFuture", testIssuedAtClaimInTheFuture),
("testInvalidIssuedAtClaim", testInvalidIssuedAtClaim),
("testAudiencesClaim", testAudiencesClaim),
("testAudienceClaim", testAudienceClaim),
("testMismatchAudienceClaim", testMismatchAudienceClaim),
("testMissingAudienceClaim", testMissingAudienceClaim),
("testNoneAlgorithm", testNoneAlgorithm),
("testNoneFailsWithSecretAlgorithm", testNoneFailsWithSecretAlgorithm),
("testMatchesAnyAlgorithm", testMatchesAnyAlgorithm),
("testHS384Algorithm", testHS384Algorithm),
("testHS512Algorithm", testHS512Algorithm),
]
}
}


extension PayloadTests {
static var allTests : [(String, (PayloadTests) -> () throws -> Void)] {
return [
("testIssuer", testIssuer),
("testAudience", testAudience),
("testExpiration", testExpiration),
("testNotBefore", testNotBefore),
("testIssuedAt", testIssuedAt),
("testCustomAttributes", testCustomAttributes),
]
}
}

XCTMain([
testCase(EncodeTests.allTests),
testCase(DecodeTests.allTests),
testCase(PayloadTests.allTests),
])

0 comments on commit 8cd089b

Please sign in to comment.