Skip to content
Snippets Groups Projects

Resolve L2SS-247 "2021 07 06 branched from master attribute testing"

Merged Resolve L2SS-247 "2021 07 06 branched from master attribute testing"
All threads resolved!
All threads resolved!
@@ -22,11 +22,12 @@ from devices.hardware_device import *
from tango.test_context import DeviceTestContext
from test import base
scalar_dims = (1,)
spectrum_dims = (4,)
image_dims = (3,2)
class TestAttributeTypes(base.TestCase):
current_item = None
counter = 0
class str_scalar_device(hardware_device):
scalar_R = attribute_wrapper(comms_annotation="str_scalar_R", datatype=str)
@@ -161,8 +162,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class str_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="str_spectrum_R", datatype=str, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="str_spectrum_RW", datatype=str, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="str_spectrum_R", datatype=str, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="str_spectrum_RW", datatype=str, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -172,8 +173,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class bool_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="bool_spectrum_R", datatype=numpy.bool_, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="bool_spectrum_RW", datatype=numpy.bool_, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="bool_spectrum_R", datatype=numpy.bool_, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="bool_spectrum_RW", datatype=numpy.bool_, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -183,8 +184,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class float32_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="float32_spectrum_R", datatype=numpy.float32, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="float32_spectrum_RW", datatype=numpy.float32, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="float32_spectrum_R", datatype=numpy.float32, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="float32_spectrum_RW", datatype=numpy.float32, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -194,8 +195,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class float64_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="float64_spectrum_R", datatype=numpy.float64, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="float64_spectrum_RW", datatype=numpy.float64, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="float64_spectrum_R", datatype=numpy.float64, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="float64_spectrum_RW", datatype=numpy.float64, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -205,8 +206,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class double_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="double_spectrum_R", datatype=numpy.double, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="double_spectrum_RW", datatype=numpy.double, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="double_spectrum_R", datatype=numpy.double, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="double_spectrum_RW", datatype=numpy.double, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -216,8 +217,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class uint8_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="uint8_spectrum_R", datatype=numpy.uint8, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="uint8_spectrum_RW", datatype=numpy.uint8, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="uint8_spectrum_R", datatype=numpy.uint8, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="uint8_spectrum_RW", datatype=numpy.uint8, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -227,8 +228,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class uint16_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="uint16_spectrum_R", datatype=numpy.uint16, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="uint16_spectrum_RW", datatype=numpy.uint16, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="uint16_spectrum_R", datatype=numpy.uint16, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="uint16_spectrum_RW", datatype=numpy.uint16, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -238,8 +239,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class uint32_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="uint32_spectrum_R", datatype=numpy.uint32, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="uint32_spectrum_RW", datatype=numpy.uint32, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="uint32_spectrum_R", datatype=numpy.uint32, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="uint32_spectrum_RW", datatype=numpy.uint32, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -249,8 +250,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class uint64_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="uint64_spectrum_R", datatype=numpy.uint64, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="uint64_spectrum_RW", datatype=numpy.uint64, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="uint64_spectrum_R", datatype=numpy.uint64, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="uint64_spectrum_RW", datatype=numpy.uint64, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -260,8 +261,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class int16_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="int16_spectrum_R", datatype=numpy.int16, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="int16_spectrum_RW", datatype=numpy.int16, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="int16_spectrum_R", datatype=numpy.int16, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="int16_spectrum_RW", datatype=numpy.int16, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -271,8 +272,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class int32_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="int32_spectrum_R", datatype=numpy.int32, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="int32_spectrum_RW", datatype=numpy.int32, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="int32_spectrum_R", datatype=numpy.int32, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="int32_spectrum_RW", datatype=numpy.int32, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -282,8 +283,8 @@ class TestAttributeTypes(base.TestCase):
self.test_client.start()
class int64_spectrum_device(hardware_device):
spectrum_R = attribute_wrapper(comms_annotation="int64_spectrum_R", datatype=numpy.int64, dims=(4,))
spectrum_RW = attribute_wrapper(comms_annotation="int64_spectrum_RW", datatype=numpy.int64, access=AttrWriteType.READ_WRITE, dims=(4,))
spectrum_R = attribute_wrapper(comms_annotation="int64_spectrum_R", datatype=numpy.int64, dims=spectrum_dims)
spectrum_RW = attribute_wrapper(comms_annotation="int64_spectrum_RW", datatype=numpy.int64, access=AttrWriteType.READ_WRITE, dims=spectrum_dims)
def configure_for_initialise(self):
self.set_state(DevState.INIT)
@@ -436,29 +437,25 @@ class TestAttributeTypes(base.TestCase):
expected = numpy.zeros((1,), dtype=dtype)
val = proxy.scalar_RW
elif test_type == "spectrum":
expected = numpy.zeros((4,), dtype=dtype)
expected = numpy.zeros(spectrum_dims, dtype=dtype)
val = proxy.spectrum_R
elif test_type == "image":
expected = numpy.zeros((3,2), dtype=dtype)
expected = numpy.zeros(image_dims, dtype=dtype)
val = numpy.array(proxy.image_R) #is needed for STR since they act differently
# cant use all() for 2d arrays so instead compare the dimensions and then flatten to 2d
self.assertEqual(val.shape, expected.shape, "image R array dimensions got mangled. Expected {}, got {}".format(expected.shape, val.shape))
self.assertEqual(val.shape, expected.shape, "image R array dimensions got mangled. Expected {}, got {}".format(expected.shape, val.shape))
val.reshape(-1)
else:
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
try:
if test_type == "scalar":
comparison = expected == val
self.assertTrue(comparison, "❌ Value could not be read or was not what was expected. Expected: {}, got {}".format(expected, val))
else:
comparison = expected == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "Value could not be read or was not what was expected. Expected: {}, got {}".format(expected, val))
except:
pass
try:
self.assertEqual(expected, val, "Value could not be read or was not what was expected. Expected: {}, got {}".format(test_type, val))
except:
pass
self.assertTrue(equal_arrays, "❌ Value could not be read or was not what was expected. Expected: {}, got {}".format(expected, val))
print("✅ Test passed! Managed to read R attribute value. got: {}".format(val))
@@ -469,10 +466,6 @@ class TestAttributeTypes(base.TestCase):
#initialise
proxy.initialise()
proxy.on()
#
# if dtype is str or dtype is numpy.str_:
# val = '1'
# else:
if test_type == "scalar":
@@ -485,111 +478,134 @@ class TestAttributeTypes(base.TestCase):
if dtype is str or dtype is numpy.str_:
val = ['1','1','1','1']
else:
val = numpy.full((4,), dtype=dtype, fill_value=1)
val = numpy.full(spectrum_dims, dtype=dtype, fill_value=1)
print(val)
proxy.spectrum_RW = val
elif test_type == "image":
if dtype is str or dtype is numpy.str_:
val = [['1','1'],['1','1'],['1','1']]
else:
val = numpy.full((3,2), dtype=dtype, fill_value=1)
val = numpy.full(image_dims, dtype=dtype, fill_value=1)
proxy.image_RW = val
else:
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
self.assertEqual(1,2, "❌ {} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
# can't really test anything here except that the writing didnt cause an error.
# reading back happens in readback_test
print("✅ Test passed! Managed to write: ".format(val))
def read_RW_test(self, dev, dtype, test_type):
'''Test device'''
with DeviceTestContext(dev, process=True) as proxy:
#initialise
proxy.initialise()
proxy.on()
if test_type == "scalar":
expected = numpy.zeros((1,), dtype=dtype)
val = proxy.scalar_RW
elif test_type == "spectrum":
expected = numpy.zeros((4,), dtype=dtype)
val = proxy.spectrum_RW
elif test_type == "image":
expected = numpy.zeros((3,2), dtype=dtype)
val = numpy.array(proxy.image_RW) #is needed for STR since they act differently
# cant use all() for 2d arrays so instead compare the dimensions and then flatten to 2d
self.assertEqual(val.shape, expected.shape, "image R array dimensions got mangled. Expected {}, got {}".format(expected.shape, val.shape))
val.reshape(-1)
else:
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
try:
with DeviceTestContext(dev, process=True) as proxy:
#initialise
proxy.initialise()
proxy.on()
if test_type == "scalar":
expected = numpy.zeros((1,), dtype=dtype)
val = proxy.scalar_RW
elif test_type == "spectrum":
expected = numpy.zeros(spectrum_dims, dtype=dtype)
val = proxy.spectrum_RW
elif test_type == "image":
expected = numpy.zeros(image_dims, dtype=dtype)
val = numpy.array(proxy.image_RW) #is needed for STR since they act differently
# cant use all() for 2d arrays so instead compare the dimensions and then flatten to 2d
self.assertEqual(val.shape, expected.shape, "❌ image R array dimensions got mangled. Expected {}, got {}".format(expected.shape, val.shape))
val.reshape(-1)
else:
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
try:
comparison = expected == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "Value could not be handled by the atrribute_wrappers internal RW storer")
except:
pass
if test_type != "scalar":
# spectrums and the now flattened images can be compared with .all()
comparison = expected == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "❌ Value could not be handled by the atrribute_wrappers internal RW storer")
else:
comparison = expected == val
self.assertTrue(comparison, "❌ Value could not be handled by the atrribute_wrappers internal RW storer")
print("✅ Test passed! Managed to read internal RW value. got: {}".format(val))
print("✅ Test passed! Managed to read internal RW value. got: {}".format(val))
except Exception as e:
info = "Test failure in {} {} read RW test. Expected: {}, got {}".format(test_type, dtype, expected, val)
raise Exception(info) from e
def readback_test(self, dev, dtype, test_type):
'''Test device'''
with DeviceTestContext(dev, process=True) as proxy:
try:
with DeviceTestContext(dev, process=True) as proxy:
#initialise
proxy.initialise()
proxy.on()
if test_type == "scalar":
if dtype is str or dtype is numpy.str_:
val = '1'
else:
val = dtype(1)
proxy.scalar_RW = val
result_R = proxy.scalar_R
result_RW = proxy.scalar_RW
elif test_type == "spectrum":
if dtype is str or dtype is numpy.str_:
val = ['1','1','1','1']
else:
val = numpy.full(spectrum_dims, dtype=dtype, fill_value=1)
proxy.spectrum_RW = val
result_R = proxy.spectrum_R
result_RW = proxy.spectrum_RW
elif test_type == "image":
if dtype is str or dtype is numpy.str_:
val = [['1','1'],['1','1'],['1','1']]
else:
val = numpy.full(image_dims, dtype=dtype, fill_value=1)
# info += " write value: {}".format(val)
proxy.image_RW = val
result_R = proxy.image_R
result_RW = proxy.image_RW
if dtype != str:
self.assertEqual(result_R.shape, image_dims, "not the correct dimensions")
result_R = result_R.reshape(-1)
result_RW = result_RW.reshape(-1)
val = val.reshape(-1)
#initialise
proxy.initialise()
proxy.on()
if test_type == "scalar":
if dtype is str or dtype is numpy.str_:
val = '1'
else:
val = dtype(1)
proxy.scalar_RW = val
result_R = proxy.scalar_R
result_RW = proxy.scalar_RW
elif test_type == "spectrum":
if dtype is str or dtype is numpy.str_:
val = ['1','1','1','1']
# if the test isn't scalar/spectrum or image its wrong
self.assertEqual(1,2, "❌ {} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
if test_type == "scalar":
comparison = result_RW == val
self.assertTrue(comparison, "❌ Value could not be handled by the atrribute_wrappers internal RW storer. attempted to write: {}".format(val))
comparison = result_R == val
self.assertTrue(comparison, "❌ value in the clients R attribute not equal to what was written. read: {}, wrote {}".format(result_R, val))
elif dtype != str:
comparison = result_RW == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "❌ Value could not be handled by the atrribute_wrappers internal RW storer. attempted to write: {}".format(val))
comparison = result_R == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "❌ value in the clients R attribute not equal to what was written. read: {}, wrote {}".format(result_R, val))
else:
val = numpy.full((4,), dtype=dtype, fill_value=1)
proxy.spectrum_RW = val
result_R = proxy.spectrum_R
result_RW = proxy.spectrum_RW
elif test_type == "image":
if dtype is str or dtype is numpy.str_:
val = [['1','1'],['1','1'],['1','1']]
else:
val = numpy.full((3,2), dtype=dtype, fill_value=1)
proxy.image_RW = val
result_R = proxy.image_R
result_RW = proxy.image_RW
if test_type == "image":
self.assertEqual(len(result_RW)*len(result_RW[0]), 6, "array dimensions do not match the expected dimensions. expected {}, got: {}".format(val, len(result_RW) * len(result_RW[0])))
self.assertEqual(len(result_RW) * len(result_RW[0]), 6,"array dimensions do not match the expected dimensions. expected {}, got: {}".format(val, len(result_R) * len([0])))
else:
self.assertEqual(len(result_RW), 4,"array dimensions do not match the expected dimensions. expected {}, got: {}".format(4, len(result_RW)))
self.assertEqual(len(result_R), 4, "array dimensions do not match the expected dimensions. expected {}, got: {}".format(4, len(result_R)))
# cant use all() for 2d arrays so instead compare the dimensions and then flatten to 2d
try:
self.assertEqual(result_R.shape, (3,2), "image R array dimensions got mangled. Expected (2,3), got {}".format(result_R.shape))
self.assertEqual(result_RW.shape, (3, 2), "image RW array dimensions got mangled. Expected (2,3), got {}".format(result_RW.shape))
except:
pass
else:
self.assertEqual(1,2, "{} is not a valid test_type. please use either scalar, spectrum or image".format(test_type))
try:
comparison = result_RW == val
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "Value could not be handled by the atrribute_wrappers internal RW storer")
except:
pass
try:
comparison = result_R == result_RW
equal_arrays = comparison.all()
self.assertTrue(equal_arrays, "written value not present in clients R attribute")
except:
pass
print("✅ Test passed! Managed write and read back a value: {}".format(val))
print("✅ Test passed! Managed write and read back a value: {}".format(val))
except Exception as e:
info = "Test failure in {} {} readback test \n\tW: {} \n\tRW: {} \n\tR: {}".format(test_type, dtype, val, result_RW, result_R)
raise Exception(info) from e
"""
@@ -710,8 +726,7 @@ class TestAttributeTypes(base.TestCase):
def test_image_W(self):
for attribute_type_test in self.attribute_type_tests:
self.write_RW_test(attribute_type_test['image'],
attribute_type_test['type'], 'image')
self.write_RW_test(attribute_type_test['image'], attribute_type_test['type'], 'image')
def test_image_readback(self):
for attribute_type_test in self.attribute_type_tests:
Loading