Exemplo n.º 1
0
        public void Scope_NestedForDifferentTransactionsInTheHierarchy()
        {
            var middleTransaction = _rootTransaction.CreateSubTransaction();
            var subTransaction    = middleTransaction.CreateSubTransaction();

            Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(_rootTransaction));
            Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(_rootTransaction));

            using (middleTransaction.EnterNonDiscardingScope())
            {
                Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(middleTransaction));
                Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(middleTransaction));

                using (subTransaction.EnterNonDiscardingScope())
                {
                    Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(subTransaction));
                    Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(subTransaction));

                    using (_rootTransaction.EnterNonDiscardingScope())
                    {
                        Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(_rootTransaction));
                        Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(_rootTransaction));
                    }

                    Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(subTransaction));
                    Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(subTransaction));
                }

                Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(middleTransaction));
                Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(middleTransaction));
            }

            Assert.That(_rootTransaction.ActiveTransaction, Is.SameAs(_rootTransaction));
            Assert.That(_order1LoadedInRootTransaction.DefaultTransactionContext.ClientTransaction, Is.SameAs(_rootTransaction));
        }
 public void GetObject_NoClientTransactionGiven_UsesCurrentTransaction()
 {
     using (_clientTransaction.EnterNonDiscardingScope())
     {
         var result = _orderID1.GetObject <Order>();
         CheckDomainObject(result, _clientTransaction);
     }
 }
Exemplo n.º 3
0
 /// <summary>
 /// Loads a new instance of a domain object for transportation.
 /// </summary>
 /// <param name="type">The domain object type to instantiate.</param>
 /// <param name="constructorParameters">A <see cref="ParamList"/> encapsulating the parameters to be passed to the constructor. Instantiate this
 /// by using one of the <see cref="ParamList.Create{A1,A2}"/> methods.</param>
 /// <returns>A new instance of <paramref name="type"/> prepared for transport.</returns>
 public DomainObject LoadNew(Type type, ParamList constructorParameters)
 {
     using (_transportTransaction.EnterNonDiscardingScope())
     {
         DomainObject domainObject = LifetimeService.NewObject(ClientTransaction.Current, type, constructorParameters);
         Load(domainObject.ID);
         return(domainObject);
     }
 }
Exemplo n.º 4
0
        public AbstractRoleDefinition CreateClerkAbstractRole(int index)
        {
            using (_transaction.EnterNonDiscardingScope())
            {
                AbstractRoleDefinition role = AbstractRoleDefinition.NewObject(
                    new Guid("00000003-0001-0000-0000-000000000000"),
                    "Clerk|Remotion.Security.UnitTests.TestDomain.DomainAbstractRoles, Remotion.Security.UnitTests.TestDomain",
                    0);
                role.Index = index;

                return(role);
            }
        }
        private IDisposable EnterScopeOnDemand(ClientTransaction clientTransaction)
        {
            if (clientTransaction.ActiveTransaction != clientTransaction)
            {
                return(clientTransaction.EnterNonDiscardingScope());
            }

            if (ClientTransaction.Current != clientTransaction)
            {
                return(clientTransaction.EnterNonDiscardingScope());
            }

            return(null);
        }
Exemplo n.º 6
0
        public void ExecuteInScope_Action_ReusesScopeIfPossible()
        {
            using (var scope = _transaction.EnterNonDiscardingScope())
            {
                Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(scope));

                ClientTransactionScope scopeInDelegate = null;
                Action action = () => scopeInDelegate = ClientTransactionScope.ActiveScope;

                _transaction.ExecuteInScope(action);

                Assert.That(scopeInDelegate, Is.SameAs(scope));
                Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(scope));
            }
        }
