Merge branch 'appveyor'
turn on windows CI, add helper script, add badge to README, update test to not fail randomly on windows
This commit is contained in:
		
						commit
						03a064d8d3
					
				
							
								
								
									
										56
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								.appveyor.yml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,56 @@ | ||||||
|  | # adapted from https://packaging.python.org/en/latest/appveyor/ | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | environment: | ||||||
|  |   # we tell Tox to use "twisted[windows]", to get pypiwin32 installed | ||||||
|  |   #TWISTED_EXTRAS: "[windows]" | ||||||
|  |   # that didn't work (it seems to work when I run it locally, but on appveyor | ||||||
|  |   # it fails to install the pypiwin32 package). So don't bother telling | ||||||
|  |   # Twisted to support windows: just install it ourselves. | ||||||
|  |   # EXTRA_DEPENDENCY: "pypiwin32" | ||||||
|  |   matrix: | ||||||
|  |     # For Python versions available on Appveyor, see | ||||||
|  |     # http://www.appveyor.com/docs/installed-software#python | ||||||
|  |     - PYTHON: "C:\\Python27" | ||||||
|  |     - PYTHON: "C:\\Python27-x64" | ||||||
|  |       DISTUTILS_USE_SDK: "1" | ||||||
|  |     - PYTHON: "C:\\Python34" | ||||||
|  |     - PYTHON: "C:\\Python35" | ||||||
|  |     - PYTHON: "C:\\Python36" | ||||||
|  |     - PYTHON: "C:\\Python36-x64" | ||||||
|  | 
 | ||||||
|  | install: | ||||||
|  |   - | | ||||||
|  |     %PYTHON%\python.exe -m pip install wheel tox | ||||||
|  | 
 | ||||||
|  | # note: | ||||||
|  | # %PYTHON% has: python.exe | ||||||
|  | # %PYTHON%\Scripts has: pip.exe, tox.exe (and others installed by bare pip) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | build: off | ||||||
|  | 
 | ||||||
|  | test_script: | ||||||
|  |   # Put your test command here. | ||||||
|  |   # Note that you must use the environment variable %PYTHON% to refer to | ||||||
|  |   # the interpreter you're using - Appveyor does not do anything special | ||||||
|  |   # to put the Python evrsion you want to use on PATH. | ||||||
|  |   - | | ||||||
|  |     misc\windows-build.cmd %PYTHON%\Scripts\tox.exe -e py | ||||||
|  | 
 | ||||||
|  | after_test: | ||||||
|  |   # This step builds your wheels. | ||||||
|  |   # Again, you only need build.cmd if you're building C extensions for | ||||||
|  |   # 64-bit Python 3.3/3.4. And you need to use %PYTHON% to get the correct | ||||||
|  |   # interpreter | ||||||
|  |   - | | ||||||
|  |     misc\windows-build.cmd %PYTHON%\python.exe setup.py bdist_wheel | ||||||
|  | 
 | ||||||
|  | artifacts: | ||||||
|  |   # bdist_wheel puts your built wheel in the dist directory | ||||||
|  |   - path: dist\* | ||||||
|  | 
 | ||||||
|  | #on_success: | ||||||
|  | #  You can use this step to upload your artifacts to a public website. | ||||||
|  | #  See Appveyor's documentation for more details. Or you can simply | ||||||
|  | #  access your wheels from the Appveyor "artifacts" tab for your build. | ||||||
|  | @ -2,6 +2,7 @@ | ||||||
| 
 | 
 | ||||||
