NetworkReachabilityManagerTests.swift 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. //
  2. // NetworkReachabilityManagerTests.swift
  3. //
  4. // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/)
  5. //
  6. // Permission is hereby granted, free of charge, to any person obtaining a copy
  7. // of this software and associated documentation files (the "Software"), to deal
  8. // in the Software without restriction, including without limitation the rights
  9. // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  10. // copies of the Software, and to permit persons to whom the Software is
  11. // furnished to do so, subject to the following conditions:
  12. //
  13. // The above copyright notice and this permission notice shall be included in
  14. // all copies or substantial portions of the Software.
  15. //
  16. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  17. // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  18. // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  19. // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  20. // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  21. // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  22. // THE SOFTWARE.
  23. //
  24. @testable import Alamofire
  25. import Foundation
  26. import SystemConfiguration
  27. import XCTest
  28. class NetworkReachabilityManagerTestCase: BaseTestCase {
  29. // MARK: - Tests - Initialization
  30. func testThatManagerCanBeInitializedFromHost() {
  31. // Given, When
  32. let manager = NetworkReachabilityManager(host: "localhost")
  33. // Then
  34. XCTAssertNotNil(manager)
  35. }
  36. func testThatManagerCanBeInitializedFromAddress() {
  37. // Given, When
  38. let manager = NetworkReachabilityManager()
  39. // Then
  40. XCTAssertNotNil(manager)
  41. }
  42. func testThatHostManagerIsReachableOnWiFi() {
  43. // Given, When
  44. let manager = NetworkReachabilityManager(host: "localhost")
  45. // Then
  46. XCTAssertEqual(manager?.networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  47. XCTAssertEqual(manager?.isReachable, true)
  48. XCTAssertEqual(manager?.isReachableOnWWAN, false)
  49. XCTAssertEqual(manager?.isReachableOnEthernetOrWiFi, true)
  50. }
  51. func testThatHostManagerStartsWithReachableStatus() {
  52. // Given, When
  53. let manager = NetworkReachabilityManager(host: "localhost")
  54. // Then
  55. XCTAssertEqual(manager?.networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  56. XCTAssertEqual(manager?.isReachable, true)
  57. XCTAssertEqual(manager?.isReachableOnWWAN, false)
  58. XCTAssertEqual(manager?.isReachableOnEthernetOrWiFi, true)
  59. }
  60. func testThatAddressManagerStartsWithReachableStatus() {
  61. // Given, When
  62. let manager = NetworkReachabilityManager()
  63. // Then
  64. XCTAssertEqual(manager?.networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  65. XCTAssertEqual(manager?.isReachable, true)
  66. XCTAssertEqual(manager?.isReachableOnWWAN, false)
  67. XCTAssertEqual(manager?.isReachableOnEthernetOrWiFi, true)
  68. }
  69. func testThatHostManagerCanBeDeinitialized() {
  70. // Given
  71. var manager: NetworkReachabilityManager? = NetworkReachabilityManager(host: "localhost")
  72. // When
  73. manager = nil
  74. // Then
  75. XCTAssertNil(manager)
  76. }
  77. func testThatAddressManagerCanBeDeinitialized() {
  78. // Given
  79. var manager: NetworkReachabilityManager? = NetworkReachabilityManager()
  80. // When
  81. manager = nil
  82. // Then
  83. XCTAssertNil(manager)
  84. }
  85. // MARK: - Tests - Listener
  86. func testThatHostManagerIsNotifiedWhenStartListeningIsCalled() {
  87. // Given
  88. let manager = NetworkReachabilityManager(host: "localhost")
  89. let expectation = expectationWithDescription("listener closure should be executed")
  90. var networkReachabilityStatus: NetworkReachabilityManager.NetworkReachabilityStatus?
  91. manager?.listener = { status in
  92. networkReachabilityStatus = status
  93. expectation.fulfill()
  94. }
  95. // When
  96. manager?.startListening()
  97. waitForExpectationsWithTimeout(timeout, handler: nil)
  98. // Then
  99. XCTAssertEqual(networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  100. }
  101. func testThatAddressManagerIsNotifiedWhenStartListeningIsCalled() {
  102. // Given
  103. let manager = NetworkReachabilityManager()
  104. let expectation = expectationWithDescription("listener closure should be executed")
  105. var networkReachabilityStatus: NetworkReachabilityManager.NetworkReachabilityStatus?
  106. manager?.listener = { status in
  107. networkReachabilityStatus = status
  108. expectation.fulfill()
  109. }
  110. // When
  111. manager?.startListening()
  112. waitForExpectationsWithTimeout(timeout, handler: nil)
  113. // Then
  114. XCTAssertEqual(networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  115. }
  116. // MARK: - Tests - Network Reachability Status
  117. func testThatManagerReturnsNotReachableStatusWhenReachableFlagIsAbsent() {
  118. // Given
  119. let manager = NetworkReachabilityManager()
  120. let flags: SCNetworkReachabilityFlags = [.ConnectionOnDemand]
  121. // When
  122. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  123. // Then
  124. XCTAssertEqual(networkReachabilityStatus, .NotReachable)
  125. }
  126. func testThatManagerReturnsNotReachableStatusWhenInterventionIsRequired() {
  127. // Given
  128. let manager = NetworkReachabilityManager()
  129. let flags: SCNetworkReachabilityFlags = [.Reachable, .ConnectionRequired, .ConnectionOnDemand, .InterventionRequired]
  130. // When
  131. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  132. // Then
  133. XCTAssertEqual(networkReachabilityStatus, .NotReachable)
  134. }
  135. func testThatManagerReturnsReachableOnWiFiStatusWhenConnectionIsNotRequired() {
  136. // Given
  137. let manager = NetworkReachabilityManager()
  138. let flags: SCNetworkReachabilityFlags = [.Reachable]
  139. // When
  140. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  141. // Then
  142. XCTAssertEqual(networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  143. }
  144. func testThatManagerReturnsReachableOnWiFiStatusWhenConnectionIsOnDemand() {
  145. // Given
  146. let manager = NetworkReachabilityManager()
  147. let flags: SCNetworkReachabilityFlags = [.Reachable, .ConnectionRequired, .ConnectionOnDemand]
  148. // When
  149. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  150. // Then
  151. XCTAssertEqual(networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  152. }
  153. func testThatManagerReturnsReachableOnWiFiStatusWhenConnectionIsOnTraffic() {
  154. // Given
  155. let manager = NetworkReachabilityManager()
  156. let flags: SCNetworkReachabilityFlags = [.Reachable, .ConnectionRequired, .ConnectionOnTraffic]
  157. // When
  158. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  159. // Then
  160. XCTAssertEqual(networkReachabilityStatus, .Reachable(.EthernetOrWiFi))
  161. }
  162. #if os(iOS)
  163. func testThatManagerReturnsReachableOnWWANStatusWhenIsWWAN() {
  164. // Given
  165. let manager = NetworkReachabilityManager()
  166. let flags: SCNetworkReachabilityFlags = [.Reachable, .IsWWAN]
  167. // When
  168. let networkReachabilityStatus = manager?.networkReachabilityStatusForFlags(flags)
  169. // Then
  170. XCTAssertEqual(networkReachabilityStatus, .Reachable(.WWAN))
  171. }
  172. #endif
  173. }