Exemplo n.º 7
0
        public User CreateUser(string userName, string firstName, string lastName, string title, Group owningGroup, Tenant tenant)
        {
            using (_transaction.EnterNonDiscardingScope())
            {
                User user = _factory.CreateUser();
                user.UserName    = userName;
                user.FirstName   = firstName;
                user.LastName    = lastName;
                user.Title       = title;
                user.Tenant      = tenant;
                user.OwningGroup = owningGroup;

                return(user);
            }
        }
 public static BindableSecurableObject NewObject(ClientTransaction clientTransaction, IObjectSecurityStrategy securityStrategy)
 {
     using (clientTransaction.EnterNonDiscardingScope())
     {
         return(NewObject <BindableSecurableObject> (ParamList.Create(securityStrategy)));
     }
 }
 public static NonSecurableObject NewObject(ClientTransaction clientTransaction)
 {
     using (clientTransaction.EnterNonDiscardingScope())
     {
         return(NewObject <NonSecurableObject>());
     }
 }
Exemplo n.º 10
0
        public SecurableClassDefinition CreateAndCommitSecurableClassDefinitionWithAccessControlLists(int accessControlLists, ClientTransaction transaction)
        {
            CreateEmptyDomain();

            using (transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition   classDefinition            = CreateOrderSecurableClassDefinition();
                StatelessAccessControlList statelessAccessControlList = StatelessAccessControlList.NewObject();
                classDefinition.StatelessAccessControlList = statelessAccessControlList;

                var stateProperty = StatePropertyDefinition.NewObject(Guid.NewGuid(), "Property");
                classDefinition.AddStateProperty(stateProperty);

                for (int i = 1; i < accessControlLists; i++)
                {
                    StatefulAccessControlList statefulAccessControlList = StatefulAccessControlList.NewObject();
                    classDefinition.StatefulAccessControlLists.Add(statefulAccessControlList);
                    statefulAccessControlList.CreateAccessControlEntry();
                    CreateStateCombination(statefulAccessControlList, stateProperty, StateDefinition.NewObject(string.Format("Value {0}", i), i));
                }

                ClientTransactionScope.CurrentTransaction.Commit();

                return(classDefinition);
            }
        }
Exemplo n.º 11
0
 public static FileItem NewObject(ClientTransaction clientTransaction)
 {
     using (clientTransaction.EnterNonDiscardingScope())
     {
         return(DomainObject.NewObject <FileItem> ());
     }
 }
Exemplo n.º 12
0
        public override void SetUp()
        {
            base.SetUp();

            _securityProviderStub           = MockRepository.GenerateStub <ISecurityProvider>();
            _principalProviderStub          = MockRepository.GenerateStub <IPrincipalProvider>();
            _securityPrincipalStub          = MockRepository.GenerateStub <ISecurityPrincipal>();
            _functionalSecurityStrategyStub = MockRepository.GenerateStub <IFunctionalSecurityStrategy>();

            _principalProviderStub.Stub(stub => stub.GetPrincipal()).Return(_securityPrincipalStub);

            _securityContextStub        = MockRepository.GenerateStub <ISecurityContext> ();
            _securityContextFactoryStub = MockRepository.GenerateStub <ISecurityContextFactory> ();

            _securityContextFactoryStub.Stub(mock => mock.CreateSecurityContext()).Return(_securityContextStub);

            _clientTransaction = ClientTransaction.CreateRootTransaction();
            _clientTransaction.Extensions.Add(new SecurityClientTransactionExtension());

            var serviceLocator = DefaultServiceLocator.Create();

            serviceLocator.RegisterSingle(() => _securityProviderStub);
            serviceLocator.RegisterSingle(() => _principalProviderStub);
            serviceLocator.RegisterSingle(() => _functionalSecurityStrategyStub);
            _serviceLocatorScope = new ServiceLocatorScope(serviceLocator);

            _clientTransaction.EnterNonDiscardingScope();
        }
