Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Semantic data 6.1.3 #543

Merged
merged 4 commits into from
Mar 2, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions SemanticData/BuildingErrorsHandling/BuildErrors.cs
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ public partial class BuildError
Identifier = "P6-0503021400",
Descriptor = "The syntax of the QualifiedName is not valid." }; } }
/// <summary>
/// Error: P3-0403040000; Focus: Diagnostic; The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist.
/// Error: P3-0403040000; Focus: NodeClass; The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist.
/// </summary>
/// <value>An instance of <see cref="BuildError"/> describing the error P3-0403040000.</value>
public static BuildError DanglingReferenceTarget { get { return new BuildError()
{ Focus = Focus.Diagnostic,
{ Focus = Focus.NodeClass,
Identifier = "P3-0403040000",
Descriptor = "The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist." }; } }
/// <summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@
<ns1:Name>QualifiedNameInvalidSyntax</ns1:Name>
</ns1:NamedBuildError>
<ns1:NamedBuildError>
<ns1:Focus>Diagnostic</ns1:Focus>
<ns1:Focus>NodeClass</ns1:Focus>
<ns1:Identifier>P3-0403040000</ns1:Identifier>
<ns1:Descriptor>The reference target doesn't exist. OPC UA does not require that the TargetNode exists, thus References may point to a Node that does not exist.</ns1:Descriptor>
<ns1:Name>DanglingReferenceTarget</ns1:Name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
using UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers;
using UAOOI.SemanticData.UANodeSetValidation.XML;

namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest
namespace UAOOI.SemanticData.UANodeSetValidation
{
[TestClass]
public class AddressSpaceContextUnitTest
Expand Down Expand Up @@ -225,9 +225,9 @@ public void GetMyReferencesTest()
IEnumerable<UAReferenceContext> myReferences = ((IAddressSpaceBuildContext)asp.AddressSpaceContext).GetMyReferences(uaObjectType);
Assert.AreEqual<int>(1, myReferences.Count<UAReferenceContext>());
List<UAReferenceContext> _listOfMyReferences = myReferences.ToList<UAReferenceContext>();
Assert.AreEqual<string>("buildDate", _listOfMyReferences[0].TargetNode.BrowseName.Name);
Assert.AreEqual<string>("buildDate", _listOfMyReferences[0].ParentNode.BrowseName.Name);
Assert.AreEqual<string>("VehicleType", _listOfMyReferences[0].SourceNode.BrowseName.Name);
Assert.AreEqual<string>("buildDate", _listOfMyReferences[0].TargetNode.UANode.BrowseNameQualifiedName.Name);
Assert.AreEqual<string>("buildDate", _listOfMyReferences[0].ParentNode.UANode.BrowseNameQualifiedName.Name);
Assert.AreEqual<string>("VehicleType", _listOfMyReferences[0].SourceNode.UANode.BrowseNameQualifiedName.Name);
Assert.AreEqual<ReferenceKindEnum>(ReferenceKindEnum.HasProperty, _listOfMyReferences[0].ReferenceKind);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
//___________________________________________________________________________________
//
// Copyright (C) 2019, Mariusz Postol LODZ POLAND.
// Copyright (C) 2021, Mariusz Postol LODZ POLAND.
//
// To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI
//___________________________________________________________________________________

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Moq;
using System;
using UAOOI.SemanticData.BuildingErrorsHandling;
using UAOOI.SemanticData.UANodeSetValidation.DataSerialization;
using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel;
using UAOOI.SemanticData.UANodeSetValidation.XML;

Expand All @@ -25,16 +30,17 @@ public static UANodeSet CreateNodeSetModel()
};
return _ns;
}

public static UAObject CreateUAObject()
{
return new UAObject()
{
NodeId = "ns=1;i=1",
BrowseName = "1:NewUAObject",
DisplayName = new LocalizedText[] { new LocalizedText() { Value = "New UA Object" } },
DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } },
References = new Reference[]
{
new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = ObjectTypeIds.BaseObjectType.ToString() },
new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), IsForward = true, Value = ObjectTypeIds.BaseObjectType.ToString() },
new Reference() { ReferenceType = ReferenceTypeIds.Organizes.ToString(), IsForward= false, Value = "i=85" }
},
// UAInstance
Expand All @@ -43,17 +49,29 @@ public static UAObject CreateUAObject()
EventNotifier = 0x01,
};
}

