public void CreateSandboxedInstanceWithFullTrustListTest()
        {
            PermissionSet internet = PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Internet);

            RemoteDomainObject fullTrustListInternet =
                SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet, new Assembly[] { typeof(object).Assembly, typeof(System.Diagnostics.Debug).Assembly });

            // Ensure we got Internet permissions
            Assert.IsTrue(fullTrustListInternet.Demand(internet));
            Assert.IsFalse(fullTrustListInternet.Demand(PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.LocalIntranet)));

            // We should share with other objects having the same full trust list
            RemoteDomainObject fullTrustListInternet2 =
                SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet, new Assembly[] { typeof(object).Assembly, typeof(System.Diagnostics.Debug).Assembly });

            Assert.AreEqual(fullTrustListInternet.AppDomainId, fullTrustListInternet2.AppDomainId);

            // We shouldn't share with a non-full-trust-list bearing Internet object
            RemoteDomainObject noFullTrustListInternet =
                SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet, null);

            Assert.AreNotEqual(fullTrustListInternet.AppDomainId, noFullTrustListInternet.AppDomainId);

            // Nor should we share with assemblies with a different full trust list
            RemoteDomainObject differentFullTrustListInternet =
                SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet, new Assembly[] { typeof(object).Assembly });

            Assert.AreNotEqual(fullTrustListInternet.AppDomainId, differentFullTrustListInternet.AppDomainId);
        }
        public void CreateSandboxedInstanceDefaultTest()
        {
            RemoteDomainObject object1 = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>();

            // Ensure we got Execution permission
            Assert.IsTrue(object1.Demand(PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Execution)));
            Assert.IsFalse(object1.Demand(PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Internet)));

            // Ensure that we reuse the same domain for multiple objects
            RemoteDomainObject object2 = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>();

            Assert.AreEqual(object1.AppDomainId, object2.AppDomainId);
        }
        public void CreateSandboxedInstanceInternetTest()
        {
            PermissionSet      internet = PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Internet);
            RemoteDomainObject object1  = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet);

            // Ensure we got Internet permissions
            Assert.IsTrue(object1.Demand(internet));
            Assert.IsFalse(object1.Demand(PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.LocalIntranet)));

            // Ensure we reuse the same domain for multiple objects
            RemoteDomainObject object2 = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet);

            Assert.AreEqual(object1.AppDomainId, object2.AppDomainId);
        }
        public void CreateSandboxedInstanceMultipleSandboxesTest()
        {
            PermissionSet      execution       = PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Execution);
            RemoteDomainObject executionObject = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(execution);

            Assert.IsTrue(executionObject.Demand(execution));
            Assert.IsFalse(executionObject.Demand(new PermissionSet(PermissionState.Unrestricted)));

            PermissionSet      internet       = PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.Internet);
            RemoteDomainObject internetObject = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(internet);

            Assert.IsTrue(internetObject.Demand(internet));
            Assert.IsFalse(internetObject.Demand(new PermissionSet(PermissionState.Unrestricted)));

            PermissionSet      intranet       = PermissionSetFactory.GetStandardPermissionSet(StandardPermissionSet.LocalIntranet);
            RemoteDomainObject intranetObject = SandboxActivator.CreateSandboxedInstance <RemoteDomainObject>(intranet);

            Assert.IsTrue(intranetObject.Demand(intranet));
            Assert.IsFalse(intranetObject.Demand(new PermissionSet(PermissionState.Unrestricted)));

            Assert.AreNotEqual(executionObject.AppDomainId, internetObject.AppDomainId);
            Assert.AreNotEqual(executionObject.AppDomainId, intranetObject.AppDomainId);
            Assert.AreNotEqual(internetObject.AppDomainId, intranetObject.AppDomainId);
        }