Exemplo n.º 13
0
        public void NestedScopes()
        {
            ClientTransaction      clientTransaction1 = ClientTransaction.CreateRootTransaction();
            ClientTransaction      clientTransaction2 = ClientTransaction.CreateRootTransaction();
            ClientTransactionScope originalScope      = ClientTransactionScope.ActiveScope;
            ClientTransaction      original           = ClientTransactionScope.CurrentTransaction;

            Assert.That(original, Is.Not.SameAs(clientTransaction1));
            Assert.That(original, Is.Not.SameAs(clientTransaction2));
            Assert.That(original, Is.Not.Null);

            using (ClientTransactionScope scope1 = clientTransaction1.EnterNonDiscardingScope())
            {
                Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(clientTransaction1));
                Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(scope1));

                using (ClientTransactionScope scope2 = clientTransaction2.EnterNonDiscardingScope())
                {
                    Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(scope2));
                    Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(clientTransaction2));
                }
                Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(scope1));
                Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(clientTransaction1));
            }
            Assert.That(ClientTransactionScope.ActiveScope, Is.SameAs(originalScope));
            Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(original));
        }
Exemplo n.º 14
0
        public void CommitAndRollbackOnScope()
        {
            ClientTransaction transaction = ClientTransaction.CreateRootTransaction();
            var eventCounter = new TransactionEventCounter(transaction);

            using (ClientTransactionScope scope = transaction.EnterNonDiscardingScope())
            {
                Assert.That(eventCounter.Commits, Is.EqualTo(0));
                Assert.That(eventCounter.Rollbacks, Is.EqualTo(0));

                scope.Commit();

                Assert.That(eventCounter.Commits, Is.EqualTo(1));
                Assert.That(eventCounter.Rollbacks, Is.EqualTo(0));

                scope.Rollback();

                Assert.That(eventCounter.Commits, Is.EqualTo(1));
                Assert.That(eventCounter.Rollbacks, Is.EqualTo(1));

                transaction.Commit();

                Assert.That(eventCounter.Commits, Is.EqualTo(2));
                Assert.That(eventCounter.Rollbacks, Is.EqualTo(1));

                transaction.Rollback();

                Assert.That(eventCounter.Commits, Is.EqualTo(2));
                Assert.That(eventCounter.Rollbacks, Is.EqualTo(2));
            }
        }
Exemplo n.º 15
0
        public DomainObject CreateObjectReference(IObjectInitializationContext objectInitializationContext, ClientTransaction clientTransaction)
        {
            ArgumentUtility.CheckNotNull("objectInitializationContext", objectInitializationContext);
            ArgumentUtility.CheckNotNull("clientTransaction", clientTransaction);

            var objectID = objectInitializationContext.ObjectID;

            CheckDomainTypeAndClassDefinition(objectID.ClassDefinition.ClassType);
            objectID.ClassDefinition.ValidateCurrentMixinConfiguration();

            var concreteType = Pipeline.ReflectionService.GetAssembledType(objectID.ClassDefinition.ClassType);
            var instance     = (DomainObject)FormatterServices.GetSafeUninitializedObject(concreteType);

            Pipeline.ReflectionService.PrepareExternalUninitializedObject(instance, InitializationSemantics.Construction);

            // These calls are normally performed by DomainObject's ctor
            instance.Initialize(objectID, objectInitializationContext.RootTransaction);
            objectInitializationContext.RegisterObject(instance);

            using (clientTransaction.EnterNonDiscardingScope())
            {
                instance.RaiseReferenceInitializatingEvent();
            }

            return(instance);
        }
Exemplo n.º 16
0
        public void Import(XmlDocument metadataXmlDocument)
        {
            using (_transaction.EnterNonDiscardingScope())
            {
                SecurityMetadataSchema metadataSchema = new SecurityMetadataSchema();
                if (!metadataXmlDocument.Schemas.Contains(metadataSchema.SchemaUri))
                {
                    metadataXmlDocument.Schemas.Add(metadataSchema.LoadSchemaSet());
                }

                metadataXmlDocument.Validate(null);

                XmlNamespaceManager namespaceManager = new XmlNamespaceManager(metadataXmlDocument.NameTable);
                namespaceManager.AddNamespace("md", metadataSchema.SchemaUri);

                AddItem(_classes, metadataXmlDocument, "/md:securityMetadata/md:classes/md:class", namespaceManager, CreateSecurableClassDefinition);
                AddItem(
                    _stateProperties,
                    metadataXmlDocument,
                    "/md:securityMetadata/md:stateProperties/md:stateProperty",
                    namespaceManager,
                    CreateStatePropertyDefinition);
                AddItem(
                    _abstractRoles,
                    metadataXmlDocument,
                    "/md:securityMetadata/md:abstractRoles/md:abstractRole",
                    namespaceManager,
                    CreateAbstractRoleDefinition);
                AddItem(_accessTypes, metadataXmlDocument, "/md:securityMetadata/md:accessTypes/md:accessType", namespaceManager, CreateAccessTypeDefinition);

                LinkDerivedClasses();
                LinkStatePropertiesToClasses();
                LinkAccessTypesToClasses();
            }
        }
Exemplo n.º 17
0
 public StateCombination CreateStateCombination(SecurableClassDefinition classDefinition, ClientTransaction transaction, params StateDefinition[] states)
 {
     using (transaction.EnterNonDiscardingScope())
     {
         StatefulAccessControlList acl = CreateStatefulAcl(classDefinition, transaction, states);
         return(acl.StateCombinations[0]);
     }
 }
Exemplo n.º 18
0
 public void DiscardRendersSubTransactionUnusable()
 {
     _subTransaction.Discard();
     using (_subTransaction.EnterNonDiscardingScope())
     {
         Order.NewObject();
     }
 }
Exemplo n.º 19
0
        public void Import_EmptyCultureFile()
        {
            string cultureXml =
                @"
          <localizedNames xmlns=""http://www.re-motion.org/Security/Metadata/Localization/1.0"" culture=""de"" />
          ";

            _importer.Import(GetXmlDocument(cultureXml));

            using (_transaction.EnterNonDiscardingScope())
            {
                Assert.AreEqual(0, _importer.LocalizedNames.Count, "LocalizedNames count");
                Assert.IsNotNull(_importer.Cultures, "Cultures");
                Assert.That(_importer.Cultures.Count, Is.EqualTo(1));
                Assert.That(_importer.Cultures[0].CultureName, Is.EqualTo("de"));
            }
        }
Exemplo n.º 20
0
 public StatelessAccessControlList CreateStatelessAcl(SecurableClassDefinition classDefinition, ClientTransaction transaction)
 {
     using (transaction.EnterNonDiscardingScope())
     {
         var acl = StatelessAccessControlList.NewObject();
         classDefinition.StatelessAccessControlList = acl;
         return(acl);
     }
 }
Exemplo n.º 21
0
        public void GetAccess_WithAccessControlExcptionFromAccessControlListFinder()
        {
            AccessControlException expectedException = new AccessControlException();

            using (_clientTransaction.EnterNonDiscardingScope())
            {
                Expect.Call(_mockAclFinder.Find(_context)).Throw(expectedException);
            }
            _mocks.ReplayAll();

            AccessType[] accessTypes = _service.GetAccess(_context, _principalStub);

            _mocks.VerifyAll();
            Assert.That(accessTypes.Length, Is.EqualTo(0));
            LoggingEvent[] events = _memoryAppender.GetEvents();
            Assert.That(events.Length, Is.EqualTo(1));
            Assert.That(events[0].ExceptionObject, Is.SameAs(expectedException));
            Assert.That(events[0].Level, Is.EqualTo(Level.Error));
        }
Exemplo n.º 22
0
        private SecurableClassDefinition CreateSecurableClassDefinition(ClientTransaction transaction, Guid metadataItemID, string name)
        {
            using (transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition classDefinition = SecurableClassDefinition.NewObject();
                classDefinition.MetadataItemID = metadataItemID;
                classDefinition.Name           = name;

                return(classDefinition);
            }
        }
