Skip to content

Commit

Permalink
Merge pull request #525 from mpostol/SemanticData-6.1.3
Browse files Browse the repository at this point in the history
Semantic data 6.1.3
  • Loading branch information
mpostol authored Feb 13, 2021
2 parents 86bd45f + b1c751a commit 9a7c519
Show file tree
Hide file tree
Showing 20 changed files with 256 additions and 210 deletions.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: Bug report
about: Create a report to help us improve
title: ''
labels: 'bug'
labels: 'Bug'
assignees: ''
---

Expand Down
2 changes: 1 addition & 1 deletion SemanticData/AddressSpaceComplianceTestTool/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ private static void Do(Options options)
if (string.IsNullOrEmpty(options.IMNamespace))
_as.ValidateAndExportModel();
else
_as.ValidateAndExportModel(options.IMNamespace); //Validates and exports the selected model.
_as.ValidateAndExportModel(new Uri(options.IMNamespace)); //Validates and exports the selected model.
if (_exportModel)
_exporter.ExportToXMLFile(options.ModelDesignFileName, options.Stylesheet); //Serializes the already generated model and writes the XML document to a file.
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ public void AddressSpaceContextNotExistingFileName()
public void AddressSpaceContextValidateAndExportModelOpcUa()
{
AddressSpaceWrapper _asp = new AddressSpaceWrapper();
((IAddressSpaceContext)_asp.AddressSpaceContext).ValidateAndExportModel(UAInformationModel.Namespaces.OpcUa);
((IAddressSpaceContext)_asp.AddressSpaceContext).ValidateAndExportModel(new Uri(UAInformationModel.Namespaces.OpcUa));
_asp.TestConsistency(9, 0);
}

Expand All @@ -115,7 +115,7 @@ public void AddressSpaceContextValidateAndExportModelOpcUa()
public void AddressSpaceContextValidateAndExportModelWrongNamespace()
{
AddressSpaceWrapper _asp = new AddressSpaceWrapper();
((IAddressSpaceContext)_asp.AddressSpaceContext).ValidateAndExportModel("Not existing namespace");
((IAddressSpaceContext)_asp.AddressSpaceContext).ValidateAndExportModel(new Uri("http://www.example.com/afterthought/box"));
}

[TestMethod]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,52 +24,45 @@ public void ConstructorTest()
Assert.IsNotNull(models);
List<IModelTableEntry> listOfExportedNamespaceTable = models.ToList<IModelTableEntry>();
Assert.AreEqual<int>(1, listOfExportedNamespaceTable.Count);
Assert.AreEqual<string>("http://opcfoundation.org/UA/", listOfExportedNamespaceTable[0].ModelUri);
Assert.AreEqual<Uri>(new Uri("http://opcfoundation.org/UA/"), listOfExportedNamespaceTable[0].ModelUri);
Assert.IsNull(listOfExportedNamespaceTable[0].RequiredModel);
}

