Files
microsoft--agent-framework/dotnet/tests/Microsoft.Agents.AI.Tools.Shell.UnitTests/ShellResolverTests.cs
T
wehub-resource-sync db620d33df
CodeQL / Analyze (csharp) (push) Waiting to run
CodeQL / Analyze (python) (push) Waiting to run
dotnet-build-and-test / dotnet-test-functions (push) Has been cancelled
dotnet-build-and-test / paths-filter (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Debug, windows-latest, net9.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, ubuntu-latest, net8.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-build (Release, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, ubuntu-latest, net10.0) (push) Has been cancelled
dotnet-build-and-test / dotnet-test (Release, integration, true, windows-latest, net472) (push) Has been cancelled
dotnet-build-and-test / dotnet-foundry-hosted-it (push) Has been cancelled
dotnet-build-and-test / dotnet-build-and-test-check (push) Has been cancelled
dotnet-build-and-test / Integration Test Report (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:25 +08:00

68 lines
2.2 KiB
C#

// Copyright (c) Microsoft. All rights reserved.
namespace Microsoft.Agents.AI.Tools.Shell.UnitTests;
/// <summary>
/// Tests for <see cref="ShellResolver.ResolveArgv"/>: bash-only flags like
/// <c>--noprofile</c> / <c>--norc</c> must only be passed to bash; other
/// POSIX shells (sh, zsh, dash, ash, ksh, busybox) reject or mishandle them.
/// </summary>
public class ShellResolverTests
{
private static readonly string[] s_shCommandArgv = new[] { "-c", "echo hi" };
private static readonly string[] s_bashCommandArgv = new[] { "--noprofile", "--norc", "-c", "echo hi" };
private static readonly string[] s_bashPersistentArgv = new[] { "--noprofile", "--norc" };
private static ResolvedShell ResolveSingle(string binary) => ShellResolver.ResolveArgv(new[] { binary });
[Theory]
[InlineData("/bin/sh")]
[InlineData("/bin/dash")]
[InlineData("/bin/ash")]
[InlineData("/usr/bin/busybox")]
[InlineData("/usr/bin/zsh")]
[InlineData("/bin/ksh")]
public void ShVariants_StatelessArgv_OmitBashOnlyFlags(string binary)
{
var argv = ResolveSingle(binary).StatelessArgvForCommand("echo hi");
Assert.Equal(s_shCommandArgv, argv);
Assert.DoesNotContain("--noprofile", argv);
Assert.DoesNotContain("--norc", argv);
}
[Theory]
[InlineData("/bin/sh")]
[InlineData("/bin/dash")]
[InlineData("/bin/ash")]
[InlineData("/usr/bin/busybox")]
[InlineData("/usr/bin/zsh")]
[InlineData("/bin/ksh")]
public void ShVariants_PersistentArgv_OmitBashOnlyFlags(string binary)
{
var argv = ResolveSingle(binary).PersistentArgv();
Assert.Empty(argv);
}
[Theory]
[InlineData("/bin/bash")]
[InlineData("/usr/local/bin/bash")]
public void BashVariants_StatelessArgv_IncludeBashFlags(string binary)
{
var argv = ResolveSingle(binary).StatelessArgvForCommand("echo hi");
Assert.Equal(s_bashCommandArgv, argv);
}
[Theory]
[InlineData("/bin/bash")]
[InlineData("/usr/local/bin/bash")]
public void BashVariants_PersistentArgv_IncludeBashFlags(string binary)
{
var argv = ResolveSingle(binary).PersistentArgv();
Assert.Equal(s_bashPersistentArgv, argv);
}
}