Skip to content

Commit ddfe093

Browse files
author
Rakeshwar Reddy Kambaiahgari
committed
Fix LLM review findings: infinite recursion, nginx stop, fire-and-forget, async deadlock, port mismatch, dispose
safety
1 parent ef36751 commit ddfe093

5 files changed

Lines changed: 32 additions & 15 deletions

File tree

src/VirtualClient/VirtualClient.Actions.UnitTests/AspNetBench/BombardierExecutorTests.cs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ namespace VirtualClient.Actions
66
using System;
77
using System.Collections.Generic;
88
using System.Threading;
9+
using System.Threading.Tasks;
910
using Microsoft.Extensions.DependencyInjection;
1011
using Moq;
1112
using NUnit.Framework;
@@ -46,40 +47,40 @@ public void SetupDefaults()
4647
}
4748

4849
[Test]
49-
public void BombardierExecutorGetBombardierVersionParsesVersionWithVPrefix()
50+
public async Task BombardierExecutorGetBombardierVersionParsesVersionWithVPrefix()
5051
{
5152
this.mockFixture.SetupProcessOutput(".*--version.*", "bombardier version v1.2.5 linux/arm64");
5253

5354
using (TestBombardierExecutor executor = new TestBombardierExecutor(this.mockFixture.Dependencies, this.mockFixture.Parameters))
5455
{
5556
executor.PackageDirectory = this.mockPackage.Path;
56-
string version = executor.GetBombardierVersion(EventContext.None, CancellationToken.None);
57+
string version = await executor.GetBombardierVersionAsync(EventContext.None, CancellationToken.None);
5758
Assert.AreEqual("1.2.5", version);
5859
}
5960
}
6061

6162
[Test]
62-
public void BombardierExecutorGetBombardierVersionParsesVersionWithoutVPrefix()
63+
public async Task BombardierExecutorGetBombardierVersionParsesVersionWithoutVPrefix()
6364
{
6465
this.mockFixture.SetupProcessOutput(".*--version.*", "bombardier version 1.2.5");
6566

6667
using (TestBombardierExecutor executor = new TestBombardierExecutor(this.mockFixture.Dependencies, this.mockFixture.Parameters))
6768
{
6869
executor.PackageDirectory = this.mockPackage.Path;
69-
string version = executor.GetBombardierVersion(EventContext.None, CancellationToken.None);
70+
string version = await executor.GetBombardierVersionAsync(EventContext.None, CancellationToken.None);
7071
Assert.AreEqual("1.2.5", version);
7172
}
7273
}
7374

7475
[Test]
75-
public void BombardierExecutorGetBombardierVersionReturnsNullOnUnparsableOutput()
76+
public async Task BombardierExecutorGetBombardierVersionReturnsNullOnUnparsableOutput()
7677
{
7778
this.mockFixture.SetupProcessOutput(".*--version.*", "unrecognized output");
7879

7980
using (TestBombardierExecutor executor = new TestBombardierExecutor(this.mockFixture.Dependencies, this.mockFixture.Parameters))
8081
{
8182
executor.PackageDirectory = this.mockPackage.Path;
82-
string version = executor.GetBombardierVersion(EventContext.None, CancellationToken.None);
83+
string version = await executor.GetBombardierVersionAsync(EventContext.None, CancellationToken.None);
8384
Assert.IsNull(version);
8485
}
8586
}

src/VirtualClient/VirtualClient.Actions.UnitTests/Nginx/NginxServerExecutorTest.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ public async Task NginxServerExecutorResetsServerAsExpected(PlatformID platform,
274274
}
275275
else
276276
{
277-
Assert.AreEqual(arguments, "systemctl disable nginx", NginxCommand.Stop.ConvertToCommandArgs());
277+
Assert.AreEqual(arguments, "systemctl stop nginx", NginxCommand.Stop.ConvertToCommandArgs());
278278
}
279279

280280
Assert.AreEqual(command, "sudo");
@@ -328,7 +328,7 @@ public void NginxServerExecutorWillResetServerDuringDispose(PlatformID platform,
328328
}
329329
else
330330
{
331-
Assert.AreEqual(arguments, "systemctl disable nginx", NginxCommand.Stop.ConvertToCommandArgs());
331+
Assert.AreEqual(arguments, "systemctl stop nginx", NginxCommand.Stop.ConvertToCommandArgs());
332332
}
333333

334334
Assert.AreEqual(command, "sudo");
@@ -379,7 +379,7 @@ public async Task NginxServerExecutorRunsAsExpected(PlatformID platform, Archite
379379
shellScriptCalls++;
380380
Assert.AreEqual(workingDir, packagePath);
381381
}
382-
else if (new[] { "systemctl restart nginx", "systemctl disable nginx"}.Contains(arguments, StringComparer.OrdinalIgnoreCase))
382+
else if (new[] { "systemctl restart nginx", "systemctl stop nginx"}.Contains(arguments, StringComparer.OrdinalIgnoreCase))
383383
{
384384
nginxServiceCalls++;
385385
Assert.IsNull(workingDir);
@@ -445,7 +445,7 @@ public void NginxServerExecutorWillResetServerIfFailure(PlatformID platform, Arc
445445
// This will ensure nginx version is empty therefore ArgumentException will be thrown.
446446
this.memoryProcess.StandardError = new ConcurrentBuffer(new StringBuilder(string.Empty));
447447
}
448-
else if (arguments == "systemctl disable nginx" || arguments == "bash reset.sh")
448+
else if (arguments == "systemctl stop nginx" || arguments == "bash reset.sh")
449449
{
450450
}
451451
else

src/VirtualClient/VirtualClient.Actions/ASPNET/AspNetOrchardServerExecutor.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,16 @@ protected override void Dispose(bool disposing)
144144
{
145145
if (!this.disposed)
146146
{
147-
this.KillServerInstancesAsync(null, CancellationToken.None)
148-
.GetAwaiter().GetResult();
147+
try
148+
{
149+
this.KillServerInstancesAsync(EventContext.None, CancellationToken.None)
150+
.GetAwaiter().GetResult();
151+
}
152+
catch
153+
{
154+
// Best-effort cleanup during dispose.
155+
}
156+
149157
this.disposed = true;
150158
}
151159
}

src/VirtualClient/VirtualClient.Actions/ASPNET/AspNetServerExecutor.cs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,16 @@ protected override void Dispose(bool disposing)
155155
{
156156
if (!this.disposed)
157157
{
158-
this.KillServerInstancesAsync(null, CancellationToken.None)
159-
.GetAwaiter().GetResult();
158+
try
159+
{
160+
this.KillServerInstancesAsync(EventContext.None, CancellationToken.None)
161+
.GetAwaiter().GetResult();
162+
}
163+
catch
164+
{
165+
// Best-effort cleanup during dispose.
166+
}
167+
160168
this.disposed = true;
161169
}
162170
}

src/VirtualClient/VirtualClient.Actions/Nginx/NginxExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public static string ConvertToCommandArgs(this NginxCommand command)
5050
return "systemctl restart nginx";
5151

5252
case NginxCommand.Stop:
53-
return "systemctl disable nginx";
53+
return "systemctl stop nginx";
5454

5555
case NginxCommand.GetVersion:
5656
return "nginx -V";

0 commit comments

Comments
 (0)