public static UAReferenceType CreateUAReferenceType()
{
return new UAReferenceType()
{
NodeId = "ns=1;i=985",
BrowseName = "1:FlowTo",
DisplayName = new LocalizedText[] { new LocalizedText() { Value = "FlowTo" } },
DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "FlowTo" } },
Symmetric = true,
References = new Reference[] { new Reference() { ReferenceType = "HasSubtype", IsForward = false, Value = "i=32" } }
};
}

internal static UANodeType Recalculate<UANodeType>(this UANodeType node)
where UANodeType : UANode
{
Mock<IUAModelContext> modelMock = new Mock<IUAModelContext>();
modelMock.Setup(x => x.ImportNodeId(It.IsAny<string>(), It.IsAny<Action<TraceMessage>>())).Returns<string, Action<TraceMessage>>((q, w) => NodeId.Parse(q));
modelMock.Setup(x => x.ImportBrowseName(It.IsAny<string>(), It.IsAny<string>(), It.IsAny<Action<TraceMessage>>())).Returns<string, string, Action<TraceMessage>>((a, b, c) => (QualifiedName.Parse(a), NodeId.Parse(b)));
modelMock.Setup(x => x.ModelUri);
UAObject toTest = TestData.CreateUAObject();
node.RecalculateNodeIds(modelMock.Object, XML => Assert.Fail());
return node;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
using UAOOI.SemanticData.InformationModelFactory;
using UAOOI.SemanticData.UANodeSetValidation.InformationModelFactory;

namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest
namespace UAOOI.SemanticData.UANodeSetValidation
{

[TestClass]
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
//___________________________________________________________________________________
//
// Copyright (C) 2019, Mariusz Postol LODZ POLAND.
// Copyright (C) 2021, Mariusz Postol LODZ POLAND.
//
// To be in touch join the community at GITTER: https://gitter.im/mpostol/OPC-UA-OOI
//___________________________________________________________________________________
Expand All @@ -9,9 +9,8 @@
using System;
using System.Diagnostics;
using UAOOI.SemanticData.BuildingErrorsHandling;
using UAOOI.SemanticData.UANodeSetValidation.DataSerialization;

namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest
namespace UAOOI.SemanticData.UANodeSetValidation.DataSerialization
{

[TestClass]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,8 @@
using UAOOI.SemanticData.BuildingErrorsHandling;
using UAOOI.SemanticData.UANodeSetValidation.UAInformationModel;
using UAOOI.SemanticData.UANodeSetValidation.UnitTest.Helpers;
using UAOOI.SemanticData.UANodeSetValidation.XML;

namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest
namespace UAOOI.SemanticData.UANodeSetValidation.XML
{
[TestClass]
public class UAModelContextUnitTest
Expand Down Expand Up @@ -61,15 +60,15 @@ public void ImportNodeIdTest()
UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock);
//start testing
asMock.Verify(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()), Times.Once);
Assert.AreEqual<string>("ns=10;i=1", _modelContext.ImportNodeId("Boolean"));
Assert.AreEqual<string>("i=45", _modelContext.ImportNodeId("HasSubtype"));
Assert.AreEqual<string>("ns=20;i=2", _modelContext.ImportNodeId("ns=2;i=2"));
Assert.AreEqual<string>("ns=10;i=1", _modelContext.ImportNodeId("Boolean", x=> Assert.Fail()).ToString());
Assert.AreEqual<string>("i=45", _modelContext.ImportNodeId("HasSubtype", x => Assert.Fail()).ToString());
Assert.AreEqual<string>("ns=20;i=2", _modelContext.ImportNodeId("ns=2;i=2", x => Assert.Fail()).ToString());
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Once);
asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Once);
asMock.Verify(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()), Times.Once);
Assert.AreEqual<string>("ns=20;i=3", _modelContext.ImportNodeId("ns=2;i=3"));
Assert.AreEqual<string>("ns=20;i=3", _modelContext.ImportNodeId("ns=2;i=3", x => Assert.Fail()).ToString());
asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Exactly(2));
Assert.AreEqual<string>("ns=20;i=4", _modelContext.ImportNodeId("ns=2;i=4"));
Assert.AreEqual<string>("ns=20;i=4", _modelContext.ImportNodeId("ns=2;i=4", x => Assert.Fail()).ToString());
asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Exactly(3));
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Once);
Assert.AreEqual<int>(2, trace.Count);
Expand All @@ -95,11 +94,11 @@ public void ImportQualifiedNameTest()
asMock.Setup(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()));
Action<TraceMessage> logMock = z => Assert.Fail();
UAModelContext modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock);
Assert.AreEqual<string>("10:Boolean", modelContext.ImportQualifiedName("1:Boolean"));
Assert.AreEqual<string>("10:AnyText", modelContext.ImportQualifiedName("1:AnyText"));
Assert.AreEqual<string>("HasSubtype", modelContext.ImportQualifiedName("HasSubtype"));
Assert.AreEqual<string>("ns=10;i=232323", modelContext.ImportNodeId("ns=1;i=232323"));
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Exactly(3));
Assert.AreEqual<string>("(10:Boolean, ns=10;i=1)", modelContext.ImportBrowseName("1:Boolean", "ns=1;i=1", x => Assert.Fail()).ToString());
Assert.AreEqual<string>("(10:AnyText, ns=10;i=1)", modelContext.ImportBrowseName("1:AnyText", "ns=1;i=1", x => Assert.Fail()).ToString());
Assert.AreEqual<string>("(HasSubtype, ns=10;i=1)", modelContext.ImportBrowseName("HasSubtype", "ns=1;i=1", x => Assert.Fail()).ToString());
Assert.AreEqual<string>("ns=10;i=232323", modelContext.ImportNodeId("ns=1;i=232323", x => Assert.Fail()).ToString());
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Exactly(6));
asMock.Verify(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()), Times.Once);
}

