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
68 lines
2.2 KiB
C#
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);
|
|
}
|
|
}
|