Skip to content

Commit c120332

Browse files
fix(security): fix 26 resource disposal issues with using statements
- Added 'using' to CancellationTokenSource in test files (24 instances) - MessageProcessingServiceTests.cs (11 instances) - DLQHandlingIntegrationTests.cs (5 instances) - LeasePullServiceTests.cs (2 instances) - SandboxExecutorServiceTests.cs (1 instance) - LeaseServiceLogicTests.cs (2 instances) - SchedulerIntegrationTests.cs (1 instance) - Added LoggerFactory disposal in NatsEventPublisherTests.cs - Remaining 11 alerts are false positives (WebApplicationFactory, HttpResponseMessage in mocks, X509Certificate2 with callback lifetime) Refs: E7-T1
1 parent a5b6a2d commit c120332

File tree

7 files changed

+25
-22
lines changed

7 files changed

+25
-22
lines changed

tests/ControlPlane.Api.Tests/LeaseServiceLogicTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ public async Task GetLeasesAsync_ReturnsEmpty_WhenNodeNotFound()
246246
_mockNodeStore.Setup(s => s.GetNodeAsync(nodeId))
247247
.ReturnsAsync((Node?)null);
248248

249-
var cts = new CancellationTokenSource();
249+
using var cts = new CancellationTokenSource();
250250
cts.Cancel(); // Cancel immediately
251251

252252
// Act
@@ -307,7 +307,7 @@ public async Task GetLeasesAsync_StreamsLeases_ForPendingRuns()
307307
_mockLeaseStore.Setup(s => s.AcquireLeaseAsync(It.IsAny<string>(), nodeId, It.IsAny<int>()))
308308
.ReturnsAsync(true);
309309

310-
var cts = new CancellationTokenSource();
310+
using var cts = new CancellationTokenSource();
311311
cts.CancelAfter(TimeSpan.FromSeconds(1)); // Cancel after 1 second
312312

313313
// Act

tests/ControlPlane.Api.Tests/NatsEventPublisherTests.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public class NatsEventPublisherTests : IAsyncLifetime
1414
private INatsConnection? _natsConnection;
1515
private NatsEventPublisher? _publisher;
1616
private ILogger<NatsEventPublisher>? _logger;
17+
private ILoggerFactory? _loggerFactory;
1718

1819
public NatsEventPublisherTests()
1920
{
@@ -29,7 +30,8 @@ public async Task InitializeAsync()
2930
var opts = NatsOpts.Default with { Url = _natsContainer.GetConnectionString() };
3031
_natsConnection = new NatsConnection(opts);
3132

32-
_logger = new LoggerFactory().CreateLogger<NatsEventPublisher>();
33+
_loggerFactory = new LoggerFactory();
34+
_logger = _loggerFactory.CreateLogger<NatsEventPublisher>();
3335
_publisher = new NatsEventPublisher(_natsConnection, _logger);
3436

3537
// Initialize streams
@@ -38,6 +40,7 @@ public async Task InitializeAsync()
3840

3941
public async Task DisposeAsync()
4042
{
43+
_loggerFactory?.Dispose();
4144
if (_natsConnection != null)
4245
{
4346
await _natsConnection.DisposeAsync();

tests/ControlPlane.Api.Tests/SchedulerIntegrationTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ public async Task LeaseService_UsesScheduler_ToSelectAppropriateNode()
8080
.ReturnsAsync(true);
8181

8282
// Act - Node-2 requests a lease
83-
var cts = new CancellationTokenSource();
83+
using var cts = new CancellationTokenSource();
8484
cts.CancelAfter(TimeSpan.FromSeconds(1));
8585

8686
const int expectedLeaseCount = 1;

tests/Node.Runtime.Tests/Integration/DLQHandlingIntegrationTests.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public async Task EndToEnd_PoisonMessage_ShouldDeadLetterImmediately()
7777
Options.Create(_options),
7878
_loggerMock.Object);
7979

80-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
80+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
8181

8282
// Act
8383
await service.StartAsync(cts.Token);
@@ -159,7 +159,7 @@ public async Task EndToEnd_SuccessfulProcessing_ShouldCompleteMessage()
159159
Options.Create(_options),
160160
_loggerMock.Object);
161161

162-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
162+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
163163

164164
// Act
165165
await service.StartAsync(cts.Token);
@@ -251,7 +251,7 @@ public async Task EndToEnd_RetryableErrorWithRetries_ShouldEventuallyDeadLetter(
251251
Options.Create(_options),
252252
_loggerMock.Object);
253253

254-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
254+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
255255

256256
// Act
257257
await service.StartAsync(cts.Token);
@@ -327,7 +327,7 @@ public async Task EndToEnd_NonRetryableError_ShouldDeadLetterImmediately()
327327
Options.Create(_options),
328328
_loggerMock.Object);
329329

330-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
330+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
331331

332332
// Act
333333
await service.StartAsync(cts.Token);
@@ -437,7 +437,7 @@ public async Task EndToEnd_MultipleMessages_ShouldHandleEachAppropriately()
437437
Options.Create(_options),
438438
_loggerMock.Object);
439439

