Implements tests for Shell class
This commit is contained in:
Родитель
51de7d8be8
Коммит
aeb8c60338
|
@ -12,11 +12,39 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
using System;
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Steeltoe.Tooling.System
|
namespace Steeltoe.Tooling.System
|
||||||
{
|
{
|
||||||
public class Shell
|
public class Shell
|
||||||
{
|
{
|
||||||
|
public string Command { get; private set; }
|
||||||
|
public string Arguments { get; private set; }
|
||||||
|
public int ExitCode { get; private set; }
|
||||||
|
public string Out { get; private set; }
|
||||||
|
public string Error { get; private set; }
|
||||||
|
|
||||||
|
public void Run(string command, string arguments = null, string workingDirectory = null)
|
||||||
|
{
|
||||||
|
Command = command;
|
||||||
|
Arguments = arguments;
|
||||||
|
var pinfo = new ProcessStartInfo(Command, Arguments)
|
||||||
|
{
|
||||||
|
RedirectStandardOutput = true,
|
||||||
|
RedirectStandardError = true,
|
||||||
|
WorkingDirectory = workingDirectory
|
||||||
|
};
|
||||||
|
var proc = Process.Start(pinfo);
|
||||||
|
proc.WaitForExit();
|
||||||
|
ExitCode = proc.ExitCode;
|
||||||
|
using (var pout = proc.StandardOutput)
|
||||||
|
{
|
||||||
|
Out = pout.ReadToEnd();
|
||||||
|
}
|
||||||
|
using (var perr = proc.StandardError)
|
||||||
|
{
|
||||||
|
Error = perr.ReadToEnd();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,16 +12,119 @@
|
||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
using Shouldly;
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel;
|
||||||
|
using System.IO;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
|
|
||||||
namespace Steeltoe.Tooling.System.Test
|
namespace Steeltoe.Tooling.System.Test
|
||||||
{
|
{
|
||||||
public class ShellTest
|
public class ShellTest
|
||||||
{
|
{
|
||||||
[Fact]
|
private static string testDir;
|
||||||
public void TestThis()
|
private static string aDir;
|
||||||
|
private static string anotherDir;
|
||||||
|
private static string listCommand;
|
||||||
|
private static string errorCommand;
|
||||||
|
|
||||||
|
private Shell sh;
|
||||||
|
|
||||||
|
static ShellTest()
|
||||||
{
|
{
|
||||||
|
// setup a test sandbox
|
||||||
|
testDir = Path.Combine(Directory.GetCurrentDirectory(), "shelltest");
|
||||||
|
Directory.CreateDirectory(testDir);
|
||||||
|
// setup up list and error commands
|
||||||
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
|
{
|
||||||
|
listCommand = "dir";
|
||||||
|
errorCommand = Path.Combine(testDir, "error.bat");
|
||||||
|
File.WriteAllText(errorCommand, "exit /B 1\n");
|
||||||
|
}
|
||||||
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX))
|
||||||
|
{
|
||||||
|
listCommand = "ls";
|
||||||
|
errorCommand = "/usr/bin/false";
|
||||||
|
}
|
||||||
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
|
{
|
||||||
|
listCommand = "ls";
|
||||||
|
errorCommand = "/usr/false";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new Exception("Don't know how to list a directory on " + RuntimeInformation.OSDescription);
|
||||||
|
}
|
||||||
|
// setup some test directories
|
||||||
|
aDir = Path.Combine(testDir, "aDir");
|
||||||
|
Directory.CreateDirectory(aDir);
|
||||||
|
File.WriteAllText(Path.Combine(aDir, "aFile"), string.Empty);
|
||||||
|
anotherDir = Path.Combine(testDir, "anotherDir");
|
||||||
|
Directory.CreateDirectory(anotherDir);
|
||||||
|
File.WriteAllText(Path.Combine(anotherDir, "anotherFile"), string.Empty);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ShellTest()
|
||||||
|
{
|
||||||
|
sh = new Shell();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestConstructor()
|
||||||
|
{
|
||||||
|
sh.Command.ShouldBeNull();
|
||||||
|
sh.Arguments.ShouldBeNull();
|
||||||
|
sh.ExitCode.ShouldBe(0);
|
||||||
|
sh.Out.ShouldBeNull();
|
||||||
|
sh.Error.ShouldBeNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestRun()
|
||||||
|
{
|
||||||
|
sh.Run(listCommand);
|
||||||
|
sh.Command.ShouldBe(listCommand);
|
||||||
|
sh.Arguments.ShouldBeNull();
|
||||||
|
sh.ExitCode.ShouldBe(0);
|
||||||
|
sh.Out.ShouldNotBeEmpty();
|
||||||
|
sh.Error.ShouldBeEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestRunWithArguments()
|
||||||
|
{
|
||||||
|
sh.Run(listCommand, aDir);
|
||||||
|
sh.Command.ShouldBe(listCommand);
|
||||||
|
sh.Arguments.ShouldBe(aDir);
|
||||||
|
sh.ExitCode.ShouldBe(0);
|
||||||
|
sh.Out.Trim().ShouldBe("aFile");
|
||||||
|
sh.Error.ShouldBeEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestRunWithWorkingDirectory()
|
||||||
|
{
|
||||||
|
sh.Run(listCommand, workingDirectory: anotherDir);
|
||||||
|
sh.Command.ShouldBe(listCommand);
|
||||||
|
sh.Arguments.ShouldBeNull();
|
||||||
|
sh.ExitCode.ShouldBe(0);
|
||||||
|
sh.Out.Trim().ShouldBe("anotherFile");
|
||||||
|
sh.Error.ShouldBeEmpty();
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestRunCommandError()
|
||||||
|
{
|
||||||
|
sh.Run(errorCommand);
|
||||||
|
sh.ExitCode.ShouldNotBe(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
public void TestRunSystemError()
|
||||||
|
{
|
||||||
|
Assert.Throws<Win32Exception>(() => sh.Run("NoSuchCommand"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
<PropertyGroup>
|
||||||
<PropertyGroup>
|
<TargetFramework>netcoreapp2.1</TargetFramework>
|
||||||
<TargetFramework>netcoreapp2.1</TargetFramework>
|
<IsPackable>false</IsPackable>
|
||||||
|
</PropertyGroup>
|
||||||
<IsPackable>false</IsPackable>
|
<ItemGroup>
|
||||||
</PropertyGroup>
|
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0" />
|
||||||
|
<PackageReference Include="Shouldly" Version="3.0.0" />
|
||||||
<ItemGroup>
|
<PackageReference Include="xunit" Version="2.3.1" />
|
||||||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.7.0"/>
|
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1" />
|
||||||
<PackageReference Include="xunit" Version="2.3.1"/>
|
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1" />
|
||||||
<PackageReference Include="xunit.runner.visualstudio" Version="2.3.1"/>
|
</ItemGroup>
|
||||||
<DotNetCliToolReference Include="dotnet-xunit" Version="2.3.1"/>
|
<ItemGroup>
|
||||||
</ItemGroup>
|
<ProjectReference Include="..\..\src\Steeltoe.Tooling.System\Steeltoe.Tooling.System.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
Загрузка…
Ссылка в новой задаче