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_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 init(self, shelf_file=None):
await self.iserver.init(shelf_file)
# setup some expected values
await self.set_application_uri(self._application_uri)
sa_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerArray))
await sa_node.set_value([self._application_uri])
status_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus))
build_node = self.get_node(ua.NodeId(ua.ObjectIds.Server_ServerStatus_BuildInfo))
status = ua.ServerStatusDataType()
status.BuildInfo.ProductUri = self.product_uri
status.BuildInfo.ManufacturerName = self.manufacturer_name
status.BuildInfo.ProductName = self.name
status.BuildInfo.SoftwareVersion = "1.0pre"
status.BuildInfo.BuildNumber = "0"
status.BuildInfo.BuildDate = datetime.now()
status.SecondsTillShutdown = 0
await status_node.set_value(status)
await build_node.set_value(status.BuildInfo)
def extensionobject_to_binary(obj):
"""
Convert Python object to binary-coded ExtensionObject.
If obj is None, convert to empty ExtensionObject (TypeId=0, no Body).
Returns a binary string
"""
if isinstance(obj, ua.ExtensionObject):
return struct_to_binary(obj)
if obj is None:
type_id = ua.NodeId()
encoding = 0
body = None
else:
type_id = ua.extension_object_typeids[obj.__class__.__name__]
encoding = 0x01
body = struct_to_binary(obj)
packet = [
nodeid_to_binary(type_id),
Primitives.Byte.pack(encoding),
]
if body:
packet.append(Primitives.Bytes.pack(body))
return b''.join(packet)
def __init__(self, server, nodeid):
self.server = server
self.nodeid = None
if isinstance(nodeid, Node):
self.nodeid = nodeid.nodeid
elif isinstance(nodeid, ua.NodeId):
self.nodeid = nodeid
elif type(nodeid) in (str, bytes):
self.nodeid = ua.NodeId.from_string(nodeid)
elif isinstance(nodeid, int):
self.nodeid = ua.NodeId(nodeid, 0)
else:
raise ua.UaError(f"argument to node must be a NodeId object or a string"
f" defining a nodeid found {nodeid} of type {type(nodeid)}")
self.basenodeid = None
def __init__(self, sourcenode=None, message=None, severity=1):
super(AuditUrlMismatchEvent, self).__init__(sourcenode, message, severity)
self.EventType = ua.NodeId(ua.ObjectIds.AuditUrlMismatchEventType)
self.add_property('EndpointUrl', None, ua.VariantType.String)
async def start(self):
self.logger.info('starting internal server')
for edp in self.endpoints:
self._known_servers[edp.Server.ApplicationUri] = ServerDesc(edp.Server)
await Node(self.isession, ua.NodeId(ua.ObjectIds.Server_ServerStatus_State)).write_value(ua.ServerState.Running,
ua.VariantType.Int32)
await Node(self.isession, ua.NodeId(ua.ObjectIds.Server_ServerStatus_StartTime)).write_value(datetime.utcnow())
if not self.disabled_clock:
self._set_current_time()