440-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
440+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
441441

442442
// Act
443443
await service.StartAsync(cts.Token);

tests/Node.Runtime.Tests/Services/LeasePullServiceTests.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public void Dispose()
6464
public async Task StartAsync_CompletesSuccessfully()
6565
{
6666
// Arrange
67-
var cts = new CancellationTokenSource();
67+
using var cts = new CancellationTokenSource();
6868

6969
// Act
7070
await _service.StartAsync(cts.Token);
@@ -77,7 +77,7 @@ public async Task StartAsync_CompletesSuccessfully()
7777
public async Task StopAsync_CompletesSuccessfully()
7878
{
7979
// Arrange
80-
var cts = new CancellationTokenSource();
80+
using var cts = new CancellationTokenSource();
8181
await _service.StartAsync(cts.Token);
8282

8383
// Act

tests/Node.Runtime.Tests/Services/MessageProcessingServiceTests.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public async Task StartAsync_ShouldInitializeConnector()
103103
{
104104
// Arrange
105105
var service = CreateService();
106-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100));
106+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100));
107107

108108
// Setup to return empty messages to avoid processing loop
109109
_inputConnectorMock.Setup(x => x.ReceiveMessagesAsync(
@@ -128,7 +128,7 @@ public async Task StopAsync_ShouldCloseConnector()
128128
{
129129
// Arrange
130130
var service = CreateService();
131-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100));
131+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(100));
132132

133133
_inputConnectorMock.Setup(x => x.ReceiveMessagesAsync(
134134
It.IsAny<int>(),
@@ -181,7 +181,7 @@ public async Task ProcessMessage_WithSuccessfulExecution_ShouldCompleteMessage()
181181
It.IsAny<CancellationToken>()))
182182
.ReturnsAsync(new MessageCompletionResult { Success = true });
183183

184-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
184+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
185185

186186
// Act
187187
await service.StartAsync(cts.Token);
@@ -220,7 +220,7 @@ public async Task ProcessMessage_WithPoisonMessage_ShouldDeadLetterImmediately()
220220
It.IsAny<CancellationToken>()))
221221
.ReturnsAsync(new MessageCompletionResult { Success = true });
222222

223-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
223+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
224224

225225
// Act
226226
await service.StartAsync(cts.Token);
@@ -279,7 +279,7 @@ public async Task ProcessMessage_WithDeliveryCountAtMax_ShouldProcessAndHandleFa
279279
It.IsAny<CancellationToken>()))
280280
.ReturnsAsync(new MessageCompletionResult { Success = true });
281281

282-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
282+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
283283

284284
// Act
285285
await service.StartAsync(cts.Token);
@@ -338,7 +338,7 @@ public async Task ProcessMessage_WithNonRetryableError_ShouldDeadLetter()
338338
It.IsAny<CancellationToken>()))
339339
.ReturnsAsync(new MessageCompletionResult { Success = true });
340340

341-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
341+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
342342

343343
// Act
344344
await service.StartAsync(cts.Token);
@@ -389,7 +389,7 @@ public async Task ProcessMessage_WithRetryableError_ShouldAbandon()
389389
It.IsAny<CancellationToken>()))
390390
.ReturnsAsync(new MessageCompletionResult { Success = true });
391391

392-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
392+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
393393

394394
// Act
395395
await service.StartAsync(cts.Token);
@@ -438,7 +438,7 @@ public async Task ProcessMessage_WithRetryableErrorAndMaxDeliveryCount_ShouldDea
438438
It.IsAny<CancellationToken>()))
439439
.ReturnsAsync(new MessageCompletionResult { Success = true });
440440

441-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
441+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
442442

443443
// Act
444444
await service.StartAsync(cts.Token);
@@ -491,7 +491,7 @@ public async Task ProcessMessage_WithUnexpectedException_ShouldAbandon()
491491
It.IsAny<CancellationToken>()))
492492
.ReturnsAsync(new MessageCompletionResult { Success = true });
493493

494-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
494+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
495495

496496
// Act
497497
await service.StartAsync(cts.Token);
@@ -548,7 +548,7 @@ public async Task ProcessMessage_WithNonRetryableErrorPatterns_ShouldDeadLetter(
548548
It.IsAny<CancellationToken>()))
549549
.ReturnsAsync(new MessageCompletionResult { Success = true });
550550

551-
var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
551+
using var cts = new CancellationTokenSource(TimeSpan.FromMilliseconds(500));
552552

553553
// Act
554554
await service.StartAsync(cts.Token);

tests/Node.Runtime.Tests/Services/SandboxExecutorServiceTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public async Task ExecuteAsync_HandlesCancellation()
212212
Instructions = "Test instructions"
213213
};
214214

215-
var cts = new CancellationTokenSource();
215+
using var cts = new CancellationTokenSource();
216216

217217
// Start execution and cancel after a short delay
218218
var executionTask = service.ExecuteAsync(spec, "Test input", cts.Token);

0 commit comments

Comments
 (0)