1from PyObjCTools.TestSupport import * 2from SystemConfiguration import * 3import socket 4 5from test_scnetwork import resolver_available 6 7class TestSCNetworkReachability (TestCase): 8 def testTypes(self): 9 self.assertIsInstance(SCNetworkReachabilityRef, objc.objc_class) 10 11 @onlyIf(resolver_available(), "No DNS resolver available") 12 def testFunctions(self): 13 self.assertResultIsCFRetained(SCNetworkReachabilityCreateWithAddressPair) 14 v = SCNetworkReachabilityCreateWithAddressPair(None, 15 ('0.0.0.0', 20990), 16 ('www.python.org', 80)) 17 18 19 sd = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 20 sd.listen(5) 21 22 self.assertResultIsCFRetained(SCNetworkReachabilityCreateWithAddress) 23 ref = v = SCNetworkReachabilityCreateWithAddress(None, sd.getsockname()) 24 self.assertIsInstance(v, SCNetworkReachabilityRef) 25 26 self.assertResultIsCFRetained(SCNetworkReachabilityCreateWithName) 27 v = SCNetworkReachabilityCreateWithName(None, b'www.python.org') 28 self.assertIsInstance(v, SCNetworkReachabilityRef) 29 30 v = SCNetworkReachabilityGetTypeID() 31 self.assertIsInstance(v, (int, long)) 32 33 self.assertResultIsBOOL(SCNetworkReachabilityGetFlags) 34 v, fl = SCNetworkReachabilityGetFlags(ref, None) 35 self.assertTrue(v) 36 self.assertIsInstance(fl, (int, long)) 37 38 39 l = [] 40 def callout(ref, flags, ctx): 41 l.append([ref, flags, ctx]) 42 print flags 43 ctx = object() 44 v = SCNetworkReachabilitySetCallback(ref, callout, ctx) 45 self.assertTrue(v is True) 46 47 48 rl = CFRunLoopGetCurrent() 49 self.assertResultIsBOOL(SCNetworkReachabilityScheduleWithRunLoop) 50 r = SCNetworkReachabilityScheduleWithRunLoop(ref, rl, kCFRunLoopCommonModes) 51 52 sd.close() 53 CFRunLoopRunInMode(kCFRunLoopDefaultMode, 1.0, False) 54 55 self.assertResultIsBOOL(SCNetworkReachabilityUnscheduleFromRunLoop) 56 r = SCNetworkReachabilityUnscheduleFromRunLoop(ref, rl, kCFRunLoopCommonModes) 57 58 59 60 61 62 63 64 65 66 67if __name__ == "__main__": 68 main() 69