[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