PodStateTests.swift 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. //
  2. // PodStateTests.swift
  3. // OmniKitTests
  4. //
  5. // Created by Pete Schwamb on 10/13/17.
  6. // Copyright © 2017 Pete Schwamb. All rights reserved.
  7. //
  8. import XCTest
  9. @testable import OmniKit
  10. class PodStateTests: XCTestCase {
  11. func testNonceValues() {
  12. var podState = PodState(address: 0x1f000000, piVersion: "1.1.0", pmVersion: "1.1.0", lot: 42560, tid: 661771, insulinType: .novolog)
  13. XCTAssertEqual(podState.currentNonce, 0x8c61ee59)
  14. podState.advanceToNextNonce()
  15. XCTAssertEqual(podState.currentNonce, 0xc0256620)
  16. podState.advanceToNextNonce()
  17. XCTAssertEqual(podState.currentNonce, 0x15022c8a)
  18. podState.advanceToNextNonce()
  19. XCTAssertEqual(podState.currentNonce, 0xacf076ca)
  20. }
  21. func testResyncNonce() {
  22. do {
  23. let config = try VersionResponse(encodedData: Data(hexadecimalString: "011502070002070002020000a62b0002249da11f00ee860318")!)
  24. var podState = PodState(address: 0x1f00ee86, piVersion: "1.1.0", pmVersion: "1.1.0", lot: config.lot, tid: config.tid, insulinType: .novolog)
  25. XCTAssertEqual(42539, config.lot)
  26. XCTAssertEqual(140445, config.tid)
  27. XCTAssertEqual(0x8fd39264, podState.currentNonce)
  28. // ID1:1f00ee86 PTYPE:PDM SEQ:26 ID2:1f00ee86 B9:24 BLEN:6 BODY:1c042e07c7c703c1 CRC:f4
  29. let sentPacket = try Packet(encodedData: Data(hexadecimalString: "1f00ee86ba1f00ee8624061c042e07c7c703c1f4")!)
  30. let sentMessage = try Message(encodedData: sentPacket.data)
  31. let sentCommand = sentMessage.messageBlocks[0] as! DeactivatePodCommand
  32. let errorResponse = try ErrorResponse(encodedData: Data(hexadecimalString: "06031492c482f5")!)
  33. XCTAssertEqual(9, sentMessage.sequenceNum)
  34. switch errorResponse.errorResponseType {
  35. case .badNonce(let nonceResyncKey):
  36. podState.resyncNonce(syncWord: nonceResyncKey, sentNonce: sentCommand.nonce, messageSequenceNum: sentMessage.sequenceNum)
  37. XCTAssertEqual(0x40ccdacb, podState.currentNonce)
  38. break
  39. default:
  40. XCTFail("Unexpected non bad nonce response")
  41. break
  42. }
  43. } catch (let error) {
  44. XCTFail("message decoding threw error: \(error)")
  45. }
  46. }
  47. func testErrorResponse() {
  48. do {
  49. let errorResponse = try ErrorResponse(encodedData: Data(hexadecimalString: "0603070008019a")!)
  50. switch errorResponse.errorResponseType {
  51. case .nonretryableError(let errorCode, let faultEventCode, let podProgress):
  52. XCTAssertEqual(7, errorCode)
  53. XCTAssertEqual(.noFaults, faultEventCode.faultType)
  54. XCTAssertEqual(.aboveFiftyUnits, podProgress)
  55. break
  56. default:
  57. XCTFail("Unexpected bad nonce response")
  58. break
  59. }
  60. } catch (let error) {
  61. XCTFail("message decoding threw error: \(error)")
  62. }
  63. }
  64. }