Expand All @@ -119,7 +118,7 @@ public void ImportQualifiedNameWrongNamespaceIndexTest()
List<TraceMessage> trace = new List<TraceMessage>();
Action<TraceMessage> logMock = z => trace.Add(z);
UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock);
Assert.AreEqual<string>("ns=20;i=232323", _modelContext.ImportNodeId("ns=2;i=232323"));
Assert.AreEqual<string>("ns=20;i=232323", _modelContext.ImportNodeId("ns=2;i=232323", y => Assert.Fail()).ToString());
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Never);
asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Once);
Assert.AreEqual<int>(1, trace.Count);
Expand Down Expand Up @@ -177,7 +176,7 @@ public void RecalculateNodeIdsUANodeSetTest()
{
NodeId = "Alias name",
BrowseName = "1:NewUAObject",
DisplayName = new LocalizedText[] { new LocalizedText() { Value = "New UA Object" } },
DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } },
References = new Reference[]
{
new Reference() { ReferenceType = ReferenceTypeIds.HasTypeDefinition.ToString(), Value = ObjectTypeIds.BaseObjectType.ToString() },
Expand All @@ -192,7 +191,7 @@ public void RecalculateNodeIdsUANodeSetTest()
{
NodeId = "ns=1;i=1",
BrowseName = "1:NewUAObject",
DisplayName = new LocalizedText[] { new LocalizedText() { Value = "New UA Object" } },
DisplayName = new XML.LocalizedText[] { new XML.LocalizedText() { Value = "New UA Object" } },
References = new Reference[]{},
// UAObject
DataType = "ns=1;i=2",
Expand All @@ -206,12 +205,12 @@ public void RecalculateNodeIdsUANodeSetTest()
IUAModelContext model = nodeSet.ParseUAModelContext(addressSpaceMock.Object, _logMock);
Assert.IsNotNull(model);
addressSpaceMock.Verify(x => x.GetURIIndexOrAppend(new Uri(@"http://cas.eu/UA/Demo/")), Times.AtLeastOnce());
Assert.AreEqual<string>("ns=2;i=24", nodeSet.Aliases[0].Value);
Assert.AreEqual<string>("ns=2;i=24", nodeSet.Aliases[0].ValueNodeId.ToString());
Assert.AreEqual<string>("Alias name", nodeSet.Aliases[0].Alias);
Assert.AreEqual<string>("ns=2;i=24", nodeSet.Items[0].NodeId);
Assert.AreEqual<string>("2:NewUAObject", nodeSet.Items[0].BrowseName);
Assert.AreEqual<string>("ns=2;i=2", ((UAVariableType)nodeSet.Items[1]).DataType);
Assert.AreEqual<string>("2:NewUAObject", ((UAVariableType)nodeSet.Items[1]).BrowseName);
Assert.AreEqual<string>("ns=2;i=24", nodeSet.Items[0].NodeIdNodeId.ToString());
Assert.AreEqual<string>("2:NewUAObject", nodeSet.Items[0].BrowseNameQualifiedName.ToString());
Assert.AreEqual<string>("ns=2;i=2", ((UAVariableType)nodeSet.Items[1]).DataTypeNodeId.ToString());
Assert.AreEqual<string>("2:NewUAObject", ((UAVariableType)nodeSet.Items[1]).BrowseNameQualifiedName.ToString());
}
}
}
Loading