| 
									
										
										
										
											2015-11-18 17:16:17 +02:00
										 |  |  | # Copyright 2014-2015 Ivan Kravets <me@ikravets.com> | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Licensed under the Apache License, Version 2.0 (the "License"); | 
					
						
							|  |  |  | # you may not use this file except in compliance with the License. | 
					
						
							|  |  |  | # You may obtain a copy of the License at | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | #    http://www.apache.org/licenses/LICENSE-2.0 | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # Unless required by applicable law or agreed to in writing, software | 
					
						
							|  |  |  | # distributed under the License is distributed on an "AS IS" BASIS, | 
					
						
							|  |  |  | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
					
						
							|  |  |  | # See the License for the specific language governing permissions and | 
					
						
							|  |  |  | # limitations under the License. | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | import pytest | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  | import requests | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | from os.path import basename | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  | from platformio.util import get_api_result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | @pytest.fixture(scope="session") | 
					
						
							|  |  |  | def sfpkglist(): | 
					
						
							|  |  |  |     result = None | 
					
						
							|  |  |  |     r = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         r = requests.get("http://sourceforge.net/projects" | 
					
						
							|  |  |  |                          "/platformio-storage/files/packages/list") | 
					
						
							|  |  |  |         result = r.json() | 
					
						
							|  |  |  |         r.raise_for_status() | 
					
						
							|  |  |  |     except: | 
					
						
							|  |  |  |         pass | 
					
						
							|  |  |  |     finally: | 
					
						
							|  |  |  |         if r: | 
					
						
							|  |  |  |             r.close() | 
					
						
							|  |  |  |     return result | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  | def pytest_generate_tests(metafunc): | 
					
						
							|  |  |  |     if "package_data" not in metafunc.fixturenames: | 
					
						
							|  |  |  |         return | 
					
						
							| 
									
										
										
										
											2015-03-14 00:01:32 +02:00
										 |  |  |     pkgs_manifest = get_api_result("/packages/manifest") | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  |     assert isinstance(pkgs_manifest, dict) | 
					
						
							|  |  |  |     packages = [] | 
					
						
							|  |  |  |     for _, variants in pkgs_manifest.iteritems(): | 
					
						
							|  |  |  |         for item in variants: | 
					
						
							|  |  |  |             packages.append(item) | 
					
						
							|  |  |  |     metafunc.parametrize("package_data", packages) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def validate_response(req): | 
					
						
							|  |  |  |     assert req.status_code == 200 | 
					
						
							|  |  |  |     assert int(req.headers['Content-Length']) > 0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | def validate_package(url, sfpkglist): | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  |     r = requests.head(url, allow_redirects=True) | 
					
						
							|  |  |  |     validate_response(r) | 
					
						
							| 
									
										
										
										
											2015-02-23 23:08:42 +02:00
										 |  |  |     assert r.headers['Content-Type'] in ("application/x-gzip", | 
					
						
							|  |  |  |                                          "application/octet-stream") | 
					
						
							| 
									
										
										
										
											2015-02-20 21:02:10 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | def test_package(package_data, sfpkglist): | 
					
						
							| 
									
										
										
										
											2015-02-21 15:15:00 +02:00
										 |  |  |     assert package_data['url'].endswith("%d.tar.gz" % package_data['version']) | 
					
						
							| 
									
										
										
										
											2015-07-29 19:59:39 +03:00
										 |  |  |     sf_package = "sourceforge.net" in package_data['url'] | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # check content type and that file exists | 
					
						
							| 
									
										
										
										
											2015-05-29 18:34:21 +03:00
										 |  |  |     try: | 
					
						
							|  |  |  |         r = requests.head(package_data['url'], allow_redirects=True) | 
					
						
							| 
									
										
										
										
											2015-06-03 19:14:10 +03:00
										 |  |  |         if 500 <= r.status_code <= 599: | 
					
						
							| 
									
										
										
										
											2015-06-01 17:49:04 +03:00
										 |  |  |             raise requests.exceptions.ConnectionError() | 
					
						
							| 
									
										
										
										
											2015-07-29 19:59:39 +03:00
										 |  |  |     except requests.exceptions.ConnectionError as e: | 
					
						
							|  |  |  |         if sf_package: | 
					
						
							|  |  |  |             return pytest.skip("SF is off-line") | 
					
						
							|  |  |  |         raise Exception(e) | 
					
						
							| 
									
										
										
										
											2015-05-29 18:34:21 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  |     validate_response(r) | 
					
						
							|  |  |  |     assert r.headers['Content-Type'] in ("application/x-gzip", | 
					
						
							|  |  |  |                                          "application/octet-stream") | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-29 19:59:39 +03:00
										 |  |  |     if not sf_package: | 
					
						
							|  |  |  |         return | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  |     # check sha1 sum | 
					
						
							|  |  |  |     if sfpkglist is None: | 
					
						
							| 
									
										
										
										
											2015-05-29 18:34:21 +03:00
										 |  |  |         return pytest.skip("SF is off-line") | 
					
						
							| 
									
										
										
										
											2015-02-24 20:11:57 +02:00
										 |  |  |     pkgname = basename(package_data['url']) | 
					
						
							|  |  |  |     assert pkgname in sfpkglist | 
					
						
							|  |  |  |     assert package_data['sha1'] == sfpkglist.get(pkgname, {}).get("sha1") |