Skip to content
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
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using AXSharp.Connector.ValueTypes;

namespace AXSharp.Connector.Identity;
Expand Down Expand Up @@ -50,7 +51,7 @@ public SortedDictionary<ulong, ITwinIdentity> Identities
{
get
{
if (_sortedIdentities.Count == 0) SortIdentities();
if (_sortedIdentities.Count == 0) SortIdentitiesAsync().Wait();

return _sortedIdentities;
}
Expand Down Expand Up @@ -186,12 +187,27 @@ public ITwinIdentity GetTwinByIdentity(ulong identity)
/// Reads twin objects identities.
/// </summary>
/// <returns>Identity onliners.</returns>
public IEnumerable<OnlinerULInt> ReadIdentities()
internal async Task<IEnumerable<OnlinerULInt>> ReadIdentitiesAsync()
{
if (_connector != null)
{
_connector.Logger.Information("Reading identities...");
_connector.ReadBatchAsync(_identitiesTags).Wait();
await _connector.ReadBatchAsync(_identitiesTags);
var lastIdentity = 0ul;
if (_identitiesTags.Count > 0)
{
lastIdentity = _identitiesTags.Max(p => p.LastValue);
}

_connector.Logger.Information("Assigning missing identities...");
foreach (var it in _identitiesTags)
{
if (it.LastValue == 0)
{
it.Cyclic = ++lastIdentity;
}
}
await _connector.WriteBatchAsync(_identitiesTags);
_connector.Logger.Information("Reading identities done.");
_connector.Logger.Information(
$"Number of identities: {_identitiesTags.Count} | Unique :{_identities.Count}");
Expand All @@ -203,26 +219,29 @@ public IEnumerable<OnlinerULInt> ReadIdentities()
/// <summary>
/// Refreshes and sorts identities.
/// </summary>
public void RefreshIdentities()
public async Task ConstructIdentitiesAsync()
{
ReadIdentities();
SortIdentities();
await ReadIdentitiesAsync();
await SortIdentitiesAsync();
}

/// <summary>
/// Sorts identities.
/// </summary>
public void SortIdentities()
internal async Task SortIdentitiesAsync()
{
_connector?.Logger.Information("Sorting identities...");
_sortedIdentities.Clear();
foreach (var identity in _identities)
await Task.Run(() =>
{
var key = identity.Key.LastValue == 0 ? identity.Key.GetAsync().Result : identity.Key.LastValue;
if (!_sortedIdentities.ContainsKey(key))
_sortedIdentities.Add(key, identity.Value);
}
_connector?.Logger.Information("Sorting identities...");
_sortedIdentities.Clear();
foreach (var identity in _identities)
{
var key = identity.Key.LastValue == 0 ? identity.Key.GetAsync().Result : identity.Key.LastValue;
if (!_sortedIdentities.ContainsKey(key))
_sortedIdentities.Add(key, identity.Value);
}

_connector?.Logger.Information("Sorting identities done.");
_connector?.Logger.Information("Sorting identities done.");
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@
using System.Runtime.CompilerServices;

[assembly: InternalsVisibleTo("AXSharp.Connector.S71500.WebAPI")]
[assembly: InternalsVisibleTo("AXSharp.ConnectorTests")]
[assembly: InternalsVisibleTo("AXSharp.ConnectorTests")]
[assembly: InternalsVisibleTo("AXSharp.ConnectorLegacyTests")]
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ namespace AXSharp.Connector.Identity.Tests
public class TwinIdentityProviderTests
{
[Test()]
public void AddIdentityTest()
public async Task AddIdentityTest()
{
//-- Arrange
var identityProvider = new TwinIdentityProvider(new DummyConnector());
Expand All @@ -33,7 +33,7 @@ public void AddIdentityTest()
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 1000, SetLastValue = 1000 }, AttributeName = "n1000", Symbol = "s1000" });
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 2000, SetLastValue = 2000 }, AttributeName = "n2000", Symbol = "s2000" });
#pragma warning restore CS0618 // Type or member is obsolete
identityProvider.SortIdentities();
await identityProvider.SortIdentitiesAsync();

//-- Assert
var actual = identityProvider.GetTwinByIdentity(1000);
Expand All @@ -43,7 +43,7 @@ public void AddIdentityTest()
}

