Source code for cis_interface.drivers.tests.test_FileInputDriver

import os
import tempfile
import unittest
from cis_interface.schema import get_schema
import cis_interface.drivers.tests.test_ConnectionDriver as parent


[docs]class TestFileInputParam(parent.TestConnectionParam): r"""Test parameters for FileInputDriver. Attributes (in addition to parent class's): filepath (str): Full path to test file. """ icomm_name = 'FileComm' testing_option_kws = {} def __init__(self, *args, **kwargs): super(TestFileInputParam, self).__init__(*args, **kwargs) self.driver = 'FileInputDriver' self.filepath = os.path.join(tempfile.gettempdir(), '%s_input%s' % (self.name, self.icomm_import_cls._default_extension)) self.args = self.filepath @property def send_comm_kwargs(self): r"""dict: Keyword arguments for send comm.""" out = super(TestFileInputParam, self).send_comm_kwargs out['append'] = True return out @property def contents_to_write(self): r"""str: Contents that should be written to the file.""" return self.testing_options['contents']
[docs] def setup(self): r"""Create a driver instance and start the driver.""" with open(self.filepath, 'wb') as fd: fd.write(self.contents_to_write) super(TestFileInputParam, self).setup()
[docs] def teardown(self): r"""Remove the instance, stoppping it.""" filename = self.instance.icomm.address super(TestFileInputParam, self).teardown() if os.path.isfile(filename): os.remove(filename)
[docs]class TestFileInputDriverNoStart(TestFileInputParam, parent.TestConnectionDriverNoStart): r"""Test runner for FileInputDriver without start.""" pass
[docs]class TestFileInputDriver(TestFileInputParam, parent.TestConnectionDriver): r"""Test runner for FileInputDriver."""
[docs] def assert_before_stop(self): r"""Assertions to make before stopping the driver instance.""" super(TestFileInputDriver, self).assert_before_stop(check_open=False) self.instance.sleep() # File contents flag = True msg_list = [] while flag: flag, msg_recv = self.recv_comm.recv(self.timeout) if flag: msg_list.append(msg_recv) else: self.assert_equal(msg_recv, self.recv_comm.eof_msg) recv_objects = self.testing_options['recv'] self.assert_equal(len(msg_list), len(recv_objects)) for x, y in zip(msg_list, recv_objects): self.assert_msg_equal(x, y)
[docs] def assert_after_terminate(self): r"""Assertions to make after stopping the driver instance.""" super(TestFileInputDriver, self).assert_after_terminate() assert(self.instance.is_comm_closed)
# These are disabled to prevent writting extraneous data
[docs] def run_before_terminate(self): r"""Commands to run while the instance is running, before terminate.""" # Don't send any messages to the file pass
[docs] @unittest.skipIf(True, 'File driver') def test_send_recv(self): r"""Disabled: Test sending/receiving small message.""" pass # pragma: no cover
[docs] @unittest.skipIf(True, 'File driver') def test_send_recv_nolimit(self): r"""Disabled: Test sending/receiving large message.""" pass # pragma: no cover
# Dynamically create tests based on registered file classes s = get_schema() file_types = list(s['file'].schema_subtypes.keys()) for k in file_types: cls_exp = type('Test%sInputDriver' % k, (TestFileInputDriver, ), {'icomm_name': k}) globals()[cls_exp.__name__] = cls_exp if k == 'AsciiTableComm': cls_exp2 = type('Test%sArrayInputDriver' % k, (cls_exp, ), {'testing_option_kws': {'as_array': True}}) globals()[cls_exp2.__name__] = cls_exp2 del cls_exp2 del cls_exp