Updated to .NET 10
All checks were successful
Branch Build / build-test-deploy (push) Successful in 53s
All checks were successful
Branch Build / build-test-deploy (push) Successful in 53s
This commit is contained in:
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v5
|
uses: actions/setup-dotnet@v5
|
||||||
with:
|
with:
|
||||||
dotnet-version: 8.x
|
dotnet-version: 10.x
|
||||||
cache: false
|
cache: false
|
||||||
|
|
||||||
- name: Restore dependencies
|
- name: Restore dependencies
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ jobs:
|
|||||||
- name: Setup dotnet
|
- name: Setup dotnet
|
||||||
uses: actions/setup-dotnet@v5
|
uses: actions/setup-dotnet@v5
|
||||||
with:
|
with:
|
||||||
dotnet-version: 8.x
|
dotnet-version: 10.x
|
||||||
cache: false
|
cache: false
|
||||||
|
|
||||||
- name: Restore dependencies
|
- name: Restore dependencies
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/)
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
@@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
- Migrated main repository from Gitlab to Gitea (CI/CD)
|
- Migrated main repository from Gitlab to Gitea (CI/CD)
|
||||||
- Updated to VS 2026
|
- Updated to VS 2026
|
||||||
|
- Updated to .NET 10
|
||||||
|
|
||||||
|
|
||||||
## [v0.1.2] - 2025-11-08
|
## [v0.1.2] - 2025-11-08
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<LangVersion>12.0</LangVersion>
|
<LangVersion>14.0</LangVersion>
|
||||||
|
|
||||||
<PublicKey>0024000004800000940000000602000000240000525341310004000001000100d9b40f5db1670c563c2e8be5dfd24ed66ad811b3ebba8a0ca0df9cbad3a115ca361b3de4b4d4ed990bf9874d2651e62565f56adb33af33819687021e263b02d6bf5b3cdacde4f09650cafe97467de4b9e4e9cc1d6c2d500a08759697bbe80940916c05533d172ca7e55e10434f9cc46fd189f26cefc100781a20e57f1bad65d5</PublicKey>
|
<PublicKey>0024000004800000940000000602000000240000525341310004000001000100d9b40f5db1670c563c2e8be5dfd24ed66ad811b3ebba8a0ca0df9cbad3a115ca361b3de4b4d4ed990bf9874d2651e62565f56adb33af33819687021e263b02d6bf5b3cdacde4f09650cafe97467de4b9e4e9cc1d6c2d500a08759697bbe80940916c05533d172ca7e55e10434f9cc46fd189f26cefc100781a20e57f1bad65d5</PublicKey>
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<Project>
|
<Project>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net10.0</TargetFramework>
|
||||||
|
|
||||||
<IsPackable>false</IsPackable>
|
<IsPackable>false</IsPackable>
|
||||||
<IsTestProject>true</IsTestProject>
|
<IsTestProject>true</IsTestProject>
|
||||||
<CollectCoverage>true</CollectCoverage>
|
<CollectCoverage>true</CollectCoverage>
|
||||||
@@ -20,7 +22,9 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
<Using Include="AMWD.Net.Api.Fritz.CallMonitor" />
|
||||||
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
|
<Using Include="Microsoft.VisualStudio.TestTools.UnitTesting" />
|
||||||
|
<Using Include="Moq" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)\..'))" />
|
<Import Project="$([MSBuild]::GetPathOfFileAbove('Directory.Build.props', '$(MSBuildThisFileDirectory)\..'))" />
|
||||||
|
|||||||
@@ -4,11 +4,9 @@ using System.Reflection;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using AMWD.Net.Api.Fritz.CallMonitor;
|
|
||||||
using AMWD.Net.Api.Fritz.CallMonitor.Utils;
|
using AMWD.Net.Api.Fritz.CallMonitor.Utils;
|
||||||
using AMWD.Net.Api.Fritz.CallMonitor.Wrappers;
|
using AMWD.Net.Api.Fritz.CallMonitor.Wrappers;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Moq;
|
|
||||||
|
|
||||||
namespace FritzCallMonitor.Tests
|
namespace FritzCallMonitor.Tests
|
||||||
{
|
{
|
||||||
@@ -21,11 +19,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
|
|
||||||
private const string HOST = "localhost";
|
private const string HOST = "localhost";
|
||||||
private const int PORT = 1012;
|
private const int PORT = 1012;
|
||||||
private readonly DateTime NOW = new(2025, 8, 25, 20, 15, 30, DateTimeKind.Local);
|
private readonly DateTime _now = new(2025, 8, 25, 20, 15, 30, DateTimeKind.Local);
|
||||||
|
|
||||||
private string _dateOffset;
|
private string _dateOffset;
|
||||||
|
|
||||||
|
|
||||||
private Mock<ReconnectTcpClient> _tcpClientMock;
|
private Mock<ReconnectTcpClient> _tcpClientMock;
|
||||||
private Mock<NetworkStreamWrapper> _networkStreamMock;
|
private Mock<NetworkStreamWrapper> _networkStreamMock;
|
||||||
|
|
||||||
@@ -35,7 +32,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestInitialize]
|
[TestInitialize]
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
var offset = TimeZoneInfo.Local.GetUtcOffset(NOW);
|
var offset = TimeZoneInfo.Local.GetUtcOffset(_now);
|
||||||
_dateOffset = offset < TimeSpan.Zero
|
_dateOffset = offset < TimeSpan.Zero
|
||||||
? "-" + offset.ToString("hh\\:mm")
|
? "-" + offset.ToString("hh\\:mm")
|
||||||
: "+" + offset.ToString("hh\\:mm");
|
: "+" + offset.ToString("hh\\:mm");
|
||||||
@@ -44,7 +41,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
|
|
||||||
_readAsyncResponses = new Queue<(int, byte[])>();
|
_readAsyncResponses = new Queue<(int, byte[])>();
|
||||||
|
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{NOW:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;\r\n")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;\r\n")));
|
||||||
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +80,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
// Arrange
|
// Arrange
|
||||||
var loggerMock = new Mock<ILogger>();
|
var loggerMock = new Mock<ILogger>();
|
||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
client.Logger = loggerMock.Object;
|
client.Logger = loggerMock.Object;
|
||||||
@@ -107,7 +104,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
@@ -131,7 +128,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
_tcpClientMock.Setup(m => m.GetStream()).Returns((NetworkStreamWrapper)null);
|
_tcpClientMock.Setup(m => m.GetStream()).Returns((NetworkStreamWrapper)null);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -156,7 +153,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -185,7 +182,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
_readAsyncResponses.Clear();
|
_readAsyncResponses.Clear();
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{NOW:dd.MM.yy HH:mm:ss};RING;")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{_now:dd.MM.yy HH:mm:ss};RING;")));
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes("2;012345678901;9876543;SIP0;\n")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes("2;012345678901;9876543;SIP0;\n")));
|
||||||
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
||||||
|
|
||||||
@@ -199,7 +196,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -228,7 +225,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
_readAsyncResponses.Clear();
|
_readAsyncResponses.Clear();
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{NOW:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;\n{NOW:dd.MM.yy HH:mm:ss}")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;\n{_now:dd.MM.yy HH:mm:ss}")));
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes(";RING;2;012345678901;9876543;SIP0;\r\n")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes(";RING;2;012345678901;9876543;SIP0;\r\n")));
|
||||||
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
||||||
|
|
||||||
@@ -240,7 +237,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -260,7 +257,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
_readAsyncResponses.Clear();
|
_readAsyncResponses.Clear();
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{NOW:dd.MM.yy HH:mm:ss};TEST;2;012345678901;9876543;SIP0;\n{NOW:dd.MM.yy HH:mm:ss}")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes($"{_now:dd.MM.yy HH:mm:ss};TEST;2;012345678901;9876543;SIP0;\n{_now:dd.MM.yy HH:mm:ss}")));
|
||||||
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes(";RING;2;012345678901;9876543;SIP0;\r\n")));
|
_readAsyncResponses.Enqueue((0, Encoding.UTF8.GetBytes(";RING;2;012345678901;9876543;SIP0;\r\n")));
|
||||||
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
_readAsyncResponses.Enqueue((Timeout.Infinite, Array.Empty<byte>()));
|
||||||
|
|
||||||
@@ -272,7 +269,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -328,9 +325,9 @@ namespace FritzCallMonitor.Tests
|
|||||||
tcpClientField.SetValue(client, _tcpClientMock.Object);
|
tcpClientField.SetValue(client, _tcpClientMock.Object);
|
||||||
|
|
||||||
var onConnectedMethodInfo = client.GetType().GetMethod("OnConnected", BindingFlags.NonPublic | BindingFlags.Instance);
|
var onConnectedMethodInfo = client.GetType().GetMethod("OnConnected", BindingFlags.NonPublic | BindingFlags.Instance);
|
||||||
_tcpClientMock.SetupGet(c => c.OnConnected).Returns((Func<ReconnectTcpClient, Task>)onConnectedMethodInfo.CreateDelegate(typeof(Func<ReconnectTcpClient, Task>), client));
|
_tcpClientMock.SetupGet(c => c.OnConnected).Returns(onConnectedMethodInfo.CreateDelegate<Func<ReconnectTcpClient, Task>>(client));
|
||||||
|
|
||||||
_tcpClientMock.Object.OnConnected(_tcpClientMock.Object).Wait();
|
_tcpClientMock.Object.OnConnected(_tcpClientMock.Object).Wait(TestContext.CancellationToken);
|
||||||
return client;
|
return client;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using AMWD.Net.Api.Fritz.CallMonitor;
|
|
||||||
|
|
||||||
namespace FritzCallMonitor.Tests
|
namespace FritzCallMonitor.Tests
|
||||||
{
|
{
|
||||||
@@ -8,12 +7,12 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
private string _dateOffset;
|
private string _dateOffset;
|
||||||
|
|
||||||
private readonly DateTime NOW = new(2025, 8, 25, 20, 15, 30, DateTimeKind.Local);
|
private readonly DateTime _now = new(2025, 8, 25, 20, 15, 30, DateTimeKind.Local);
|
||||||
|
|
||||||
[TestInitialize]
|
[TestInitialize]
|
||||||
public void Initialize()
|
public void Initialize()
|
||||||
{
|
{
|
||||||
var offset = TimeZoneInfo.Local.GetUtcOffset(NOW);
|
var offset = TimeZoneInfo.Local.GetUtcOffset(_now);
|
||||||
_dateOffset = offset < TimeSpan.Zero
|
_dateOffset = offset < TimeSpan.Zero
|
||||||
? "-" + offset.ToString("hh\\:mm")
|
? "-" + offset.ToString("hh\\:mm")
|
||||||
: "+" + offset.ToString("hh\\:mm");
|
: "+" + offset.ToString("hh\\:mm");
|
||||||
@@ -23,7 +22,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
public void ShouldParseRingEvent()
|
public void ShouldParseRingEvent()
|
||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
@@ -39,7 +38,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldParseConnectEvent()
|
public void ShouldParseConnectEvent()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};CONNECT;1;3;012345678901;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CONNECT;1;3;012345678901;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
@@ -55,7 +54,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldParseDisconnectEvent()
|
public void ShouldParseDisconnectEvent()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};DISCONNECT;2;42;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};DISCONNECT;2;42;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
@@ -71,7 +70,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldParseCallEvent()
|
public void ShouldParseCallEvent()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};CALL;4;7;9876543;012345678901;SIP0;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CALL;4;7;9876543;012345678901;SIP0;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
|
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
@@ -95,7 +94,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldReturnNullOnUnknownEventType()
|
public void ShouldReturnNullOnUnknownEventType()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};UNKNOWN;2;012345678901;9876543;SIP0;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};UNKNOWN;2;012345678901;9876543;SIP0;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNull(result);
|
Assert.IsNull(result);
|
||||||
}
|
}
|
||||||
@@ -103,7 +102,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldReturnNullOnInvalidConnectionId()
|
public void ShouldReturnNullOnInvalidConnectionId()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};RING;abc;012345678901;9876543;SIP0;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;abc;012345678901;9876543;SIP0;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNull(result);
|
Assert.IsNull(result);
|
||||||
}
|
}
|
||||||
@@ -111,7 +110,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldHandleInvalidLinePortInConnect()
|
public void ShouldHandleInvalidLinePortInConnect()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};CONNECT;1;abc;012345678901;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CONNECT;1;abc;012345678901;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
Assert.IsNull(result.LinePort);
|
Assert.IsNull(result.LinePort);
|
||||||
@@ -120,7 +119,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldHandleInvalidLinePortInCall()
|
public void ShouldHandleInvalidLinePortInCall()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};CALL;4;abc;9876543;012345678901;SIP0;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};CALL;4;abc;9876543;012345678901;SIP0;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
Assert.IsNull(result.LinePort);
|
Assert.IsNull(result.LinePort);
|
||||||
@@ -129,7 +128,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldHandleInvalidDurationInDisconnect()
|
public void ShouldHandleInvalidDurationInDisconnect()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};DISCONNECT;2;abc;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};DISCONNECT;2;abc;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
Assert.IsNull(result.Duration);
|
Assert.IsNull(result.Duration);
|
||||||
@@ -138,7 +137,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldReturnNullOnTooFewColumns()
|
public void ShouldReturnNullOnTooFewColumns()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};RING;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNull(result);
|
Assert.IsNull(result);
|
||||||
}
|
}
|
||||||
@@ -146,7 +145,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
[TestMethod]
|
[TestMethod]
|
||||||
public void ShouldParseWithExtraColumns()
|
public void ShouldParseWithExtraColumns()
|
||||||
{
|
{
|
||||||
string line = $"{NOW:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;EXTRA;COLUMN;";
|
string line = $"{_now:dd.MM.yy HH:mm:ss};RING;2;012345678901;9876543;SIP0;EXTRA;COLUMN;";
|
||||||
var result = CallMonitorEventArgs.Parse(line);
|
var result = CallMonitorEventArgs.Parse(line);
|
||||||
Assert.IsNotNull(result);
|
Assert.IsNotNull(result);
|
||||||
Assert.AreEqual("012345678901", result.ExternalNumber);
|
Assert.AreEqual("012345678901", result.ExternalNumber);
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<TargetFramework>net8.0</TargetFramework>
|
|
||||||
<NoWarn>$(NoWarn);CA1873</NoWarn>
|
<NoWarn>$(NoWarn);CA1873</NoWarn>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ using System.Threading.Tasks;
|
|||||||
using AMWD.Net.Api.Fritz.CallMonitor.Utils;
|
using AMWD.Net.Api.Fritz.CallMonitor.Utils;
|
||||||
using AMWD.Net.Api.Fritz.CallMonitor.Wrappers;
|
using AMWD.Net.Api.Fritz.CallMonitor.Wrappers;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Moq;
|
|
||||||
|
|
||||||
namespace FritzCallMonitor.Tests
|
namespace FritzCallMonitor.Tests
|
||||||
{
|
{
|
||||||
@@ -80,8 +79,8 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
@@ -105,8 +104,8 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
using var client = GetClient();
|
using var client = GetClient();
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
client.Dispose();
|
client.Dispose();
|
||||||
@@ -134,7 +133,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () => await client.StartAsync(TestContext.CancellationTokenSource.Token));
|
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () => await client.StartAsync(TestContext.CancellationToken));
|
||||||
|
|
||||||
VerifyNoOtherCalls();
|
VerifyNoOtherCalls();
|
||||||
}
|
}
|
||||||
@@ -147,7 +146,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
client.Dispose();
|
client.Dispose();
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () => await client.StopAsync(TestContext.CancellationTokenSource.Token));
|
await Assert.ThrowsExactlyAsync<ObjectDisposedException>(async () => await client.StopAsync(TestContext.CancellationToken));
|
||||||
|
|
||||||
VerifyNoOtherCalls();
|
VerifyNoOtherCalls();
|
||||||
}
|
}
|
||||||
@@ -172,8 +171,8 @@ namespace FritzCallMonitor.Tests
|
|||||||
_tcpClientConnectTaskDelays.Enqueue(Timeout.Infinite);
|
_tcpClientConnectTaskDelays.Enqueue(Timeout.Infinite);
|
||||||
|
|
||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
_tcpClientConnected = true;
|
_tcpClientConnected = true;
|
||||||
@@ -208,10 +207,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.IsTrue(callbackCalled);
|
Assert.IsTrue(callbackCalled);
|
||||||
@@ -236,10 +235,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
_socketMock.Verify(m => m.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true), Times.Once);
|
_socketMock.Verify(m => m.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true), Times.Once);
|
||||||
|
|
||||||
@@ -261,7 +260,7 @@ namespace FritzCallMonitor.Tests
|
|||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
|
|
||||||
// Act & Assert
|
// Act & Assert
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
|
|
||||||
VerifyNoOtherCalls();
|
VerifyNoOtherCalls();
|
||||||
}
|
}
|
||||||
@@ -271,8 +270,8 @@ namespace FritzCallMonitor.Tests
|
|||||||
{
|
{
|
||||||
// Arrange
|
// Arrange
|
||||||
var client = GetClient();
|
var client = GetClient();
|
||||||
await client.StartAsync(TestContext.CancellationTokenSource.Token);
|
await client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var stream = client.GetStream();
|
var stream = client.GetStream();
|
||||||
@@ -317,10 +316,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
using var client = GetClient();
|
using var client = GetClient();
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var startTask = client.StartAsync(TestContext.CancellationTokenSource.Token);
|
var startTask = client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await startTask;
|
await startTask;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -350,10 +349,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
.ThrowsAsync(new SocketException());
|
.ThrowsAsync(new SocketException());
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var startTask = client.StartAsync(TestContext.CancellationTokenSource.Token);
|
var startTask = client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(1000, TestContext.CancellationTokenSource.Token); // Should try to connect two times.
|
await Task.Delay(1000, TestContext.CancellationToken); // Should try to connect two times.
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await startTask;
|
await startTask;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
@@ -394,10 +393,10 @@ namespace FritzCallMonitor.Tests
|
|||||||
.ThrowsAsync(new ObjectDisposedException("Test"));
|
.ThrowsAsync(new ObjectDisposedException("Test"));
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var startTask = client.StartAsync(TestContext.CancellationTokenSource.Token);
|
var startTask = client.StartAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(1000, TestContext.CancellationTokenSource.Token); // Should try to connect two times.
|
await Task.Delay(1000, TestContext.CancellationToken); // Should try to connect two times.
|
||||||
await client.StopAsync(TestContext.CancellationTokenSource.Token);
|
await client.StopAsync(TestContext.CancellationToken);
|
||||||
await Task.Delay(ASYNC_DELAY, TestContext.CancellationTokenSource.Token);
|
await Task.Delay(ASYNC_DELAY, TestContext.CancellationToken);
|
||||||
await startTask;
|
await startTask;
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
|
|||||||
Reference in New Issue
Block a user