[TestMethod]
public void GetURIatIndexTest()
{
NamespaceTable instance = new NamespaceTable();
Assert.AreEqual<string>(Namespaces.OpcUa, instance.GetURIatIndex(0).ModelUri);
Assert.AreEqual<Uri>(new Uri(Namespaces.OpcUa), instance.GetURIatIndex(0).ModelUri);
Assert.ThrowsException<ArgumentOutOfRangeException>(() => instance.GetURIatIndex(1));
Assert.AreEqual(1, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest1"));
Assert.AreEqual(2, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual<string>("http://opcfoundation.org/UA/GetURIatIndexTest2", instance.GetURIatIndex(2).ModelUri);
Assert.AreEqual<string>("http://opcfoundation.org/UA/GetURIatIndexTest1", instance.GetURIatIndex(1).ModelUri);
Assert.AreEqual(1, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1")));
Assert.AreEqual(2, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2")));
Assert.AreEqual<Uri>(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2"), instance.GetURIatIndex(2).ModelUri);
Assert.AreEqual<Uri>(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1"), instance.GetURIatIndex(1).ModelUri);
}

[TestMethod]
public void GetURIIndexIndexTest()
{
NamespaceTable instance = new NamespaceTable();
Assert.AreEqual<int>(0, instance.GetURIIndex(Namespaces.OpcUa));
Assert.AreEqual<int>(-1, instance.GetURIIndex("non existing namespace"));
Assert.AreEqual(1, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest1"));
Assert.AreEqual(2, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual<int>(2, instance.GetURIIndex("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual<int>(1, instance.GetURIIndex("http://opcfoundation.org/UA/GetURIatIndexTest1"));
}

[TestMethod]
public void GetIndexOrAppend()
{
NamespaceTable instance = new NamespaceTable();
Assert.AreEqual(1, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest1"));
Assert.AreEqual(2, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual(2, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual(2, instance.GetURIIndexOrAppend("http://opcfoundation.org/UA/GetURIatIndexTest2"));
Assert.AreEqual<int>(0, instance.GetURIIndex(new Uri(Namespaces.OpcUa)));
Assert.AreEqual<int>(-1, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1/NonExistingNamespace")));
Assert.AreEqual(1, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1")));
Assert.AreEqual(2, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2")));
Assert.AreEqual(1, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1")));
Assert.AreEqual(2, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2")));
Assert.AreEqual(2, ((IAddressSpaceURIRecalculate)instance).GetURIIndexOrAppend(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2")));
Assert.AreEqual<int>(2, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest2")));
Assert.AreEqual<int>(1, instance.GetURIIndex(new Uri("http://opcfoundation.org/UA/GetURIatIndexTest1")));
}

[TestMethod]
public void UpadateModelOrAppendTest()
{
NamespaceTable instance = new NamespaceTable();
IModelTableEntry model1 = ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1");
instance.UpadateModelOrAppend(model1);
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(model1);
IModelTableEntry model2 = ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1");
instance.UpadateModelOrAppend(model2);
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(model2);
IModelTableEntry model3 = instance.GetURIatIndex(1);
Assert.IsNotNull(model3);
Assert.AreSame(model2, model3);
Expand All @@ -80,10 +73,10 @@ public void UpadateModelOrAppendTest()
public void ModelsTest()
{
NamespaceTable instance = new NamespaceTable();
instance.UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"));
instance.UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest3"));
instance.UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest2"));
instance.UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"));
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"));
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest3"));
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest2"));
((IAddressSpaceURIRecalculate)instance).UpadateModelOrAppend(ModelTableEntry.GetDefaultModelTableEntry("http://opcfoundation.org/UA/GetURIatIndexTest1"));
Assert.AreEqual<int>(4, instance.Models.Count<IModelTableEntry>());
}

Expand All @@ -104,7 +97,7 @@ internal static ModelTableEntry GetDefaultModelTableEntry(string modelUri)
return new ModelTableEntry
{
AccessRestrictions = 0xC,
ModelUri = modelUri,
ModelUri = new Uri(modelUri),
PublicationDate = DateTime.FromFileTime(999999),
RequiredModel = null,
RolePermissions = new IRolePermission[] { },
Expand All @@ -131,7 +124,7 @@ internal static ModelTableEntry GetDefaultModelTableEntry(string modelUri)
/// Gets or sets the model URI. The URI for the model. This URI should be one of the entries in the <see cref="NamespaceTable"/> table.
/// </summary>
/// <value>The model URI.</value>
public string ModelUri { get; set; }
public Uri ModelUri { get; set; }

/// <summary>
/// Gets or sets the version. The version of the model defined in the UANodeSet. This is a human readable string and not intended for programmatic comparisons.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
namespace UAOOI.SemanticData.UANodeSetValidation.UnitTest
{
[TestClass]
//TODO UAModelContext must provide default namespaceIndex #517
public class UAModelContextUnitTest
{
[TestMethod]
Expand Down Expand Up @@ -53,28 +52,31 @@ public void ImportNodeIdTest()
NamespaceUris = new string[] { "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" },
};
Mock<IAddressSpaceURIRecalculate> asMock = new Mock<IAddressSpaceURIRecalculate>();
asMock.Setup(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")).Returns(10);
string randomURI = string.Empty;
asMock.Setup(x => x.GetIndexOrAppend(It.Is<string>(z => z.Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns<string>(x => { randomURI = x; return 20; });
asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10);
Uri randomURI = null;
asMock.Setup(x => x.GetURIIndexOrAppend(It.Is<Uri>(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns<Uri>(x => { randomURI = x; return 20; });
asMock.Setup(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()));
List<TraceMessage> trace = new List<TraceMessage>();
Action<TraceMessage> logMock = z => trace.Add(z);
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"));
asMock.Verify(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"), Times.Once);
asMock.Verify(x => x.GetIndexOrAppend(randomURI), Times.Once);
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"));
asMock.Verify(x => x.GetIndexOrAppend(randomURI), Times.Exactly(2));
asMock.Verify(x => x.GetURIIndexOrAppend(randomURI), Times.Exactly(2));
Assert.AreEqual<string>("ns=20;i=4", _modelContext.ImportNodeId("ns=2;i=4"));
asMock.Verify(x => x.GetIndexOrAppend(randomURI), Times.Exactly(3));
asMock.Verify(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"), Times.Once);
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);
Assert.IsTrue(trace[0].Message.Contains("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"));
Assert.AreEqual<string>("P0-0001030000", trace[0].BuildError.Identifier);
Assert.AreEqual<TraceEventType>(TraceEventType.Information, trace[0].TraceLevel);
Assert.IsTrue(trace[1].Message.Contains(randomURI));
Assert.IsTrue(trace[1].Message.Contains(randomURI.ToString()));
Assert.AreEqual<string>("P3-0802020000", trace[1].BuildError.Identifier);
Assert.AreEqual<TraceEventType>(TraceEventType.Information, trace[1].TraceLevel);
}
Expand All @@ -89,14 +91,16 @@ public void ImportQualifiedNameTest()
Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } }
};
Mock<IAddressSpaceURIRecalculate> asMock = new Mock<IAddressSpaceURIRecalculate>();
asMock.Setup(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")).Returns(10);
asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10);
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.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"), Times.Exactly(3));
asMock.Verify(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")), Times.Exactly(3));
asMock.Verify(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()), Times.Once);
}

[TestMethod]
Expand All @@ -109,17 +113,17 @@ public void ImportQualifiedNameWrongNamespaceIndexTest()
Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } }
};
Mock<IAddressSpaceURIRecalculate> asMock = new Mock<IAddressSpaceURIRecalculate>();
asMock.Setup(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest")).Returns(10);
string randomURI = string.Empty;
asMock.Setup(x => x.GetIndexOrAppend(It.Is<string>(z => z.Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns<string>(x => { randomURI = x; return 20; });
asMock.Setup(x => x.GetURIIndexOrAppend(new Uri("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"))).Returns(10);
Uri randomURI = null;
asMock.Setup(x => x.GetURIIndexOrAppend(It.Is<Uri>(z => z.ToString().Contains("github.com/mpostol/OPC-UA-OOI/NameUnknown")))).Returns<Uri>(x => { randomURI = x; return 20; });
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"));
asMock.Verify(x => x.GetIndexOrAppend("http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest"), Times.Never);
asMock.Verify(x => x.GetIndexOrAppend(randomURI), Times.Once);
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);
Assert.IsTrue(trace[0].Message.Contains(randomURI));
Assert.IsTrue(trace[0].Message.Contains(randomURI.ToString()));
Assert.AreEqual<string>("P3-0802020000", trace[0].BuildError.Identifier);
Assert.AreEqual<TraceEventType>(TraceEventType.Information, trace[0].TraceLevel);
}
Expand All @@ -134,7 +138,7 @@ public void ModelUriTest()
Models = new ModelTableEntry[] { new ModelTableEntry() { ModelUri = "http://cas.eu/UA/CommServer/UnitTests/ObjectTypeTest" } }
};
Mock<IAddressSpaceURIRecalculate> asMock = new Mock<IAddressSpaceURIRecalculate>();
asMock.Setup(x => x.GetIndexOrAppend(It.IsAny<string>())).Returns(10);
asMock.Setup<ushort>(x => x.GetURIIndexOrAppend(It.IsAny<Uri>())).Returns(10);
Action<TraceMessage> logMock = z => Assert.Fail();
UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock);
Assert.AreEqual<string>(nodeSet.Models[0].ModelUri, _modelContext.ModelUri.ToString());
Expand All @@ -149,7 +153,8 @@ public void ModelUriModelsIsEmptyTest()
NamespaceUris = new string[] { "http://opcfoundation.org/UA/ADI/", "http://opcfoundation.org/UA/DI/" },
};
Mock<IAddressSpaceURIRecalculate> asMock = new Mock<IAddressSpaceURIRecalculate>();
asMock.Setup(x => x.GetIndexOrAppend(It.IsAny<string>())).Returns(10);
asMock.Setup(x => x.GetURIIndexOrAppend(It.IsAny<Uri>())).Returns(10);
asMock.Setup(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()));
List<TraceMessage> trace = new List<TraceMessage>();
Action<TraceMessage> logMock = z => trace.Add(z);
UAModelContext _modelContext = UAModelContext.ParseUANodeSetModelHeader(nodeSet, asMock.Object, logMock);
Expand All @@ -158,6 +163,7 @@ public void ModelUriModelsIsEmptyTest()
Assert.AreEqual<int>(1, trace.Count);
Assert.AreEqual<string>("P0-0001030000", trace[0].BuildError.Identifier);
Assert.AreEqual<TraceEventType>(TraceEventType.Information, trace[0].TraceLevel);
asMock.Verify(x => x.UpadateModelOrAppend(It.IsAny<IModelTableEntry>()), Times.Once);
}

[TestMethod]
Expand Down Expand Up @@ -194,12 +200,12 @@ public void RecalculateNodeIdsUANodeSetTest()
}
};
Mock<IAddressSpaceURIRecalculate> addressSpaceMock = new Mock<IAddressSpaceURIRecalculate>();
addressSpaceMock.Setup(x => x.GetIndexOrAppend(@"http://cas.eu/UA/Demo/")).Returns<string>(x => 2);
addressSpaceMock.Setup(x => x.GetURIIndexOrAppend(new Uri(@"http://cas.eu/UA/Demo/"))).Returns<Uri>(x => 2);
List<TraceMessage> _logsCache = new List<TraceMessage>();
Action<TraceMessage> _logMock = z => _logsCache.Add(z);
IUAModelContext model = nodeSet.ParseUAModelContext(addressSpaceMock.Object, _logMock);
Assert.IsNotNull(model);
addressSpaceMock.Verify(x => x.GetIndexOrAppend(@"http://cas.eu/UA/Demo/"), Times.AtLeastOnce());
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>("Alias name", nodeSet.Aliases[0].Alias);
Assert.AreEqual<string>("ns=2;i=24", nodeSet.Items[0].NodeId);
Expand Down
Loading

0 comments on commit 9a7c519

Please sign in to comment.