mirror of
https://github.com/open62541/open62541.git
synced 2025-06-03 04:00:21 +00:00
fix(server) add missing HasInterface reference (#4681)
If a BaseObjectType object with a HasInterface reference is instantiated from a model, the HasInterface reference is missing.
This commit is contained in:
parent
da71b04979
commit
331a7e3bb5
@ -679,6 +679,7 @@ copyChild(UA_Server *server, UA_Session *session,
|
||||
} else {
|
||||
UA_ReferenceTypeSet_init(&reftypes_skipped);
|
||||
}
|
||||
reftypes_skipped = UA_ReferenceTypeSet_union(reftypes_skipped, UA_REFTYPESET(UA_REFERENCETYPEINDEX_HASINTERFACE));
|
||||
UA_Node_deleteReferencesSubset(node, &reftypes_skipped);
|
||||
|
||||
/* Add the node to the nodestore */
|
||||
|
@ -141,6 +141,57 @@ START_TEST(check_interface_instantiation) {
|
||||
ck_assert(found == true);
|
||||
|
||||
UA_BrowseResult_clear(&br);
|
||||
|
||||
UA_RelativePathElement_init(&el);
|
||||
el.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASCOMPONENT);
|
||||
el.targetName = UA_QUALIFIEDNAME(2, (char *)"BaseObjectWithInterface");
|
||||
|
||||
bp.relativePath.elements = ⪙
|
||||
|
||||
bpr = UA_Server_translateBrowsePathToNodeIds(server, &bp);
|
||||
ck_assert_int_eq(bpr.statusCode, UA_STATUSCODE_GOOD);
|
||||
ck_assert_int_eq(bpr.targetsSize, 1);
|
||||
|
||||
const UA_NodeId baseObjectWithInterfaceId = bpr.targets->targetId.nodeId;
|
||||
UA_BrowsePathResult_clear(&bpr);
|
||||
|
||||
bd.nodeId = baseObjectWithInterfaceId;
|
||||
bd.resultMask = UA_BROWSERESULTMASK_ALL;
|
||||
bd.browseDirection = UA_BROWSEDIRECTION_FORWARD;
|
||||
bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_REFERENCES);
|
||||
bd.includeSubtypes = UA_TRUE;
|
||||
bd.nodeClassMask = 0xFFFFFFFF;
|
||||
|
||||
br = UA_Server_browse(server, 1000, &bd);
|
||||
ck_assert_int_eq(br.statusCode, UA_STATUSCODE_GOOD);
|
||||
ck_assert_int_gt(br.referencesSize, 0);
|
||||
|
||||
found = false;
|
||||
for (size_t i = 0; i < br.referencesSize; ++i) {
|
||||
UA_NodeId expectedRef = UA_NODEID_NUMERIC(0, UA_NS0ID_HASINTERFACE);
|
||||
UA_NodeId expectedId = UA_NODEID_NUMERIC(2, 1005);
|
||||
if (UA_NodeId_equal(&br.references[i].referenceTypeId, &expectedRef) &&
|
||||
UA_NodeId_equal(&br.references[i].nodeId.nodeId, &expectedId))
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ck_assert(found == true);
|
||||
|
||||
found = false;
|
||||
for (size_t i = 0; i < br.referencesSize; ++i) {
|
||||
UA_NodeId expectedRef = UA_NODEID_NUMERIC(0, UA_NS0ID_HASPROPERTY);
|
||||
UA_QualifiedName expectedName = UA_QUALIFIEDNAME(2, (char *)"MyOtherInterfaceProperty");
|
||||
if (UA_NodeId_equal(&br.references[i].referenceTypeId, &expectedRef) &&
|
||||
UA_QualifiedName_equal(&br.references[i].browseName, &expectedName))
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
ck_assert(found == true);
|
||||
|
||||
} END_TEST
|
||||
|
||||
int main(void) {
|
||||
|
@ -24,23 +24,24 @@
|
||||
</Aliases>
|
||||
<Extensions>
|
||||
<Extension>
|
||||
<ua:ModelInfo Tool="UaModeler" Hash="QC0H4teuLnB95dz5UaKEmw==" Version="1.6.5"/>
|
||||
<ua:ModelInfo Tool="UaModeler" Hash="EnbWjmGunr/glm0Z6NGB4w==" Version="1.6.5"/>
|
||||
</Extension>
|
||||
</Extensions>
|
||||
<UAObjectType NodeId="ns=1;i=1005" BrowseName="1:MyOtherInterface">
|
||||
<DisplayName>MyOtherInterface</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasInterface" IsForward="false">ns=1;i=1004</Reference>
|
||||
<Reference ReferenceType="HasSubtype" IsForward="false">i=17602</Reference>
|
||||
<Reference ReferenceType="HasProperty">ns=1;i=6010</Reference>
|
||||
<Reference ReferenceType="HasInterface" IsForward="false">ns=1;i=1004</Reference>
|
||||
<Reference ReferenceType="HasInterface" IsForward="false">ns=1;i=5003</Reference>
|
||||
</References>
|
||||
</UAObjectType>
|
||||
<UAVariable DataType="Double" ParentNodeId="ns=1;i=1005" NodeId="ns=1;i=6010" BrowseName="1:MyOtherInterfaceProperty" AccessLevel="3">
|
||||
<DisplayName>MyOtherInterfaceProperty</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
||||
<Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=1005</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
||||
</References>
|
||||
</UAVariable>
|
||||
<UAObjectType NodeId="ns=1;i=1002" BrowseName="1:MyTestInterface">
|
||||
@ -54,9 +55,9 @@
|
||||
<UAVariable DataType="Double" ParentNodeId="ns=1;i=1002" NodeId="ns=1;i=6001" BrowseName="1:Interface1Property" AccessLevel="3">
|
||||
<DisplayName>Interface1Property</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=1002</Reference>
|
||||
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
||||
<Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=1002</Reference>
|
||||
</References>
|
||||
</UAVariable>
|
||||
<UAObjectType IsAbstract="true" NodeId="ns=1;i=1003" BrowseName="1:MyBaseObjectType">
|
||||
@ -78,17 +79,27 @@
|
||||
<DisplayName>MyTestObjectProperty</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
||||
<Reference ReferenceType="HasProperty" IsForward="false">ns=1;i=1004</Reference>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=68</Reference>
|
||||
</References>
|
||||
</UAVariable>
|
||||
<UAObjectType NodeId="ns=1;i=1006" BrowseName="1:TopLevelObjectType">
|
||||
<DisplayName>TopLevelObjectType</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasComponent">ns=1;i=5003</Reference>
|
||||
<Reference ReferenceType="HasComponent">ns=1;i=5002</Reference>
|
||||
<Reference ReferenceType="HasSubtype" IsForward="false">i=58</Reference>
|
||||
</References>
|
||||
</UAObjectType>
|
||||
<UAObject ParentNodeId="ns=1;i=1006" NodeId="ns=1;i=5003" BrowseName="1:BaseObjectWithInterface">
|
||||
<DisplayName>BaseObjectWithInterface</DisplayName>
|
||||
<References>
|
||||
<Reference ReferenceType="HasTypeDefinition">i=58</Reference>
|
||||
<Reference ReferenceType="HasModellingRule">i=78</Reference>
|
||||
<Reference ReferenceType="HasComponent" IsForward="false">ns=1;i=1006</Reference>
|
||||
<Reference ReferenceType="HasInterface">ns=1;i=1005</Reference>
|
||||
</References>
|
||||
</UAObject>
|
||||
<UAObject ParentNodeId="ns=1;i=1006" NodeId="ns=1;i=5002" BrowseName="1:ObjectWithInterfaces">
|
||||
<DisplayName>ObjectWithInterfaces</DisplayName>
|
||||
<References>
|
||||
|
Loading…
Reference in New Issue
Block a user