[pytango] 78/122: Add subprocess support for DeviceTestContext
Sandor Bodo-Merle
sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:18:20 UTC 2017
This is an automated email from the git hooks/post-receive script.
sbodomerle-guest pushed a commit to tag v9.2.1
in repository pytango.
commit 105c277c55fb753d90b8396e4c30d2beffa27e55
Author: Vincent Michel <vincent.michel at maxlab.lu.se>
Date: Fri Oct 28 16:50:42 2016 +0200
Add subprocess support for DeviceTestContext
---
tango/test_context.py | 31 ++++++++++++++++++++-----------
test/test_server.py | 20 ++++++--------------
2 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/tango/test_context.py b/tango/test_context.py
index a6aec05..18e2c38 100644
--- a/tango/test_context.py
+++ b/tango/test_context.py
@@ -2,16 +2,18 @@
from __future__ import absolute_import
-__all__ = ["DeviceTestContext", "run_device_test_context"]
-
# Imports
import os
import six
import struct
import tempfile
-import threading
import collections
+# Concurrency imports
+import threading
+import multiprocessing
+from six.moves import queue
+
# CLI imports
from ast import literal_eval
from importlib import import_module
@@ -21,6 +23,8 @@ from argparse import ArgumentParser
from .server import run
from . import DeviceProxy, Database, Util
+__all__ = ["DeviceTestContext", "run_device_test_context"]
+
# Helpers
@@ -74,12 +78,12 @@ class DeviceTestContext(object):
nodb = "dbase=no"
command = "{0} {1} -ORBendPoint giop:tcp::{2} -file={3}"
- connect_timeout = 1.0
+ connect_timeout = 1.
disconnect_timeout = connect_timeout
def __init__(self, device, device_cls=None, server_name=None,
instance_name=None, device_name=None, properties={},
- db=None, port=0, debug=3, daemon=False):
+ db=None, port=0, debug=3, process=False, daemon=False):
"""Inititalize the context to run a given device."""
# Argument
tangoclass = device.__name__
@@ -91,6 +95,9 @@ class DeviceTestContext(object):
device_name = 'test/nodb/' + server_name.lower()
if db is None:
_, db = tempfile.mkstemp()
+ # Patch bug #819
+ if process:
+ os.environ['ORBscanGranularity'] = '0'
# Attributes
self.db = db
self.host = ''
@@ -98,7 +105,7 @@ class DeviceTestContext(object):
self.device_name = device_name
self.server_name = "/".join(("dserver", server_name, instance_name))
self.device = self.server = None
- self.waiter = threading.Event()
+ self.queue = multiprocessing.Queue() if process else queue.Queue()
# File
self.generate_db_file(server_name, instance_name, device_name,
tangoclass, properties)
@@ -117,14 +124,14 @@ class DeviceTestContext(object):
target = device.run_server
args = (cmd_args,)
# Thread
- cls = threading.Thread
kwargs = {'post_init_callback': self.post_init}
+ cls = multiprocessing.Process if process else threading.Thread
self.thread = cls(target=target, args=args, kwargs=kwargs)
self.thread.daemon = daemon
def post_init(self):
- self.host, self.port = get_server_host_port()
- self.waiter.set()
+ host, port = get_server_host_port()
+ self.queue.put((host, port))
def generate_db_file(self, server, instance, device,
tangoclass=None, properties={}):
@@ -161,12 +168,14 @@ class DeviceTestContext(object):
return self
def connect(self):
- if not self.waiter.wait(self.connect_timeout):
+ try:
+ self.host, self.port = self.queue.get(
+ timeout=self.connect_timeout)
+ except queue.Empty:
raise RuntimeError(
'The server did not start. '
'Check stdout/stderr for more information.')
# Get server proxy
- print(self.get_server_access())
self.server = DeviceProxy(self.get_server_access())
self.server.ping()
# Get device proxy
diff --git a/test/test_server.py b/test/test_server.py
index a163875..49f7063 100644
--- a/test/test_server.py
+++ b/test/test_server.py
@@ -107,11 +107,10 @@ def test_read_write_attribute(typed_values, server_green_mode):
# Test properties
- at pytest.fixture
-def device_with_property(typed_values, server_green_mode):
+def test_device_property(typed_values, server_green_mode):
dtype, values = typed_values
default = values[0]
- other = values[1]
+ value = values[1]
@add_metaclass(DeviceMeta)
class TestDevice(Device):
@@ -123,19 +122,12 @@ def device_with_property(typed_values, server_green_mode):
def get_prop(self):
return self.prop
- return TestDevice, default, other
-
-
-def test_default_property(device_with_property):
- TestDevice, default, _ = device_with_property
- with DeviceTestContext(TestDevice) as proxy:
+ with DeviceTestContext(TestDevice, process=True) as proxy:
expected = pytest.approx(default)
assert proxy.get_prop() == expected
-
-def test_device_property(device_with_property):
- TestDevice, _, value = device_with_property
- properties = {'prop': value}
- with DeviceTestContext(TestDevice, properties=properties) as proxy:
+ with DeviceTestContext(TestDevice,
+ properties={'prop': value},
+ process=True) as proxy:
expected = pytest.approx(value)
assert proxy.get_prop() == expected
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git
More information about the debian-science-commits
mailing list