Skip to content

Lab 3: unit tests and coverage reporting#20

Open
nik-bykoff wants to merge 3 commits intolenagrin:masterfrom
nik-bykoff:lab-03-tests-coverage
Open

Lab 3: unit tests and coverage reporting#20
nik-bykoff wants to merge 3 commits intolenagrin:masterfrom
nik-bykoff:lab-03-tests-coverage

Conversation

@nik-bykoff
Copy link
Copy Markdown

Summary

Wire OpenCover-format coverage into CI and grow the test suite from 8 to 18 tests.

  • Add coverlet.msbuild 6.0.0 to NetSdrClientAppTests (with PrivateAssets=all).
  • Add four NetSdrClient tests covering ChangeFrequencyAsync, idempotent IQStarted toggling, listener startup, and no-op-when-disconnected.
  • Add six NetSdrMessageHelper tests covering control-item/data-item roundtrip and GetSamples edges (8 bit, 16 bit, empty body, oversized 40-bit width).
  • Fix a latent bug in TranslateMessage: Enum.IsDefined was called with a ushort while ControlItemCodes underlying type is int, throwing ArgumentException. Cast added: (int)value.
  • Re-enable the Tests with coverage (OpenCover) step in .github/workflows/sonarcloud.yml, excluding Program from coverage.

Numbers

Local run on lab-03-tests-coverage:

Metric Value
Tests passing 18 / 18
Line coverage (NetSdrClientApp) 45.86%
Branch coverage 26.92%
Method coverage 48.48%

TcpClientWrapper and UdpClientWrapper keep coverage low because they bind real OS sockets; their testability refactor is scheduled for Lab 6.

Test plan

  • dotnet test NetSdrClient.sln -c Release reports 18/18 passing.
  • dotnet test ... /p:CollectCoverage=true /p:CoverletOutputFormat=opencover produces TestResults/coverage.xml.
  • After merging, SonarCloud Coverage on New Code is non-zero on Measures page.

Discipline / Author

  • Subject: Реінжиніринг програмного забезпечення
  • Student: Биков Нікіта Вячеславович, group ПЗС-1

nik-bykoff added 3 commits May 4, 2026 21:31
- Move SONAR_PROJECT_KEY/SONAR_ORGANIZATION into workflow env block with explicit setup instructions for fork-based usage.

- Update README with student header, fork/upstream links and a table of all eight lab reports.

- Replace SonarCloud badges with placeholders for nik-bykoff fork.

- Add docs/labs/lab-01.md report describing manual SonarCloud steps, CI workflow layout and verification checklist.

- Ignore local .env files to prevent accidental token leaks.
- Rename NetSdrClient.Disconect to Disconnect (typo) and update callers/tests.

- Remove stray semicolon in StartIQAsync and unused JSType using-statics.

- Make responseTaskSource thread-safe via Interlocked.Exchange + TrySetResult.

- Replace Aggregate-on-empty-may-throw log formatting with string.Join in three places.

- Rewrite GetSamples from O(n^2) IEnumerable.Count loop to O(n) for-loop with reusable byte[4] buffer.

- Replace MD5-based UdpClientWrapper.GetHashCode with HashCode.Combine and add Equals override.

- Make TcpClientWrapper._cts nullable, mark _host/_port readonly, drop unused exception variable names.

- All eight existing unit tests still pass; compiler warnings dropped from 18 to 15 (rest are EchoTcpServer or NuGet).
- Add coverlet.msbuild to NetSdrClientAppTests with PrivateAssets=all.

- Add four NetSdrClient tests (ChangeFrequency, idempotent IQ flag, listener startup, no-op when disconnected).

- Add six NetSdrMessageHelper tests covering control-item/data-item roundtrip and GetSamples edge cases (8/16 bit, empty body, oversized width).

- Fix latent bug in TranslateMessage where Enum.IsDefined was called with ushort while ControlItemCodes underlying type is int.

- Re-enable Tests with coverage step in CI workflow with opencover output and Program exclusion.

- 18/18 tests passing locally; coverage of NetSdrClientApp module: line 45.86%, branch 26.92%, method 48.48%.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant