Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
async def test_basic256_encrypt_fail(srv_crypto_all_certs):
# FIXME: how to make it fail???
_, cert = srv_crypto_all_certs
clt = Client(uri_crypto)
with pytest.raises(ua.UaError):
await clt.set_security(
security_policies.SecurityPolicyBasic256Sha256,
f"{EXAMPLE_PATH}certificate-example.der",
f"{EXAMPLE_PATH}private-key-example.pem",
None,
None,
mode=ua.MessageSecurityMode.None_
)
async def test_variable_with_datatype(opc):
v1 = await opc.opc.nodes.objects.add_variable(
3, 'VariableEnumType1', ua.ApplicationType.ClientAndServer, datatype=ua.NodeId(ua.ObjectIds.ApplicationType)
)
tp1 = await v1.read_data_type()
assert tp1 == ua.NodeId(ua.ObjectIds.ApplicationType)
v2 = await opc.opc.nodes.objects.add_variable(
3, 'VariableEnumType2', ua.ApplicationType.ClientAndServer, datatype=ua.NodeId(ua.ObjectIds.ApplicationType)
)
tp2 = await v2.read_data_type()
assert tp2 == ua.NodeId(ua.ObjectIds.ApplicationType)
async def test_data_type_dict_create_data_type(srv):
type_name = 'CustomizedStruct2'
created_type = await srv.dict_builder.create_data_type(type_name)
assert isinstance(created_type, StructNode)
# Test data type node
type_node = srv.srv.get_node(created_type.data_type)
assert await type_node.get_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await type_node.get_node_class() == ua.NodeClass.DataType
assert (await type_node.get_parent()).nodeid == ua.NodeId(ua.ObjectIds.Structure, 0)
assert ua.NodeId(ua.ObjectIds.HasSubtype, 0) == (await type_node.get_references(refs=ua.ObjectIds.HasSubtype))[0].ReferenceTypeId
assert await type_node.get_display_name() == ua.LocalizedText(type_name)
# Test description node
n = srv.srv.get_node(srv.dict_builder.dict_id)
desc_node = await n.get_child(f"{srv.dict_builder._idx}:{type_name}")
assert await desc_node.get_browse_name() == ua.QualifiedName(type_name, srv.idx)
assert await desc_node.get_node_class() == ua.NodeClass.Variable
assert (await desc_node.get_parent()).nodeid == srv.dict_builder.dict_id
assert ua.NodeId(ua.ObjectIds.HasComponent, 0) == (await desc_node.get_references(refs=ua.ObjectIds.HasComponent))[0].ReferenceTypeId
assert await desc_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeDescriptionType, 0)
assert await desc_node.get_display_name() == ua.LocalizedText(type_name)
assert await desc_node.get_data_type() == ua.NodeId(ua.ObjectIds.String)
assert await desc_node.get_value() == type_name
assert await desc_node.get_value_rank() == -1
assert await desc_node.get_node_class() == ua.NodeClass.Variable
assert (await desc_node.get_parent()).nodeid == srv.dict_builder.dict_id
assert ua.NodeId(ua.ObjectIds.HasComponent, 0) == (await desc_node.get_references(refs=ua.ObjectIds.HasComponent))[0].ReferenceTypeId
assert await desc_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeDescriptionType, 0)
assert await desc_node.get_display_name() == ua.LocalizedText(type_name)
assert await desc_node.get_data_type() == ua.NodeId(ua.ObjectIds.String)
assert await desc_node.get_value() == type_name
assert await desc_node.get_value_rank() == -1
# Test object node
obj_node = (await type_node.get_children(refs=ua.ObjectIds.HasEncoding))[0]
assert await obj_node.get_browse_name() == ua.QualifiedName('Default Binary', 0)
assert await obj_node.get_node_class() == ua.NodeClass.Object
assert (await obj_node.get_references(refs=ua.ObjectIds.HasEncoding))[0].NodeId == type_node.nodeid
assert ua.NodeId(ua.ObjectIds.HasEncoding, 0) == (await obj_node.get_references(refs=ua.ObjectIds.HasEncoding))[0].ReferenceTypeId
assert await obj_node.get_type_definition() == ua.NodeId(ua.ObjectIds.DataTypeEncodingType, 0)
assert await obj_node.get_display_name() == ua.LocalizedText('Default Binary')
assert len(await obj_node.get_event_notifier()) == 0
# Test links, three were tested above
struct_node = srv.srv.get_node(ua.NodeId(ua.ObjectIds.Structure, 0))
struct_children = await struct_node.get_children(refs=ua.ObjectIds.HasSubtype)
assert type_node in struct_children
dict_node = srv.srv.get_node(srv.dict_builder.dict_id)
dict_children = await dict_node.get_children(refs=ua.ObjectIds.HasComponent)
assert desc_node in dict_children
assert obj_node in await type_node.get_children(ua.ObjectIds.HasEncoding)
assert desc_node in await obj_node.get_children(refs=ua.ObjectIds.HasDescription)
assert obj_node.nodeid == (await desc_node.get_references(refs=ua.ObjectIds.HasDescription, direction=ua.BrowseDirection.Inverse))[0].NodeId
def test_root(self):
root = self.opc.get_root_node()
self.assertEqual(ua.QualifiedName('Root', 0), root.get_browse_name())
self.assertEqual(ua.LocalizedText('Root'), root.get_display_name())
nid = ua.NodeId(84, 0)
self.assertEqual(nid, root.nodeid)
async def test_xml_localizedtext_with_locale(opc, tmpdir):
o = await opc.opc.nodes.objects.add_variable(2, "xmlltext", ua.LocalizedText("mytext","en-US"))
await _test_xml_var_type(opc, tmpdir, o, "localized_text")
async def test_xml_ext_obj_array(opc, tmpdir):
arg = ua.Argument()
arg.DataType = ua.NodeId(ua.ObjectIds.Float)
arg.Description = ua.LocalizedText("Nice description")
arg.ArrayDimensions = [1, 2, 3]
arg.Name = "MyArg"
arg2 = ua.Argument()
arg2.DataType = ua.NodeId(ua.ObjectIds.Int32)
arg2.Description = ua.LocalizedText("Nice description2")
arg2.ArrayDimensions = [4, 5, 6]
arg2.Name = "MyArg2"
args = [arg, arg2]
node = await opc.opc.nodes.objects.add_variable(2, "xmlexportobj2", args)
node2 = await _test_xml_var_type(opc, tmpdir, node, "ext_obj_array", test_equality=False)
read_args = await node2.read_value()
for i, arg in enumerate(read_args):
assert args[i].Name == read_args[i].Name
assert args[i].ArrayDimensions == read_args[i].ArrayDimensions
assert args[i].Description == read_args[i].Description
assert args[i].DataType == read_args[i].DataType
async def test_enum(opc):
# create enum type
enums = await opc.opc.nodes.root.get_child(["0:Types", "0:DataTypes", "0:BaseDataType", "0:Enumeration"])
myenum_type = await enums.add_data_type(0, "MyEnum")
es = await myenum_type.add_variable(
0, "EnumStrings", [ua.LocalizedText("String0"), ua.LocalizedText("String1"), ua.LocalizedText("String2")],
ua.VariantType.LocalizedText
)
# es.write_value_rank(1)
# instantiate
o = opc.opc.nodes.objects
myvar = await o.add_variable(2, "MyEnumVar", ua.LocalizedText("String1"), datatype=myenum_type.nodeid)
# myvar.set_writable(True)
# tests
assert myenum_type.nodeid == await myvar.read_data_type()
await myvar.write_value(ua.LocalizedText("String2"))
def test_text():
t1 = ua.LocalizedText('Root')
t2 = ua.LocalizedText('Root')
t3 = ua.LocalizedText('root')
assert t1 == t2
assert t1 != t3
t4 = struct_from_binary(ua.LocalizedText, ua.utils.Buffer(struct_to_binary(t1)))
assert t1 == t4
def test_data_type_to_variant_type(self):
test_data = {
ua.ObjectIds.Boolean: ua.VariantType.Boolean,
ua.ObjectIds.Byte: ua.VariantType.Byte,
ua.ObjectIds.String: ua.VariantType.String,
ua.ObjectIds.Int32: ua.VariantType.Int32,
ua.ObjectIds.UInt32: ua.VariantType.UInt32,
ua.ObjectIds.NodeId: ua.VariantType.NodeId,
ua.ObjectIds.LocalizedText: ua.VariantType.LocalizedText,
ua.ObjectIds.Structure: ua.VariantType.ExtensionObject,
ua.ObjectIds.EnumValueType: ua.VariantType.ExtensionObject,
ua.ObjectIds.Enumeration: ua.VariantType.Int32, # enumeration
ua.ObjectIds.AttributeWriteMask: ua.VariantType.UInt32,
ua.ObjectIds.AxisScaleEnumeration: ua.VariantType.Int32 # enumeration
}
for dt, vdt in test_data.items():
self.assertEqual(ua_utils.data_type_to_variant_type(self.opc.get_node(ua.NodeId(dt))), vdt)