예제 #1
0
        public async Task ShouldGenerateCorrectConfigurationPath()
        {
            string mockLogonCommand = "Mock logon command";
            string filePath         = string.Empty;

            IOptions                options                 = new Options();
            Configuration           configuration           = new Configuration();
            XmlSerializer           xmlSerializer           = new XmlSerializer(typeof(Configuration));
            XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
            XmlWriterSettings       xmlWriterSettings       = new XmlWriterSettings {
                Indent = true, OmitXmlDeclaration = true
            };
            Func <string, byte[], CancellationToken, Task> writeAllBytesAsync = (path, content, token) =>
            {
                filePath = path;
                return(Task.CompletedTask);
            };

            ISandboxConfigurationBuilder sandboxConfigurationBuilder = new SandboxConfigurationBuilder(
                options,
                configuration,
                xmlSerializer,
                xmlSerializerNamespaces,
                xmlWriterSettings,
                writeAllBytesAsync);

            await sandboxConfigurationBuilder.Build(mockLogonCommand);

            string expected = Path.Combine(options.RootFilesDirectoryLocation, options.SandboxConfigurationFileName);
            string actual   = filePath;

            Assert.Equal(expected, actual);
        }
예제 #2
0
        public void ShouldInitializeWithOption()
        {
            IOptions options = new Options();

            SandboxConfigurationBuilder sandboxConfigurationBuilder = new SandboxConfigurationBuilder(options);

            // We basically check here that no exception is thrown during initialization.
            Assert.True(true);
        }
예제 #3
0
        public async Task ShouldGenerateCorrectConfigurationContent()
        {
            UTF8Encoding uTF8Encoding     = new UTF8Encoding();
            string       builderContent   = string.Empty;
            string       mockLogonCommand = "Mock logon command";

            IOptions options = new Options()
            {
                RootFilesDirectoryLocation = @"C:\Sandbox",
            };
            Configuration           configuration           = new Configuration();
            XmlSerializer           xmlSerializer           = new XmlSerializer(typeof(Configuration));
            XmlSerializerNamespaces xmlSerializerNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
            XmlWriterSettings       xmlWriterSettings       = new XmlWriterSettings {
                Indent = true, OmitXmlDeclaration = true
            };
            Func <string, byte[], CancellationToken, Task> writeAllBytesAsync = (path, content, token) =>
            {
                builderContent = uTF8Encoding.GetString(content);
                return(Task.CompletedTask);
            };

            ISandboxConfigurationBuilder sandboxConfigurationBuilder = new SandboxConfigurationBuilder(
                options,
                configuration,
                xmlSerializer,
                xmlSerializerNamespaces,
                xmlWriterSettings,
                writeAllBytesAsync);

            await sandboxConfigurationBuilder.Build(mockLogonCommand);

            string actual   = builderContent;
            string expected = @"<Configuration>
  <VGpu>Disabled</VGpu>
  <Networking>Default</Networking>
  <MappedFolders>
    <MappedFolder>
      <HostFolder>C:\Sandbox</HostFolder>
      <SandboxFolder>C:\Users\WDAGUtilityAccount\Desktop\Sandbox\</SandboxFolder>
      <ReadOnly>false</ReadOnly>
    </MappedFolder>
  </MappedFolders>
  <LogonCommand>
    <Command>Mock logon command</Command>
  </LogonCommand>
  <AudioInput>Default</AudioInput>
  <VideoInput>Default</VideoInput>
  <ProtectedClient>Default</ProtectedClient>
  <PrinterRedirection>Default</PrinterRedirection>
  <ClipboardRedirection>Default</ClipboardRedirection>
  <MemoryInMB>0</MemoryInMB>
</Configuration>";

            Assert.Equal(expected, actual, ignoreLineEndingDifferences: true);
        }
예제 #4
0
        public void ShouldThrowArgumentNullExceptionWithoutLiteralScriptFactory()
        {
            IOptions options = new Options();
            ISandboxConfigurationBuilder configurationBuilder = new SandboxConfigurationBuilder(options);
            Action <string>     createDirectory   = path => { };
            Action <string>     deleteFiles       = path => { };
            Action <string>     deleteDirectories = path => { };
            Func <string, Task> startProcess      = path => Task.CompletedTask;

            Assert.Throws <ArgumentNullException>(() => new Sandbox(options, configurationBuilder, createDirectory, deleteFiles, deleteDirectories, startProcess, null));
        }
