Esempio n. 1
0
        public void Regular_run_should_be_ok()
        {
            // Arrange
            var info = new SandboxRunInfo
            {
                LimitProcessCount = 1,
                MemoryLimitMb     = 10.0f,
                Path        = "whoami",
                TimeLimitMs = 1000
            };

            // Act
            var ior = Sandbox.BeginRun(info);

            // Assert
            ior.Succeed.Should().BeTrue();
            ior.ErrorCode.Should().Be(0);

            ior.ErrorReadStream.Should().NotBeNull();
            ior.ErrorReadStream.CanRead.Should().BeTrue();

            ior.OutputReadStream.Should().NotBeNull();
            ior.OutputReadStream.CanRead.Should().BeTrue();

            ior.InputWriteStream.Should().NotBeNull();
            ior.InputWriteStream.CanWrite.Should().BeTrue();

            ior.InstanceHandle.Should().NotBeNull();

            var res = Sandbox.EndRun(ior.InstanceHandle);

            res.Succeed.Should().BeTrue();
            res.MemoryMb.Should().BeGreaterThan(0);
            res.TimeMs.Should().BeGreaterOrEqualTo(0);

            using (var reader = new StreamReader(ior.OutputReadStream))
            {
                var content        = reader.ReadToEndAsync().Result;
                var actual         = content.Split(new[] { '\\' });
                var actualDomain   = actual[0];
                var actualUsername = actual[1].Trim();

                var domain   = Environment.UserDomainName;
                var username = Environment.UserName;

                Assert.Equal(domain, actualDomain.ToUpperInvariant());
                Assert.Equal(username, actualUsername);
            }
            Process.GetProcessesByName("whoami").Length.Should().Be(0);

            Console.WriteLine("Time: {0}ms", res.TimeMs);
            Console.WriteLine("Memory: {0}MB", res.MemoryMb);
        }
Esempio n. 2
0
        public void Run_can_accept_vary_input(int size)
        {
            // Arrange
            var compiler = new CSharpCompiler();
            var asm      = compiler.Compile(Code);
            var path     = asm.PathToAssembly;

            var info = new SandboxRunInfo
            {
                LimitProcessCount = 1,
                MemoryLimitMb     = 150.0f,
                Path        = path,
                TimeLimitMs = 3000
            };

            // Act
            var ior = Sandbox.BeginRun(info);

            // Assert
            var input    = new string('林', size);
            var expected = string.Format("Hey {0}!", input);

            var writer    = new StreamWriter(ior.InputWriteStream);
            var writeTask = writer.WriteAsync(input).ContinueWith(a => writer.Close());

            var reader   = new StreamReader(ior.OutputReadStream);
            var readTask = reader.ReadToEndAsync();

            var res = Sandbox.EndRun(ior.InstanceHandle);

            writeTask.Wait();
            readTask.Wait();

            res.Succeed.Should().BeTrue();
            res.MemoryMb.Should().BeLessThan(info.MemoryLimitMb);
            res.TimeMs.Should().BeLessThan(info.TimeLimitMs);
            res.ExitCode.Should().Be(0);

            var actual = readTask.Result;

            actual.Should().Be(expected);

            Console.WriteLine("Time: {0}ms", res.TimeMs);
            Console.WriteLine("Memory: {0}MB", res.MemoryMb);

            compiler.Dispose();
        }
Esempio n. 3
0
        public void Create_multiple_process_in_limit_should_be_ok(int limitCount, int createCount, bool result)
        {
            // Arrange
            using (var compiler = new CSharpCompiler())
            {
                var asm = compiler.Compile(Code);

                var info = new SandboxRunInfo
                {
                    LimitProcessCount = limitCount,
                    MemoryLimitMb     = 40.0f,
                    Path        = asm.PathToAssembly,
                    TimeLimitMs = 1000,
                };

                var ior = Sandbox.BeginRun(info);
                using (var writer = new StreamWriter(ior.InputWriteStream))
                {
                    writer.Write(createCount);
                }

                var res = Sandbox.EndRun(ior.InstanceHandle);

                res.Succeed.Should().BeTrue();

                if (result)
                {
                    res.ExitCode.Should().Be(0);
                }
                else
                {
                    res.ExitCode.Should().NotBe(0);
                }

                res.TimeMs.Should().BeLessThan(info.TimeLimitMs);
                res.MemoryMb.Should().BeLessThan(info.MemoryLimitMb);

                Console.WriteLine("Time: {0}ms", res.TimeMs);
                Console.WriteLine("Memory: {0}MB", res.MemoryMb);
                Console.WriteLine(info.Path);
                Thread.Sleep(10);
            }
        }
Esempio n. 4
0
        public void Run_can_accept_unicode_input()
        {
            // Arrange
            var compiler = new CSharpCompiler();
            var asm      = compiler.Compile(Code);
            var path     = asm.PathToAssembly;

            var info = new SandboxRunInfo
            {
                LimitProcessCount = 1,
                MemoryLimitMb     = 10.0f,
                Path        = path,
                TimeLimitMs = 1000
            };

            // Act
            var ior = Sandbox.BeginRun(info);

            // Assert
            using (var writer = new StreamWriter(ior.InputWriteStream))
            {
                writer.WriteAsync("Flash中文");
            }
            var reader   = new StreamReader(ior.OutputReadStream);
            var readTask = reader.ReadToEndAsync();

            var res = Sandbox.EndRun(ior.InstanceHandle);

            readTask.Result.Should().Be("Hey Flash中文!");

            res.Succeed.Should().BeTrue();
            res.MemoryMb.Should().BeGreaterThan(0);
            res.TimeMs.Should().BeGreaterOrEqualTo(0);
            compiler.Dispose();

            Console.WriteLine("Time: {0}ms", res.TimeMs);
            Console.WriteLine("Memory: {0}MB", res.MemoryMb);
        }