[Test()]
public void GetTwinByIdentityTest()
public async Task GetTwinByIdentityTest()
{
//-- Arrange
var identityProvider = new TwinIdentityProvider(new DummyConnector());
Expand All @@ -53,7 +53,7 @@ public void GetTwinByIdentityTest()
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 1000, SetLastValue = 1000 }, AttributeName = "n1000", Symbol = "s1000" });
identityProvider.AddIdentity(new IdentityTestObject() { Identity = new OnlinerULInt() { Cyclic = 2000, SetLastValue = 2000 }, AttributeName = "n2000", Symbol = "s2000" });
#pragma warning restore CS0618 // Type or member is obsolete
identityProvider.SortIdentities();
await identityProvider.SortIdentitiesAsync();

//-- Assert
var actual = identityProvider.GetTwinByIdentity(1000);
Expand All @@ -66,7 +66,7 @@ public void GetTwinByIdentityTest()
}

[Test()]
public void AddIdentityExistingTest()
public async Task AddIdentityExistingTest()
{
//-- Arrange
var identityProvider = new TwinIdentityProvider(new DummyConnector());
Expand All @@ -80,7 +80,7 @@ public void AddIdentityExistingTest()
identityProvider.AddIdentity(ident.MemberByIdentityObjectNoAttribute);
identityProvider.AddIdentity(ident.MemberByIdentityObjectNoAttributeDiffIdentity);

identityProvider.SortIdentities();
await identityProvider.SortIdentitiesAsync();

//-- Assert
Assert.AreEqual(2, identityProvider.IdentitiesCount);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -184,36 +184,36 @@ public void CanCallGetTwinByIdentityWithIdentity()
}

[Fact]
public void CanCallReadIdentities()
public async void CanCallReadIdentities()
{
// Arrange
var connector = Substitute.For<DummyConnector>();
var testClass = Substitute.For<TwinIdentityProvider>(connector);

// Act
var result = testClass.ReadIdentities();
var result = await testClass.ReadIdentitiesAsync();

// Assert
connector.Received().ReadBatchAsync(result).Wait();
}

[Fact]
public void CanCallRefreshIdentities()
public async void CanCallRefreshIdentities()
{
// Arrange
var connector = Substitute.For<DummyConnector>();
var testClass = Substitute.For<TwinIdentityProvider>(_connector);

// Act
testClass.RefreshIdentities();
await testClass.ConstructIdentitiesAsync();

// Assert
testClass.Received().ReadIdentities();
testClass.Received().SortIdentities();
await testClass.Received().ReadIdentitiesAsync();
await testClass.Received().SortIdentitiesAsync();
}

[Fact]
public void CanCallSortIdentities()
public async void CanCallSortIdentities()
{
// Arrange
var testClass = Substitute.For<TwinIdentityProvider>();
Expand All @@ -238,7 +238,7 @@ public void CanCallSortIdentities()
testClass.AddIdentity(obj1);

// Act
testClass.SortIdentities();
await testClass.SortIdentitiesAsync();

// Assert
Assert.Equal(1ul, testClass.Identities.ElementAt(0).Key);
Expand Down
1 change: 1 addition & 0 deletions src/AXSharp.connectors/tests/ax-test-project/apax.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ targets:
- "1500"
- axunit-llvm
- plcsim
- swcpu
devDependencies:
"@ax/sdk": 3.0.17
dependencies:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ targets:
- "1500"
- axunit-llvm
- plcsim
- swcpu
devDependencies:
"@ax/sdk": 3.0.8
"@ax/sld": ^0.14.2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ targets:
- "1500"
- plcsim
- axunit-llvm
- swcpu
devDependencies:
"@ax/sdk": 3.0.8
"@ax/sld": ^0.14.2
Expand Down
1 change: 1 addition & 0 deletions src/tests.integrations/integrated/src/ax/apax.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ targets:
- "1500"
- axunit-llvm
- plcsim
- swcpu
devDependencies:
"@ax/sdk": 3.0.8
"@ax/sld": ^0.14.2
Expand Down