Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
000f1c9
Add SonarCloud configuration
YuraKozyr Dec 2, 2025
90508b0
Fixed SonarCloud configuration
YuraKozyr Dec 2, 2025
fa223f9
Test PR decoration
YuraKozyr Dec 2, 2025
a6f3245
Test PR decoration2
YuraKozyr Dec 2, 2025
6208492
Test PR decoration
YuraKozyr Dec 2, 2025
8794241
Merge pull request #1 from YuraKozyr/test-sonar
YuraKozyr Dec 2, 2025
5bfb80e
Update README.md
YuraKozyr Dec 2, 2025
9054200
Refactor: Make client fields readonly to fix Sonar smell
YuraKozyr Dec 2, 2025
400eba5
Refactor: Removed empty statement to fix Sonar smell
YuraKozyr Dec 2, 2025
c30c83c
Refactor: Made '_udpClient_MessageReceived' a static method to fix So…
YuraKozyr Dec 2, 2025
7c448ce
Refactor: Removed unused variable to fix Sonar smell
YuraKozyr Dec 2, 2025
fb4db78
Merge pull request #2 from YuraKozyr/fix/sonar-issues
YuraKozyr Dec 2, 2025
2355d2d
Lab3: tests & coverage
YuraKozyr Dec 2, 2025
fef148c
Lab4:Clear Duplications
YuraKozyr Dec 2, 2025
a84ecaf
Merge pull request #3 from YuraKozyr/fix/sonar-issues
YuraKozyr Dec 2, 2025
dbef608
Refactor wrappers to reduce duplication
YuraKozyr Dec 2, 2025
7ebe25d
Add NUnit tests for Tcp/Udp wrappers
YuraKozyr Dec 2, 2025
84551bc
Merge pull request #4 from YuraKozyr/lab4-duplicates
YuraKozyr Dec 2, 2025
21bfd77
Improve tests coverage for wrappers
YuraKozyr Dec 2, 2025
86a8e75
Improve tests coverage for wrappers
YuraKozyr Dec 2, 2025
1e38643
Merge pull request #5 from YuraKozyr/lab4-duplicates
YuraKozyr Dec 2, 2025
30b751a
Lab5: add arch tests (broken state)
YuraKozyr Dec 3, 2025
8d7d047
Merge pull request #6 from YuraKozyr/lab5-archtests-broken
YuraKozyr Dec 3, 2025
0fd1ca8
Added bad boy to fail test
YuraKozyr Dec 3, 2025
3ce0509
Bab boy removed
YuraKozyr Dec 3, 2025
d48af86
Lab6: Fixed few bugs
YuraKozyr Dec 3, 2025
af38297
Lab6: Adding more tests
YuraKozyr Dec 3, 2025
933e0d7
Update Newtonsoft.Json and SharpZipLib to secure versions
YuraKozyr Dec 3, 2025
71a2427
Merge pull request #7 from YuraKozyr/feature/update-dependencies
YuraKozyr Dec 3, 2025
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
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: "nuget"
directory: "/"
schedule:
interval: "weekly"
19 changes: 10 additions & 9 deletions .github/workflows/sonarcloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@ jobs:
dotnet tool install --global dotnet-sonarscanner
echo "$env:USERPROFILE\.dotnet\tools" >> $env:GITHUB_PATH
dotnet sonarscanner begin `
/k:"ppanchen_NetSdrClient" `
/o:"ppanchen" `
/k:"YuraKozyyr_NetSdrClient" `
/o:"yurakozyr" `
/d:sonar.token="${{ secrets.SONAR_TOKEN }}" `
/d:sonar.cs.opencover.reportsPaths="**/coverage.xml" `
/d:sonar.cpd.cs.minimumTokens=40 `
Expand All @@ -70,13 +70,14 @@ jobs:
run: dotnet restore NetSdrClient.sln
- name: Build
run: dotnet build NetSdrClient.sln -c Release --no-restore
#- name: Tests with coverage (OpenCover)
# run: |
# dotnet test NetSdrClientAppTests/NetSdrClientAppTests.csproj -c Release --no-build `
# /p:CollectCoverage=true `
# /p:CoverletOutput=TestResults/coverage.xml `
# /p:CoverletOutputFormat=opencover
# shell: pwsh
- name: Tests with coverage (OpenCover)
run: |
dotnet test NetSdrClientAppTests/NetSdrClientAppTests.csproj -c Release --no-build `
/p:CollectCoverage=true `
/p:CoverletOutput=TestResults/coverage.xml `
/p:CoverletOutputFormat=opencover
dotnet test NetSdrClientApp.ArchTests/NetSdrClientApp.ArchTests.csproj -c Release --no-build
shell: pwsh
# 3) END: SonarScanner
- name: SonarScanner End
run: dotnet sonarscanner end /d:sonar.token="${{ secrets.SONAR_TOKEN }}"
Expand Down
6 changes: 6 additions & 0 deletions NetSdrClient.sln
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSdrClientAppTests", "Net
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EchoServer", "EchoTcpServer\EchoServer.csproj", "{9179F2F7-EBEE-4A5D-9FD9-F6E3C18DD263}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NetSdrClientApp.ArchTests", "NetSdrClientApp.ArchTests\NetSdrClientApp.ArchTests.csproj", "{28EB108C-651C-4289-9900-3AAE9BB597F2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -27,6 +29,10 @@ Global
{9179F2F7-EBEE-4A5D-9FD9-F6E3C18DD263}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9179F2F7-EBEE-4A5D-9FD9-F6E3C18DD263}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9179F2F7-EBEE-4A5D-9FD9-F6E3C18DD263}.Release|Any CPU.Build.0 = Release|Any CPU
{28EB108C-651C-4289-9900-3AAE9BB597F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{28EB108C-651C-4289-9900-3AAE9BB597F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{28EB108C-651C-4289-9900-3AAE9BB597F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{28EB108C-651C-4289-9900-3AAE9BB597F2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
87 changes: 87 additions & 0 deletions NetSdrClientApp.ArchTests/ArchitectureTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
using NetArchTest.Rules;
using NetSdrClientApp;
using NetSdrClientApp.Messages;
using NetSdrClientApp.Networking;
using NUnit.Framework;

namespace NetSdrClientApp.ArchTests;

[TestFixture]
public class ArchitectureTests
{
/// <summary>
/// Головна збірка клієнта не повинна залежати від тестового Echo-сервера.
/// (Echo-сервер – лише допоміжний інструмент для тестування)
/// </summary>
[Test]
public void NetSdrClientApp_Should_Not_Depend_On_EchoTcpServer()
{
var result = Types
.InAssembly(typeof(NetSdrClient).Assembly)
.ShouldNot()
.HaveDependencyOn("EchoServer") // назва збірки EchoTcpServer
.GetResult();

Assert.That(result.IsSuccessful, Is.True,
"NetSdrClientApp не повинен мати залежність від EchoTcpServer (EchoServer).");
}

/// <summary>
/// Повідомлення (Messages) не мають тягнути за собою залежності від мережевого шару.
/// </summary>
[Test]
public void Messages_Should_Not_Depend_On_Networking()
{
var result = Types
.InAssembly(typeof(NetSdrMessageHelper).Assembly)
.That()
.ResideInNamespace("NetSdrClientApp.Messages")
.ShouldNot()
.HaveDependencyOn("NetSdrClientApp.Networking")
.GetResult();

Assert.That(result.IsSuccessful, Is.True,
"NetSdrClientApp.Messages не повинен залежати від NetSdrClientApp.Networking.");
}

/// <summary>
/// Навпаки: мережевий шар не має залежати від Messages,
/// щоб уникнути циклічних залежностей.
/// </summary>
[Test]
public void Networking_Should_Not_Depend_On_Messages()
{
var result = Types
.InAssembly(typeof(TcpClientWrapper).Assembly)
.That()
.ResideInNamespace("NetSdrClientApp.Networking")
.ShouldNot()
.HaveDependencyOn("NetSdrClientApp.Messages")
.GetResult();

Assert.That(result.IsSuccessful, Is.True,
"NetSdrClientApp.Networking не повинен залежати від NetSdrClientApp.Messages.");
}

/// <summary>
/// Усі типи в просторі імен Networking мають бути *Wrapper*-ами.
/// </summary>
[Test]
public void Networking_Types_Should_Have_Names_Ending_With_Wrapper()
{
var result = Types
.InAssembly(typeof(TcpClientWrapper).Assembly)
.That()
.ResideInNamespace("NetSdrClientApp.Networking")
.And()
.AreClasses() // 🔹 важливо: тільки класи, без інтерфейсів
.Should()
.HaveNameEndingWith("Wrapper")
.GetResult();

Assert.That(result.IsSuccessful, Is.True,
"У NetSdrClientApp.Networking мають бути лише класи, назва яких закінчується на 'Wrapper'.");
}

}

1 change: 1 addition & 0 deletions NetSdrClientApp.ArchTests/GlobalUsings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
global using NUnit.Framework;
22 changes: 22 additions & 0 deletions NetSdrClientApp.ArchTests/NetSdrClientApp.ArchTests.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NUnit" Version="3.14.0" />
<PackageReference Include="NUnit3TestAdapter" Version="4.6.0" />
<PackageReference Include="NetArchTest.Rules" Version="1.3.2" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\NetSdrClientApp\NetSdrClientApp.csproj" />
</ItemGroup>

</Project>

15 changes: 10 additions & 5 deletions NetSdrClientApp/NetSdrClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ namespace NetSdrClientApp
{
public class NetSdrClient
{
private ITcpClient _tcpClient;
private IUdpClient _udpClient;
private readonly ITcpClient _tcpClient;
private readonly IUdpClient _udpClient;

public bool IQStarted { get; set; }

Expand Down Expand Up @@ -66,7 +66,7 @@ public async Task StartIQAsync()
return;
}

; var iqDataMode = (byte)0x80;
var iqDataMode = (byte)0x80;
var start = (byte)0x02;
var fifo16bitCaptureMode = (byte)0x01;
var n = (byte)1;
Expand Down Expand Up @@ -114,9 +114,14 @@ public async Task ChangeFrequencyAsync(long hz, int channel)
await SendTcpRequest(msg);
}

private void _udpClient_MessageReceived(object? sender, byte[] e)
private static void _udpClient_MessageReceived(object? sender, byte[] e)
{
NetSdrMessageHelper.TranslateMessage(e, out MsgTypes type, out ControlItemCodes code, out ushort sequenceNum, out byte[] body);
NetSdrMessageHelper.TranslateMessage(
e,
out _, // MsgTypes type не потрібен
out _, // ControlItemCodes code не потрібен
out _, // ushort sequenceNum не потрібен
out var body); // тільки body використовуємо
var samples = NetSdrMessageHelper.GetSamples(16, body);

Console.WriteLine($"Samples recieved: " + body.Select(b => Convert.ToString(b, toBase: 16)).Aggregate((l, r) => $"{l} {r}"));
Expand Down
4 changes: 2 additions & 2 deletions NetSdrClientApp/NetSdrClientApp.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.0" />
<PackageReference Include="SharpZipLib" Version="1.3.2" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.4" />
<PackageReference Include="SharpZipLib" Version="1.4.2" />
</ItemGroup>

</Project>
Loading