| [](https://pypi.python.org/pypi/magic-wormhole-transit-relay) | [](https://pypi.python.org/pypi/magic-wormhole-transit-relay) | ||||||
| [](https://travis-ci.org/warner/magic-wormhole-transit-relay) | [](https://travis-ci.org/warner/magic-wormhole-transit-relay) | ||||||
|  | [](https://ci.appveyor.com/project/warner/magic-wormhole-transit-relay) | ||||||
| [](https://codecov.io/github/warner/magic-wormhole-transit-relay?branch=master) | [](https://codecov.io/github/warner/magic-wormhole-transit-relay?branch=master) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										21
									
								
								misc/windows-build.cmd
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								misc/windows-build.cmd
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | ||||||
|  | @echo off | ||||||
|  | :: To build extensions for 64 bit Python 3, we need to configure environment | ||||||
|  | :: variables to use the MSVC 2010 C++ compilers from GRMSDKX_EN_DVD.iso of: | ||||||
|  | :: MS Windows SDK for Windows 7 and .NET Framework 4 | ||||||
|  | :: | ||||||
|  | :: More details at: | ||||||
|  | :: https://github.com/cython/cython/wiki/64BitCythonExtensionsOnWindows | ||||||
|  | 
 | ||||||
|  | IF "%DISTUTILS_USE_SDK%"=="1" ( | ||||||
|  |     ECHO Configuring environment to build with MSVC on a 64bit architecture | ||||||
|  |     ECHO Using Windows SDK 7.1 | ||||||
|  |     "C:\Program Files\Microsoft SDKs\Windows\v7.1\Setup\WindowsSdkVer.exe" -q -version:v7.1 | ||||||
|  |     CALL "C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /release | ||||||
|  |     SET MSSdk=1 | ||||||
|  |     REM Need the following to allow tox to see the SDK compiler | ||||||
|  |     SET TOX_TESTENV_PASSENV=DISTUTILS_USE_SDK MSSdk INCLUDE LIB | ||||||
|  | ) ELSE ( | ||||||
|  |     ECHO Using default MSVC build environment | ||||||
|  | ) | ||||||
|  | 
 | ||||||
|  | CALL %* | ||||||
|  | @ -12,14 +12,15 @@ class DB(unittest.TestCase): | ||||||
|         return db |         return db | ||||||
| 
 | 
 | ||||||
|     def test_db(self): |     def test_db(self): | ||||||
|  |         T = 1519075308.0 | ||||||
|         d = self.mktemp() |         d = self.mktemp() | ||||||
|         os.mkdir(d) |         os.mkdir(d) | ||||||
|         usage_db = os.path.join(d, "usage.sqlite") |         usage_db = os.path.join(d, "usage.sqlite") | ||||||
|         with mock.patch("time.time", return_value=456): |         with mock.patch("time.time", return_value=T+0): | ||||||
|             t = Transit(blur_usage=None, log_file=None, usage_db=usage_db) |             t = Transit(blur_usage=None, log_file=None, usage_db=usage_db) | ||||||
|         db = self.open_db(usage_db) |         db = self.open_db(usage_db) | ||||||
| 
 | 
 | ||||||
|         with mock.patch("time.time", return_value=457): |         with mock.patch("time.time", return_value=T+1): | ||||||
|             t.recordUsage(started=123, result="happy", total_bytes=100, |             t.recordUsage(started=123, result="happy", total_bytes=100, | ||||||
|                           total_time=10, waiting_time=2) |                           total_time=10, waiting_time=2) | ||||||
|         self.assertEqual(db.execute("SELECT * FROM `usage`").fetchall(), |         self.assertEqual(db.execute("SELECT * FROM `usage`").fetchall(), | ||||||
|  | @ -27,11 +28,11 @@ class DB(unittest.TestCase): | ||||||
|                                total_bytes=100, total_time=10, waiting_time=2), |                                total_bytes=100, total_time=10, waiting_time=2), | ||||||
|                           ]) |                           ]) | ||||||
|         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), |         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), | ||||||
|                          dict(rebooted=456, updated=457, |                          dict(rebooted=T+0, updated=T+1, | ||||||
|                               incomplete_bytes=0, |                               incomplete_bytes=0, | ||||||
|                               waiting=0, connected=0)) |                               waiting=0, connected=0)) | ||||||
| 
 | 
 | ||||||
|         with mock.patch("time.time", return_value=458): |         with mock.patch("time.time", return_value=T+2): | ||||||
|             t.recordUsage(started=150, result="errory", total_bytes=200, |             t.recordUsage(started=150, result="errory", total_bytes=200, | ||||||
|                           total_time=11, waiting_time=3) |                           total_time=11, waiting_time=3) | ||||||
|         self.assertEqual(db.execute("SELECT * FROM `usage`").fetchall(), |         self.assertEqual(db.execute("SELECT * FROM `usage`").fetchall(), | ||||||
|  | @ -41,14 +42,14 @@ class DB(unittest.TestCase): | ||||||
|                                total_bytes=200, total_time=11, waiting_time=3), |                                total_bytes=200, total_time=11, waiting_time=3), | ||||||
|                           ]) |                           ]) | ||||||
|         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), |         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), | ||||||
|                          dict(rebooted=456, updated=458, |                          dict(rebooted=T+0, updated=T+2, | ||||||
|                               incomplete_bytes=0, |                               incomplete_bytes=0, | ||||||
|                               waiting=0, connected=0)) |                               waiting=0, connected=0)) | ||||||
| 
 | 
 | ||||||
|         with mock.patch("time.time", return_value=459): |         with mock.patch("time.time", return_value=T+3): | ||||||
|             t.timerUpdateStats() |             t.timerUpdateStats() | ||||||
|         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), |         self.assertEqual(db.execute("SELECT * FROM `current`").fetchone(), | ||||||
|                          dict(rebooted=456, updated=459, |                          dict(rebooted=T+0, updated=T+3, | ||||||
|                               incomplete_bytes=0, |                               incomplete_bytes=0, | ||||||
|                               waiting=0, connected=0)) |                               waiting=0, connected=0)) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user