Example #1
0
    def setUp(self):
        self.context = MagicMock()
        self.response_queue = MagicMock()
        self.endpoint = ["BL18I:XSPRESS3", "state", "value"]
        self.value = "5"

        self.put = Put(self.context, self.response_queue, self.endpoint, self.value)
Example #2
0
    def put_async(self, attr_or_items, value=None):
        """"puts a value or values into an attribute or attributes and returns
            immediately

            Args:
                attr_or_items (Attribute or Dict): The attribute or dictionary
                    of {attributes: values} to set
                value (object): For single attr, the value set

            Returns:
                 a list of futures to monitor when each put completes"""
        if value:
            attr_or_items = {attr_or_items: value}
        result_f = []

        for attr, value in attr_or_items.items():
            assert isinstance(attr, Attribute), \
                "Expected Attribute, got %r" % (attr,)

            endpoint = attr.path_relative_to(self.process) + ["value"]
            request = Put(None, self.q, endpoint, value)
            f = Future(self)
            new_id = self._save_future(f)
            request.set_id(new_id)
            self.process.q.put(request)
            result_f.append(f)

        return result_f
Example #3
0
 def put(self, pv):
     self.log_debug("Put method called with: %s", pv)
     self._server.register_put(self._id, self)
     put_dict = pv.toDict()
     endpoints = [self._block]
     endpoints = endpoints + self.dict_to_path(put_dict)
     self.log_debug("Endpoints: %s", endpoints)
     values = self.dict_to_value(put_dict)
     msg = Put(response_queue=self._server.q, endpoint=endpoints, value=values)
     msg.set_id(self._id)
     with self._lock:
         self._server.send_to_process(msg)
         self.wait_for_reply()
     self._server.remove_put(self._id)
Example #4
0
    def test_invalid_request_fails(self):
        endpoint = ["a", "b", "c", "d"]
        request = Post(MagicMock(), MagicMock(), endpoint)
        self.assertRaises(ValueError, self.block.handle_request, request)

        request = Put(MagicMock(), MagicMock(), endpoint)
        self.assertRaises(ValueError, self.block.handle_request, request)
Example #5
0
    def setUp(self):
        self.context = MagicMock()
        self.response_queue = MagicMock()
        self.endpoint = ["BL18I:XSPRESS3", "state", "value"]
        self.value = "5"

        self.put = Put(self.context, self.response_queue, self.endpoint, self.value)
Example #6
0
 def put(self, pv):
     # Null operation, the structure already contains the values
     self.log_debug("Put method called with: %s", pv)
     self.log_debug("Put method called with: %s", pv.toDict())
     put_dict = pv.toDict()
     endpoints = [self._block]
     endpoints = endpoints + self.dict_to_path(put_dict)
     self.log_debug("Endpoints: %s", endpoints)
     values = self.dict_to_value(put_dict)
     msg = Put(response_queue=self._server.q, endpoint=endpoints, value=values)
     msg.set_id(self._id)
     self._server.send_to_process(msg)
     with self._lock:
         self.wait_for_reply()
         self.log_debug("Put method reply received")
     self._server.remove_put(self._id)
Example #7
0
 def put(self, pv):
     self.log_debug("Put method called with: %s", pv)
     self._server.register_put(self._id, self)
     put_dict = pv.toDict()
     endpoints = [self._block]
     endpoints = endpoints + self.dict_to_path(put_dict)
     self.log_debug("Endpoints: %s", endpoints)
     values = self.dict_to_value(put_dict)
     msg = Put(response_queue=self._server.q,
               endpoint=endpoints,
               value=values)
     msg.set_id(self._id)
     with self._lock:
         self._server.send_to_process(msg)
         self.wait_for_reply()
     self._server.remove_put(self._id)
 def test_send_put_to_server(self):
     self.PVA = PvaClientComms(self.p)
     self.PVA.send_to_caller = MagicMock()
     request = Put(endpoint=["ep1", "ep2"], value="val1")
     self.PVA.send_to_server(request)
     pvaccess.Channel.assert_called_once()
     self.ch.put.assert_called_once()
     self.PVA.send_to_caller.assert_called_once()
Example #9
0
class TestPut(unittest.TestCase):
    def setUp(self):
        self.callback = MagicMock()
        self.path = ["BL18I:XSPRESS3:HDF", "filePath", "value"]
        self.value = "/path/to/file.h5"
        self.o = Put(35, self.path, self.value)
        self.o.set_callback(self.callback)

    def test_init(self):
        assert self.o.typeid == "malcolm:core/Put:1.0"
        assert self.o.id == 35
        assert self.o.callback == self.callback
        assert self.path == self.o.path
        assert self.value == self.o.value

    def test_doc(self):
        assert get_doc_json("put_hdf_file_path") == self.o.to_dict()
Example #10
0
    def test_given_put_then_update_attribute(self):
        endpoint = ["TestBlock", "test_attribute", "value"]
        value = "5"
        request = Put(MagicMock(), MagicMock(), endpoint, value)

        self.block.handle_request(request)

        self.attribute.put.assert_called_once_with(value)
        self.attribute.set_value.assert_called_once_with(value)
        response = self.block.parent.block_respond.call_args[0][0]
        self.assertEqual("malcolm:core/Return:1.0", response.typeid)
        self.assertIsNone(response.value)
        response_queue = self.block.parent.block_respond.call_args[0][1]
        self.assertEqual(request.response_queue, response_queue)
