open62541 1.4.15
Open source implementation of OPC UA
Loading...
Searching...
No Matches
testHelper.h
Go to the documentation of this file.
1#ifndef TESTHELPER_H
2#define TESTHELPER_H
3#include <open62541/server.h>
4#include <open62541/types.h>
6
7UA_NodeId getTypeId(UA_UInt16 typeIndex, UA_Boolean isNamespaceZero, const UA_DataType* customTypes)
8{
9 const UA_DataType* types[2] = {&UA_TYPES[0], customTypes};
10 return types[!isNamespaceZero][typeIndex].typeId;
11}
12
13static void memberTypeMatching(const UA_DataTypeMember *m1,
14 const UA_DataTypeMember *m2,
15 const UA_DataType *generatedTypes,
16 const UA_DataType *customTypes)
17{
18 ck_assert(m1->isArray == m2->isArray);
19 ck_assert(UA_NodeId_equal(&m1->memberType->typeId, &m2->memberType->typeId));
20 ck_assert(m1->padding == m2->padding);
21 ck_assert(m1->isOptional == m2->isOptional);
22}
23
24void typesAreMatching(const UA_DataType *t1, const UA_DataType *t2, const UA_DataType* generatedTypes, const UA_DataType* customTypes)
25{
26 ck_assert(t1->typeKind == t2->typeKind);
28 {
29 ck_assert(
30 UA_NodeId_equal(&t1->binaryEncodingId, &t2->binaryEncodingId));
31 }
32 ck_assert(t1->membersSize == t2->membersSize);
33 ck_assert(t1->memSize == t2->memSize);
34 ck_assert(t1->overlayable == t2->overlayable);
35 ck_assert(t1->pointerFree == t2->pointerFree);
36
37 ck_assert(!strcmp(t1->typeName, t2->typeName));
38 size_t cnt =0;
39 UA_UInt32 mSize = t1->membersSize;
41 {
42 mSize--;
43 }
44 for(const UA_DataTypeMember* m = t1->members; m!=t1->members+mSize; m++)
45 {
46 memberTypeMatching(m, &t2->members[cnt], generatedTypes, customTypes);
47 cnt++;
48 }
49}
50
52{
54 UA_StatusCode status =
55 UA_Server_readNodeClass(server, id, &nodeClass);
56 ck_assert(UA_STATUSCODE_GOOD == status);
57 return nodeClass;
58}
59
60UA_Boolean hasReference(UA_Server* server, const UA_NodeId src, const UA_NodeId target, const UA_NodeId refType, UA_BrowseDirection dir)
61{
63 UA_BrowseDescription_init(&bd);
64 bd.referenceTypeId = refType;
65 bd.browseDirection = dir;
67 bd.nodeId = src;
68 UA_BrowseResult br = UA_Server_browse(server, 10, &bd);
69 ck_assert(br.statusCode == UA_STATUSCODE_GOOD);
70 ck_assert(br.referencesSize == 1);
71 UA_Boolean targetMatches = UA_NodeId_equal(&target, &br.references[0].nodeId.nodeId);
72 UA_BrowseResult_clear(&br);
73 return targetMatches;
74}
75
76
78{
80 UA_BrowseDescription_init(&bd);
83 bd.referenceTypeId = UA_NODEID_NUMERIC(0, UA_NS0ID_HASTYPEDEFINITION);
84 bd.nodeId = targetId;
86 UA_BrowseResult br = UA_Server_browse(s, 10, &bd);
87 if (br.statusCode != UA_STATUSCODE_GOOD || br.referencesSize != 1)
88 {
89 return UA_NODEID_NULL;
90 }
92 UA_BrowseResult_clear(&br);
93 return id;
94}
95
96static void setNamespaceIndexOfGeneratedStruct(UA_Server *server,
97 const char *namespaceUri,
98 UA_DataType *types,
99 size_t typesSize)
100{
102
103 for (UA_DataType *type = types; type != types + typesSize; type++)
104 {
105 type->typeId.namespaceIndex = nsIdx;
107 }
108}
109#endif
struct UA_Server UA_Server
Definition common.h:198
#define UA_NS0ID_HASTYPEDEFINITION
Definition nodeids.h:47
UA_BrowseResult UA_THREADSAFE UA_Server_browse(UA_Server *server, UA_UInt32 maxReferences, const UA_BrowseDescription *bd)
Browse the references of a particular node.
UA_UInt16 UA_THREADSAFE UA_Server_addNamespace(UA_Server *server, const char *name)
Add a new namespace to the server.
#define UA_STATUSCODE_GOOD
The operation succeeded.
Definition statuscodes.h:8
BrowseDescription.
UA_BrowseDirection browseDirection
UA_StatusCode statusCode
UA_ReferenceDescription * references
UA_Byte isArray
Definition types.h:818
const UA_DataType * memberType
Definition types.h:809
UA_Byte padding
Definition types.h:810
UA_Byte isOptional
Definition types.h:819
UA_UInt32 overlayable
Definition types.h:870
UA_UInt32 typeKind
Definition types.h:867
const char * typeName
Definition types.h:861
UA_UInt32 pointerFree
Definition types.h:868
UA_UInt32 memSize
Definition types.h:866
UA_NodeId typeId
Definition types.h:863
UA_DataTypeMember * members
Definition types.h:873
UA_UInt32 membersSize
Definition types.h:872
UA_NodeId binaryEncodingId
Definition types.h:864
UA_NodeId nodeId
Definition types.h:395
UA_UInt16 namespaceIndex
Definition types.h:278
UA_NodeClass getNodeClass(UA_Server *server, const UA_NodeId id)
Definition testHelper.h:51
UA_NodeId getTypeId(UA_UInt16 typeIndex, UA_Boolean isNamespaceZero, const UA_DataType *customTypes)
Definition testHelper.h:7
UA_NodeId getTypeDefinitionId(UA_Server *s, const UA_NodeId targetId)
Definition testHelper.h:77
UA_Boolean hasReference(UA_Server *server, const UA_NodeId src, const UA_NodeId target, const UA_NodeId refType, UA_BrowseDirection dir)
Definition testHelper.h:60
void typesAreMatching(const UA_DataType *t1, const UA_DataType *t2, const UA_DataType *generatedTypes, const UA_DataType *customTypes)
Definition testHelper.h:24
_UA_BEGIN_DECLS typedef bool UA_Boolean
This Source Code Form is subject to the terms of the Mozilla Public License, v.
Definition types.h:27
uint16_t UA_UInt16
Definition types.h:47
id namespaceUri
Definition types.h:441
UA_EXPORT const UA_NodeId UA_NODEID_NULL
return id
Definition types.h:341
uint32_t UA_UInt32
Definition types.h:57
@ UA_DATATYPEKIND_ENUM
Definition types.h:852
@ UA_DATATYPEKIND_UNION
Definition types.h:855
#define UA_FALSE
Definition types.h:29
uint32_t UA_StatusCode
Definition types.h:82
const UA_DataType * type
Definition types.h:626
UA_BrowseDirection
BrowseDirection.
@ UA_BROWSEDIRECTION_FORWARD
@ UA_BROWSERESULTMASK_ALL
@ UA_BROWSERESULTMASK_TYPEDEFINITION
UA_NodeClass
NodeClass.
@ UA_NODECLASS_UNSPECIFIED
UA_DataType UA_TYPES[388]