Benjamin Peterson | 90f5ba5 | 2010-03-11 22:53:45 +0000 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 2 | |
Raymond Hettinger | 57d1a88 | 2011-02-23 00:46:28 +0000 | [diff] [blame] | 3 | import collections.abc |
Neal Norwitz | 64018ae | 2008-03-24 05:51:45 +0000 | [diff] [blame] | 4 | import errno |
| 5 | import socket |
| 6 | import sys |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 7 | import unittest |
Benjamin Peterson | ee8712c | 2008-05-20 21:35:26 +0000 | [diff] [blame] | 8 | from test import support |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 9 | |
Georg Brandl | 2442015 | 2008-05-26 16:32:26 +0000 | [diff] [blame] | 10 | import xmlrpc.client as xmlrpclib |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 11 | |
| 12 | class CurrentTimeTest(unittest.TestCase): |
| 13 | |
Benjamin Peterson | b42dab3 | 2008-06-11 02:37:01 +0000 | [diff] [blame] | 14 | def test_current_time(self): |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 15 | # Get the current time from xmlrpc.com. This code exercises |
| 16 | # the minimal HTTP functionality in xmlrpclib. |
| 17 | server = xmlrpclib.ServerProxy("http://time.xmlrpc.com/RPC2") |
Neal Norwitz | 64018ae | 2008-03-24 05:51:45 +0000 | [diff] [blame] | 18 | try: |
| 19 | t0 = server.currentTime.getCurrentTime() |
| 20 | except socket.error as e: |
Antoine Pitrou | 305c6b8 | 2009-11-03 17:13:59 +0000 | [diff] [blame] | 21 | self.skipTest("network error: %s" % e) |
Neal Norwitz | 64018ae | 2008-03-24 05:51:45 +0000 | [diff] [blame] | 22 | return |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 23 | |
| 24 | # Perform a minimal sanity check on the result, just to be sure |
| 25 | # the request means what we think it means. |
| 26 | t1 = xmlrpclib.DateTime() |
| 27 | |
| 28 | dt0 = xmlrpclib._datetime_type(t0.value) |
| 29 | dt1 = xmlrpclib._datetime_type(t1.value) |
| 30 | if dt0 > dt1: |
| 31 | delta = dt0 - dt1 |
| 32 | else: |
| 33 | delta = dt1 - dt0 |
| 34 | # The difference between the system time here and the system |
| 35 | # time on the server should not be too big. |
Benjamin Peterson | c9c0f20 | 2009-06-30 23:06:06 +0000 | [diff] [blame] | 36 | self.assertTrue(delta.days <= 1) |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 37 | |
Antoine Pitrou | 305c6b8 | 2009-11-03 17:13:59 +0000 | [diff] [blame] | 38 | def test_python_builders(self): |
| 39 | # Get the list of builders from the XMLRPC buildbot interface at |
| 40 | # python.org. |
Antoine Pitrou | 8d9a4e6 | 2010-11-10 22:36:43 +0000 | [diff] [blame] | 41 | self.skipTest("XMLRPC interface removed in Buildbot 0.8.2") |
Antoine Pitrou | 305c6b8 | 2009-11-03 17:13:59 +0000 | [diff] [blame] | 42 | server = xmlrpclib.ServerProxy("http://www.python.org/dev/buildbot/all/xmlrpc/") |
| 43 | try: |
| 44 | builders = server.getAllBuilders() |
| 45 | except socket.error as e: |
| 46 | self.skipTest("network error: %s" % e) |
| 47 | return |
| 48 | |
| 49 | # Perform a minimal sanity check on the result, just to be sure |
| 50 | # the request means what we think it means. |
Raymond Hettinger | 57d1a88 | 2011-02-23 00:46:28 +0000 | [diff] [blame] | 51 | self.assertIsInstance(builders, collections.abc.Sequence) |
Brett Cannon | c84dc9d | 2010-07-05 22:11:16 +0000 | [diff] [blame] | 52 | self.assertTrue([x for x in builders if "3.x" in x], builders) |
Antoine Pitrou | 305c6b8 | 2009-11-03 17:13:59 +0000 | [diff] [blame] | 53 | |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 54 | |
| 55 | def test_main(): |
Benjamin Peterson | ee8712c | 2008-05-20 21:35:26 +0000 | [diff] [blame] | 56 | support.requires("network") |
| 57 | support.run_unittest(CurrentTimeTest) |
Jeremy Hylton | 5d8a88a | 2007-08-14 16:47:39 +0000 | [diff] [blame] | 58 | |
| 59 | if __name__ == "__main__": |
| 60 | test_main() |