Exemplo n.º 23
0
        public void ScopeSetsAndResetsCurrentTransaction()
        {
            ClientTransaction clientTransaction = ClientTransaction.CreateRootTransaction();

            Assert.That(ClientTransactionScope.CurrentTransaction, Is.Not.SameAs(clientTransaction));
            using (clientTransaction.EnterNonDiscardingScope())
            {
                Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(clientTransaction));
            }
            Assert.That(ClientTransactionScope.CurrentTransaction, Is.Not.SameAs(clientTransaction));
        }
Exemplo n.º 24
0
        public Tenant CreateTenant(ClientTransaction transaction, string name, string uniqueIdentifier)
        {
            using (transaction.EnterNonDiscardingScope())
            {
                Tenant tenant = _factory.CreateTenant();
                tenant.UniqueIdentifier = uniqueIdentifier;
                tenant.Name             = name;

                return(tenant);
            }
        }
Exemplo n.º 25
0
        public SecurableClassDefinition CreateAndCommitSecurableClassDefinitionWithAccessTypes(int accessTypes, ClientTransaction transaction)
        {
            CreateEmptyDomain();
            using (transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition classDefinition = CreateSecurableClassDefinitionWithAccessTypes(accessTypes);

                ClientTransactionScope.CurrentTransaction.Commit();

                return(classDefinition);
            }
        }
Exemplo n.º 26
0
        private ClientTransactionScope EnterScopeOnDemand()
        {
            //if (_clientTransaction.ActiveTransaction != _clientTransaction)
            //  return _clientTransaction.EnterNonDiscardingScope();

            if (ClientTransaction.Current != _clientTransaction)
            {
                return(_clientTransaction.EnterNonDiscardingScope());
            }

            return(null);
        }
Exemplo n.º 27
0
        public SecurableClassDefinition[] CreateAndCommitSecurableClassDefinitions(int classDefinitionCount, ClientTransaction transaction)
        {
            CreateEmptyDomain();
            using (transaction.EnterNonDiscardingScope())
            {
                SecurableClassDefinition[] classDefinitions = CreateSecurableClassDefinitions(classDefinitionCount, 0);

                ClientTransactionScope.CurrentTransaction.Commit();

                return(classDefinitions);
            }
        }
        public void EnterNonDiscardingScope()
        {
            ClientTransactionScope outerScope     = ClientTransactionScope.ActiveScope;
            ClientTransaction      newTransaction = ClientTransaction.CreateRootTransaction();

            using (newTransaction.EnterNonDiscardingScope())
            {
                Assert.That(ClientTransactionScope.ActiveScope, Is.Not.SameAs(outerScope));
                Assert.That(ClientTransactionScope.CurrentTransaction, Is.SameAs(newTransaction));
                Assert.That(ClientTransactionScope.ActiveScope.AutoRollbackBehavior, Is.EqualTo(AutoRollbackBehavior.None));
            }
        }
Exemplo n.º 29
0
        public void CreateAndCommitAdministratorAbstractRole(ClientTransaction transaction)
        {
            CreateEmptyDomain();

            using (transaction.EnterNonDiscardingScope())
            {
                Guid   metadataItemID   = new Guid("00000004-0001-0000-0000-000000000000");
                string abstractRoleName = "Administrator|Remotion.Security.UnitTests.TestDomain.SpecialAbstractRoles, Remotion.Security.UnitTests.TestDomain";
                AbstractRoleDefinition administratorAbstractRole = AbstractRoleDefinition.NewObject(metadataItemID, abstractRoleName, 0);

                ClientTransactionScope.CurrentTransaction.Commit();
            }
        }
Exemplo n.º 30
0
        public Group CreateGroup(ClientTransaction transaction, string name, string uniqueIdentifier, Group parent, Tenant tenant)
        {
            using (transaction.EnterNonDiscardingScope())
            {
                Group group = _factory.CreateGroup();
                group.Name             = name;
                group.Parent           = parent;
                group.Tenant           = tenant;
                group.UniqueIdentifier = uniqueIdentifier;

                return(group);
            }
        }