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 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
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_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)
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)
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()
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()
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)
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)
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]
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_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
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
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))
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)