3
from subprocess import Popen as execute
4
from twisted.internet.defer import Deferred
6
#---------------------------------------------------------------------------#
7
# configure the client logging
8
#---------------------------------------------------------------------------#
10
log = logging.getLogger(__name__)
14
This is the base runner class for all the integration tests
17
def initialize(self, service):
18
''' Initializes the test environment '''
19
self.fnull = open(os.devnull, 'w')
20
self.server = execute(service, stdout=self.fnull, stderr=self.fnull)
21
log.debug("%s service started: %s", service, self.server.pid)
25
''' Cleans up the test environment '''
28
log.debug("service stopped")
30
def testReadWriteCoil(self):
31
rq = self.client.write_coil(1, True)
32
rr = self.client.read_coils(1,1)
33
self.__validate(rq, lambda r: r.function_code < 0x80)
34
self.__validate(rr, lambda r: r.bits[0] == True)
36
def testReadWriteCoils(self):
37
rq = self.client.write_coils(1, [True]*8)
38
rr = self.client.read_coils(1,8)
39
self.__validate(rq, lambda r: r.function_code < 0x80)
40
self.__validate(rr, lambda r: r.bits == [True]*8)
42
def testReadWriteDiscreteRegisters(self):
43
rq = self.client.write_coils(1, [False]*8)
44
rr = self.client.read_discrete_inputs(1,8)
45
self.__validate(rq, lambda r: r.function_code < 0x80)
46
self.__validate(rr, lambda r: r.bits == [False]*8)
48
def testReadWriteHoldingRegisters(self):
49
rq = self.client.write_register(1, 10)
50
rr = self.client.read_holding_registers(1,1)
51
self.__validate(rq, lambda r: r.function_code < 0x80)
52
self.__validate(rr, lambda r: r.registers[0] == 10)
54
def testReadWriteInputRegisters(self):
55
rq = self.client.write_registers(1, [10]*8)
56
rr = self.client.read_input_registers(1,8)
57
self.__validate(rq, lambda r: r.function_code < 0x80)
58
self.__validate(rr, lambda r: r.registers == [10]*8)
60
def testReadWriteRegistersTogether(self):
65
'write_registers': [20]*8,
67
rq = self.client.readwrite_registers(**arguments)
68
rr = self.client.read_input_registers(1,8)
69
self.__validate(rq, lambda r: r.function_code < 0x80)
70
self.__validate(rr, lambda r: r.registers == [20]*8)
72
def __validate(self, result, test):
73
''' Validate the result whether it is a result or a deferred.
75
:param result: The result to __validate
76
:param callback: The test to __validate
78
if isinstance(result, Deferred):
79
deferred.callback(lambda : self.assertTrue(test(result)))
80
deferred.errback(lambda _: self.assertTrue(False))
81
else: self.assertTrue(test(result))