Example #11
0
class TestPut(unittest.TestCase):

    def setUp(self):
        self.context = MagicMock()
        self.response_queue = MagicMock()
        self.endpoint = ["BL18I:XSPRESS3", "state", "value"]
        self.value = "5"

        self.put = Put(self.context, self.response_queue, self.endpoint, self.value)

    def test_init(self):
        self.assertEqual(self.context, self.put.context)
        self.assertEqual(self.response_queue, self.put.response_queue)
        self.assertEqual(self.endpoint, self.put.endpoint)
        self.assertEqual(self.value, self.put.value)
        self.assertEqual("malcolm:core/Put:1.0", self.put.typeid)

    def test_setters(self):
        self.put.set_endpoint(["BL18I:XSPRESS3", "state", "value2"])
        self.assertEquals(["BL18I:XSPRESS3", "state", "value2"], self.put.endpoint)

        self.put.set_value("7")
        self.assertEquals("7", self.put.value)
Example #12
0
class TestPut(unittest.TestCase):

    def setUp(self):
        self.context = MagicMock()
        self.response_queue = MagicMock()
        self.endpoint = ["BL18I:XSPRESS3", "state", "value"]
        self.value = "5"

        self.put = Put(self.context, self.response_queue, self.endpoint, self.value)

    def test_init(self):
        self.assertEqual(self.context, self.put.context)
        self.assertEqual(self.response_queue, self.put.response_queue)
        self.assertEqual(self.endpoint, self.put.endpoint)
        self.assertEqual(self.value, self.put.value)
        self.assertEqual("malcolm:core/Put:1.0", self.put.typeid)

    def test_setters(self):
        self.put.set_endpoint(["BL18I:XSPRESS3", "state", "value2"])
        self.assertEquals(["BL18I:XSPRESS3", "state", "value2"], self.put.endpoint)

        self.put.set_value("7")
        self.assertEquals("7", self.put.value)
Example #13
0
    def put_async(self, attr, value):
        """"Puts a value to an attribute and returns immediately

        Args:
            attr (Attribute): The attribute to set
            value (object): The value to set

        Returns:
             a list of one future to monitor the put completes
        """
        assert isinstance(attr, Attribute), \
            "Expected Attribute, got %r" % (attr,)

        endpoint = attr.process_path + ["value"]
        request = Put(None, self.q, endpoint, value)
        future = self._dispatch_request(request)
        return [future]
Example #14
0
 def setUp(self):
     self.callback = MagicMock()
     self.path = ["BL18I:XSPRESS3:HDF", "filePath", "value"]
     self.value = "/path/to/file.h5"
     self.o = Put(35, self.path, self.value)
     self.o.set_callback(self.callback)
Example #15
0
 def test_put(self):
     self.o._q.put(Return(1, 33))
     ret = self.o.put(["block", "attr", "value"], 32)
     self.assert_handle_request_called_with(
         Put(1, ["block", "attr", "value"], 32))
     assert ret == 33
Example #16
0
    def test_handle_request(self):
        q = Queue()

        request = Get(id=41, path=["mri", "myAttribute"], callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Return)
        assert response.id == 41
        assert response.value["value"] == "hello_block"
        # It's part2 that will get the attribute as it was defined second
        self.part2.myAttribute.meta.writeable = False
        request = Put(id=42,
                      path=["mri", "myAttribute"],
                      value='hello_block',
                      callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Error)  # not writeable
        assert response.id == 42

        self.part2.myAttribute.meta.writeable = True
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Return)
        assert response.id == 42
        assert response.value == "hello_block"

        request = Post(id=43, path=["mri", "my_method"], callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Return)
        assert response.id == 43
        assert response.value['ret'] == "world"

        # cover the controller._handle_post path for parameters
        request = Post(id=43,
                       path=["mri", "my_method"],
                       parameters={'dummy': 1},
                       callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Return)
        assert response.id == 43
        assert response.value['ret'] == "world"

        request = Subscribe(id=44,
                            path=["mri", "myAttribute"],
                            delta=False,
                            callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Update)
        assert response.id == 44
        assert response.value["typeid"] == "epics:nt/NTScalar:1.0"
        assert response.value["value"] == "hello_block"

        request = Unsubscribe(id=44, callback=q.put)
        self.o.handle_request(request)
        response = q.get(timeout=.1)
        self.assertIsInstance(response, Return)
        assert response.id == 44
Example #17
0
 def test_put(self):
     self.o._q.put(Return(1, None))
     self.o.put(["block", "attr", "value"], 32)
     self.controller.handle_request.assert_called_once_with(
         Put(1, ["block", "attr", "value"], 32))
Example #18
0
 def test_handle_request(self):
     a = self.meta.make_attribute()
     request = Put(endpoint=["1", "2", "value"], value=Mock())
     put_function = Mock()
     a.handle_request(request, put_function)
     put_function.assert_called_once_with(self.meta, request.value)