Files
PowerShell/src/ps_test/test_CorePsPlatform.cs
T

256 lines
7.9 KiB
C#
Raw Normal View History

2015-06-11 13:40:07 -07:00
using Xunit;
using System;
using System.IO;
2015-08-07 16:56:19 -07:00
using System.Diagnostics;
using System.Management.Automation;
2015-06-11 13:40:07 -07:00
namespace PSTests
{
public static class PlatformTests
{
[Fact]
public static void TestIsLinux()
2015-06-11 13:40:07 -07:00
{
Assert.True(Platform.IsLinux());
}
[Fact]
public static void TestHasCom()
{
Assert.False(Platform.HasCom());
2015-06-11 13:40:07 -07:00
}
2015-06-11 15:15:45 -07:00
[Fact]
2015-06-11 15:15:45 -07:00
public static void TestHasAmsi()
{
Assert.False(Platform.HasAmsi());
}
[Fact]
public static void TestUsesCodeSignedAssemblies()
{
Assert.False(Platform.UsesCodeSignedAssemblies());
}
2015-06-15 15:17:15 -07:00
[Fact]
2015-06-15 15:17:15 -07:00
public static void TestHasDriveAutoMounting()
{
Assert.False(Platform.HasDriveAutoMounting());
}
2015-07-06 12:46:38 -07:00
[Fact]
2015-07-06 12:46:38 -07:00
public static void TestHasRegistrySupport()
{
Assert.False(Platform.HasRegistrySupport());
}
2015-07-24 13:11:18 -07:00
[Fact]
public static void TestGetUserName()
{
2015-08-07 16:56:19 -07:00
var startInfo = new ProcessStartInfo
{
FileName = @"/usr/bin/env",
Arguments = "whoami",
RedirectStandardOutput = true,
UseShellExecute = false
};
2015-08-13 15:45:13 -07:00
using (Process process = Process.Start(startInfo))
{
// Get output of call to whoami without trailing newline
string username = process.StandardOutput.ReadToEnd().Trim();
process.WaitForExit();
// The process should return an exit code of 0 on success
Assert.Equal(0, process.ExitCode);
// It should be the same as what our platform code returns
Assert.Equal(username, Platform.NonWindowsGetUserName());
}
2015-07-24 13:11:18 -07:00
}
[Fact]
public static void TestGetMachineName()
{
var startInfo = new ProcessStartInfo
{
FileName = @"/usr/bin/env",
Arguments = "hostname",
RedirectStandardOutput = true,
UseShellExecute = false
};
using (Process process = Process.Start(startInfo))
{
// Get output of call to hostname without trailing newline
string hostname = process.StandardOutput.ReadToEnd().Trim();
process.WaitForExit();
// The process should return an exit code of 0 on success
Assert.Equal(0, process.ExitCode);
// It should be the same as what our platform code returns
Assert.Equal(hostname, Platform.NonWindowsGetMachineName());
}
}
[Fact]
2015-09-03 16:41:14 -07:00
public static void TestExistantFileIsHardLink()
{
string path = @"/tmp/MyTest";
if (!File.Exists(path))
{
File.Create(path);
}
// Create a file to write to using StreamWriter.
2015-09-03 16:42:28 -07:00
// convert string to stream. On Windows, this appears to be handled, but on *nix,
// we apparently need to convert to UTF8.
byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(path);
MemoryStream stream = new MemoryStream(byteArray);
// Convert `path` string to FileSystemInfo data type. And now, it should return true
FileSystemInfo fd = new FileInfo(path);
Assert.True(Platform.NonWindowsIsHardLink(fd));
}
[Fact]
2015-09-03 16:41:14 -07:00
public static void TestDirectoryIsHardLink()
{
string path = @"/tmp";
// Convert `path` string to FileSystemInfo data type. And now, it should return true
FileSystemInfo fd = new FileInfo(path);
Assert.False(Platform.NonWindowsIsHardLink(fd));
}
[Fact]
2015-09-03 16:41:14 -07:00
public static void TestNonExistantIsHardLink()
{
// A file that should *never* exist on a test machine:
string path = @"/tmp/ThisFileShouldNotExistOnTestMachines";
// If the file exists, then there's a larger issue that needs to be looked at
Assert.False(File.Exists(path));
// Convert `path` string to FileSystemInfo data type. And now, it should return true
FileSystemInfo fd = new FileInfo(path);
Assert.False(Platform.NonWindowsIsHardLink(fd));
}
[Fact]
public static void TestCommandLineArgvReturnsAnElement()
{
string testCommand= "Today";
int count = 0;
string[] retval = Platform.NonWindowsCommandLineToArgvW(testCommand, out count);
Assert.Equal(1, count);
}
[Fact]
public static void TestCommandLineArgvWWithSpaces()
{
string testCommand= "Today is a good day or is it";
int count = 0;
string[] retval = Platform.NonWindowsCommandLineToArgvW(testCommand, out count);
Assert.Equal("Today", retval[0]);
Assert.Equal("is", retval[1]);
Assert.Equal("a", retval[2]);
Assert.Equal("good", retval[3]);
Assert.Equal("day", retval[4]);
Assert.Equal("or", retval[5]);
Assert.Equal("is", retval[6]);
Assert.Equal("it", retval[7]);
}
[Fact]
public static void TestCommandLineToArgvWTabsAreTreatedAsSpaces()
{
string testCommand = "Today \t is a good day";
int count = 0;
string[] retval = Platform.NonWindowsCommandLineToArgvW(testCommand, out count);
Assert.Equal("Today", retval[0]);
Assert.Equal("is", retval[1]);
Assert.Equal("a", retval[2]);
Assert.Equal("good", retval[3]);
Assert.Equal("day", retval[4]);
}
[Fact]
public static void TestCommandLineToArgvWQuotesAreArgs()
{
string testCommand = "Today is \"a good\" day";
int count = 0;
string[] retval = Platform.NonWindowsCommandLineToArgvW(testCommand, out count);
Assert.Equal(4, count);
Assert.Equal("Today", retval[0]);
Assert.Equal("is", retval[1]);
Assert.Equal("\"a good\"", retval[2]);
Assert.Equal("day", retval[3]);
}
[Fact]
public static void TestCommandLineToArgvWEvenNumberBackSlashes()
{
string test1 = "a\\b c d";
string test2 = "a\\b\\c d";
string test3 = "a \\b\\c\\d";
string test4 = "a\\\\\\b";
int count = 0;
string[] a = Platform.NonWindowsCommandLineToArgvW(test1, out count);
Assert.Equal(3, count);
Assert.Equal("a\\b", a[0]);
Assert.Equal("c", a[1]);
Assert.Equal("d", a[2]);
string[] b = Platform.NonWindowsCommandLineToArgvW(test2, out count);
Assert.Equal(2, count);
Assert.Equal("a\\b\\c", b[0]);
Assert.Equal("d", b[1]);
string[] c = Platform.NonWindowsCommandLineToArgvW(test3, out count);
Assert.Equal(2, count);
Assert.Equal("a", c[0]);
Assert.Equal("\\b\\c\\d", c[1]);
string[] d = Platform.NonWindowsCommandLineToArgvW(test4, out count);
Assert.Equal(1, count);
Assert.Equal("a\\\\\\b", d[0]);
}
[Fact]
public static void TestCommandLineToArgvwOddNumberWithBackSlashes()
{
string test1 = "a\\\"b";
string test2 = "a\\\\\\\"b";
int count = 0;
string[] a = Platform.NonWindowsCommandLineToArgvW(test1, out count);
Assert.Equal(1, count);
Assert.Equal("a\\\"b", a[0]);
string[] b = Platform.NonWindowsCommandLineToArgvW(test2, out count);
Assert.Equal(1, count);
Assert.Equal("a\\\\\\\"b", b[0]);
}
2015-06-11 13:40:07 -07:00
}
}