예제 #5
0
        public void ShouldThrowArgumentNullExceptionWithoutEnumerateFiles()
        {
            IOptions options = new Options();
            ISandboxConfigurationBuilder configurationBuilder = new SandboxConfigurationBuilder(options);
            Action <string>     createDirectory   = path => { };
            Action <string>     deleteDirectories = path => { };
            Func <string, Task> startProcess      = path => Task.CompletedTask;
            Func <IList <string>, IPowershellTranslator, string, IOptions, Task <LiteralScript> > literalScriptFactory = (scripts, translator, name, options) =>
            {
                Func <string, byte[], CancellationToken, Task> writeAllBytes = (path, content, token) => Task.CompletedTask;

                return(Task.FromResult(new LiteralScript(scripts, translator, name, writeAllBytes)));
            };

            Assert.Throws <ArgumentNullException>(() => new Sandbox(options, configurationBuilder, createDirectory, null, deleteDirectories, startProcess, literalScriptFactory));
        }
예제 #6
0
        public void ShouldInitializeWithAllParameters()
        {
            IOptions options = new Options();
            ISandboxConfigurationBuilder configurationBuilder = new SandboxConfigurationBuilder(new Options());
            Action <string>     createDirectory   = path => { };
            Action <string>     deleteFiles       = path => { };
            Action <string>     deleteDirectories = path => { };
            Func <string, Task> startProcess      = path => Task.CompletedTask;
            Func <IList <string>, IPowershellTranslator, string, IOptions, Task <LiteralScript> > literalScriptFactory = (scripts, translator, name, options) =>
            {
                Func <string, byte[], CancellationToken, Task> writeAllBytes = (path, content, token) => Task.CompletedTask;

                return(Task.FromResult(new LiteralScript(scripts, translator, name, writeAllBytes)));
            };

            new Sandbox(options, configurationBuilder, createDirectory, deleteFiles, deleteDirectories, startProcess, literalScriptFactory);

            Assert.True(true);
        }
예제 #7
0
        public async Task ShouldBuildCorrectMainScriptContentWithSingleScript()
        {
            IList <string> actualScripts = new List <string>();

            IOptions options = new Options();
            ISandboxConfigurationBuilder configurationBuilder = new SandboxConfigurationBuilder(new Options());

            Action <string> createDirectory   = path => { };
            Action <string> deleteFiles       = path => { };
            Action <string> deleteDirectories = path => { };

            Func <string, Task> startProcess = path => Task.CompletedTask;
            Func <string, byte[], CancellationToken, Task> writeAllBytes = (path, content, token) => Task.CompletedTask;
            Func <string, string, CancellationToken, Task> copyFiles     = (source, destination, token) => Task.CompletedTask;
            Func <IList <string>, IPowershellTranslator, string, IOptions, Task <LiteralScript> > literalScriptFactory = async(scripts, translator, name, options) =>
            {
                actualScripts = scripts;
                var literalScript = new LiteralScript(scripts, translator, name, writeAllBytes);
                await literalScript.Process(options);

                return(literalScript);
            };

            var sandbox = new Sandbox(options, configurationBuilder, createDirectory, deleteFiles, deleteDirectories, startProcess, literalScriptFactory);
            await sandbox.Run(
                // Raw script that will be executed
                new LiteralScript(new List <string>()
            {
                @"Start-Process 'C:\windows\system32\notepad.exe'"
            },
                                  new PowershellTranslator(null, () => 1000),
                                  "mockScriptName1.ps1",
                                  writeAllBytes));

            IList <string> expected = new List <string>()
            {
                @"powershell.exe -ExecutionPolicy Bypass -File C:\Users\WDAGUtilityAccount\Desktop\Sandbox\mockScriptName1.ps1 3>&1 2>&1 > ""C:\Users\WDAGUtilityAccount\Desktop\Log_1000.txt""",
            };
            IList <string> actual = actualScripts;

            Assert.Equal(expected, actual);
        }
예제 #8
0
        public void IsISandboxConfigurationBuilderAssignableToSandboxConfigurationBuilder()
        {
            SandboxConfigurationBuilder sandboxConfigurationBuilder = new SandboxConfigurationBuilder(new Options());

            Assert.IsAssignableFrom <ISandboxConfigurationBuilder>(sandboxConfigurationBuilder);
        }