Skip to content

Commit

Permalink
Added unit tests for pva monitors (client and server).
Browse files Browse the repository at this point in the history
  • Loading branch information
ajgdls committed Nov 3, 2016
1 parent f4707e3 commit cad3ead
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
25 changes: 24 additions & 1 deletion tests/test_comms/test_pva/test_pvaclientcomms.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
from collections import OrderedDict

from malcolm.core.response import Error, Return, Delta
from malcolm.core.request import Post, Get, Put
from malcolm.core.request import Post, Get, Put, Subscribe
import pvaccess
pvaccess.Channel = MagicMock()
pvaccess.RpcClient = MagicMock()
Expand All @@ -18,6 +18,8 @@ def setUp(self):
self.ch = MagicMock()
self.ret_val = MagicMock()
self.ch.get = MagicMock(return_value = self.ret_val)
self.ch.subscribe = MagicMock()
self.ch.startMonitor = MagicMock()
pvaccess.Channel = MagicMock(return_value = self.ch)
self.rpc = MagicMock()
self.rpc.invoke = MagicMock(return_value = self.ret_val)
Expand Down Expand Up @@ -73,3 +75,24 @@ def test_send_post_to_server(self):
self.PVA.send_to_server(request)
self.assertIsInstance(self.PVA.send_to_caller.call_args[0][0], Error)

def test_send_subscribe_to_server(self):
self.PVA = PvaClientComms(self.p)
self.PVA.send_to_caller = MagicMock()
request = Subscribe(endpoint=["ep1", "ep2"])
request.set_id(1)
self.PVA.send_to_server(request)
pvaccess.Channel.assert_called_once()
self.ch.subscribe.assert_called_once()
self.ch.startMonitor.assert_called_once()
mon = self.PVA._monitors[1]
mon_val = MagicMock()
mon_val.toDict = MagicMock(return_value={'typeid': 'malcolm:core/Error:1.0', 'message': 'test error'})
self.PVA.send_to_caller.reset_mock()
mon.monitor_update(mon_val)
self.PVA.send_to_caller.assert_called_once()
self.PVA.send_to_caller.reset_mock()
mon_val = MagicMock()
mon_val.toDict = MagicMock(return_value={'typeid': 'malcolm:core/Update:1.0'})
mon.monitor_update(mon_val)
self.PVA.send_to_caller.assert_called_once()

30 changes: 28 additions & 2 deletions tests/test_comms/test_pva/test_pvaservercomms.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ def set(self, dict_in):

pvaccess.PvObject = PvTempObject

from malcolm.comms.pva.pvaservercomms import PvaServerComms, PvaGetImplementation, PvaPutImplementation, PvaRpcImplementation, PvaEndpoint
from malcolm.comms.pva.pvaservercomms import PvaServerComms, PvaGetImplementation, PvaPutImplementation, PvaRpcImplementation, PvaEndpoint, PvaMonitorImplementation

class TestPVAServerComms(unittest.TestCase):

Expand All @@ -59,6 +59,7 @@ def test_pva_endpoint(self, mock_rpc):
pvaccess.Endpoint.registerEndpointGet = MagicMock()
pvaccess.Endpoint.registerEndpointPut = MagicMock()
pvaccess.Endpoint.registerEndpointRPC = MagicMock()
pvaccess.Endpoint.registerEndpointMonitor = MagicMock()
endpoint = PvaEndpoint("test.name", "test.block", pva_server_mock, server_mock)
request = MagicMock()
endpoint.get_callback(request)
Expand All @@ -72,6 +73,12 @@ def test_pva_endpoint(self, mock_rpc):
server_mock._get_unique_id.assert_called_once()
server_mock.register_put.assert_called_once()
server_mock.get_request.assert_has_calls([call("test.block", request)])
server_mock.reset_mock()
request = MagicMock()
endpoint.monitor_callback(request)
server_mock._get_unique_id.assert_called_once()
server_mock.register_monitor.assert_called_once()
server_mock.get_request.assert_has_calls([call("test.block", request)])

def test_pva_get_implementation(self):
server = MagicMock()
Expand Down Expand Up @@ -122,7 +129,6 @@ def test_pva_put_implementation(self):
server.remove_put.assert_called_once()

def test_pva_rpc_implementation(self):
self.p = MagicMock()
self.p = MagicMock()
pva = PvaRpcImplementation(1, self.p, "test.block", "test.method")
self.assertEqual(pva._id, 1)
Expand All @@ -145,6 +151,26 @@ def test_pva_rpc_implementation(self):
pva.wait_for_reply()
pva._event.wait.assert_called_once()

def test_pva_monitor_implementation(self):
request = MagicMock()
server = MagicMock()
structure = MagicMock()
server.get_request = MagicMock(return_value=structure)
pva = PvaMonitorImplementation(1, request, "test.block", server)
self.assertEqual(pva._id, 1)
self.assertEqual(pva._block, "test.block")
self.assertEqual(pva._server, server)
self.assertEqual(pva._request, request)
self.assertEqual(pva.get_block(), "test.block")
server.get_request.assert_called_with("test.block", request)
self.assertEqual(pva.getPVStructure(), structure)
pva.mu = MagicMock()
pva.mu.update = MagicMock()
self.assertEqual(pva.getUpdater(), pva.mu)
pva.update([["a", "b", "c"], ["d", "e", "f"]])
pva.notify_updates()
pva.mu.update.assert_called_once()

def test_init(self):
self.PVA = PvaServerComms(self.p)

Expand Down

0 comments on commit cad3ead

Please sign in to comment.