mirror of
				https://github.com/KevinMidboe/python-gpiozero.git
				synced 2025-10-29 17:50:37 +00:00 
			
		
		
		
	Run all tests on all platforms
Also renamed GPIOZERO_INPUT_PIN to GPIOZERO_TEST_INPUT_PIN, and fixed up the pigpio factory so it actually raises an exception if the connection fails and we don't try and control the daemon anymore.
This commit is contained in:
		| @@ -84,6 +84,10 @@ class PiGPIOFactory(PiFactory): | ||||
|             ('software', 'shared'):    PiGPIOSoftwareSPIShared, | ||||
|             } | ||||
|         self._connection = pigpio.pi(host, port) | ||||
|         # Annoyingly, pigpio doesn't raise an exception when it fails to make a | ||||
|         # connection; it returns a valid (but disconnected) pi object | ||||
|         if self.connection is None: | ||||
|             raise IOError('failed to connect to %s:%s' % (host, port)) | ||||
|         self._host = host | ||||
|         self._port = port | ||||
|         self._spis = [] | ||||
|   | ||||
| @@ -12,7 +12,6 @@ except NameError: | ||||
|  | ||||
| import io | ||||
| import os | ||||
| import subprocess | ||||
| from time import sleep | ||||
|  | ||||
| import pytest | ||||
| @@ -37,20 +36,7 @@ except ImportError: | ||||
| # your testing rig requires different pins because the defaults interfere with | ||||
| # attached hardware). | ||||
| TEST_PIN = int(os.getenv('GPIOZERO_TEST_PIN', '22')) | ||||
| INPUT_PIN = int(os.getenv('GPIOZERO_INPUT_PIN', '27')) | ||||
|  | ||||
|  | ||||
| # Skip the entire module if we're not on a Pi | ||||
| def is_a_pi(): | ||||
|     with io.open('/proc/cpuinfo', 'r') as cpuinfo: | ||||
|         for line in cpuinfo: | ||||
|             if line.startswith('Hardware'): | ||||
|                 hardware, colon, soc = line.strip().split(None, 2) | ||||
|                 return soc in ('BCM2708', 'BCM2709', 'BCM2835', 'BCM2836') | ||||
|         else: | ||||
|             return False | ||||
| pytestmark = pytest.mark.skipif(not is_a_pi(), reason='tests cannot run on non-Pi platforms') | ||||
| del is_a_pi | ||||
| INPUT_PIN = int(os.getenv('GPIOZERO_TEST_INPUT_PIN', '27')) | ||||
|  | ||||
|  | ||||
| @pytest.fixture( | ||||
| @@ -58,24 +44,18 @@ del is_a_pi | ||||
|     params=pkg_resources.get_distribution('gpiozero').get_entry_map('gpiozero_pin_factories').keys()) | ||||
| def pin_factory(request): | ||||
|     # Constructs each pin factory in turn with some extra logic to ensure | ||||
|     # the pigpiod daemon gets started and stopped around the pigpio factory | ||||
|     # we skip tests if pigpio is set for remote operation | ||||
|     if request.param == 'pigpio': | ||||
|         try: | ||||
|             subprocess.check_call(['sudo', 'systemctl', 'start', 'pigpiod']) | ||||
|         except subprocess.CalledProcessError: | ||||
|             pytest.skip("skipped factory pigpio: failed to start pigpiod") | ||||
|         if os.getenv('PIGPIO_ADDR', 'localhost') != 'localhost': | ||||
|             pytest.skip("skipped factory pigpio: remote host in PIGPIO_ADDR") | ||||
|     try: | ||||
|         factory = pkg_resources.load_entry_point('gpiozero', 'gpiozero_pin_factories', request.param)() | ||||
|     except Exception as e: | ||||
|         if request.param == 'pigpio': | ||||
|             subprocess.check_call(['sudo', 'systemctl', 'stop', 'pigpiod']) | ||||
|         pytest.skip("skipped factory %s: %s" % (request.param, str(e))) | ||||
|     else: | ||||
|         Device._set_pin_factory(factory) | ||||
|         def fin(): | ||||
|             Device._set_pin_factory(MockFactory()) | ||||
|             if request.param == 'pigpio': | ||||
|                 subprocess.check_call(['sudo', 'systemctl', 'stop', 'pigpiod']) | ||||
|         request.addfinalizer(fin) | ||||
|         return factory | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user