示例#1
0
        public void CacheStatePropertyInfos()
        {
            PropertyInfo fileConfidentialityProperty = typeof(File).GetProperty("Confidentiality");

            Assert.That(fileConfidentialityProperty, Is.Not.Null);

            PropertyInfo paperFileConfidentialityProperty = typeof(PaperFile).GetProperty("Confidentiality");

            Assert.That(paperFileConfidentialityProperty, Is.Not.Null);

            PropertyInfo paperFileStateProperty = typeof(PaperFile).GetProperty("State");

            Assert.That(paperFileStateProperty, Is.Not.Null);

            StatePropertyInfo confidentialityPropertyInfo = new StatePropertyInfo();
            StatePropertyInfo statePropertyInfo           = new StatePropertyInfo();

            Assert.That(_cache.ContainsStatePropertyInfo(fileConfidentialityProperty), Is.False);
            Assert.That(_cache.GetStatePropertyInfo(fileConfidentialityProperty), Is.Null);

            _cache.AddStatePropertyInfo(fileConfidentialityProperty, confidentialityPropertyInfo);
            Assert.That(_cache.GetStatePropertyInfo(fileConfidentialityProperty), Is.SameAs(confidentialityPropertyInfo));
            Assert.That(_cache.GetStatePropertyInfo(paperFileConfidentialityProperty), Is.SameAs(_cache.GetStatePropertyInfo(fileConfidentialityProperty)));
            Assert.That(_cache.ContainsStatePropertyInfo(paperFileStateProperty), Is.False);
            Assert.That(_cache.GetStatePropertyInfo(paperFileStateProperty), Is.Null);

            _cache.AddStatePropertyInfo(paperFileStateProperty, statePropertyInfo);
            Assert.That(_cache.GetStatePropertyInfo(fileConfidentialityProperty), Is.SameAs(confidentialityPropertyInfo));
            Assert.That(_cache.GetStatePropertyInfo(paperFileStateProperty), Is.SameAs(statePropertyInfo));
        }
示例#2
0
        public void Convert_OneStateProperty()
        {
            StatePropertyInfo propertyInfo = new StatePropertyInfo();

            propertyInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            propertyInfo.Name = "Confidentiality";
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Normal", 0));
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Confidential", 1));
            propertyInfo.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Private", 2));

            Type         type     = typeof(File);
            PropertyInfo property = type.GetProperty("Confidentiality");

            _cache.AddStatePropertyInfo(property, propertyInfo);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <stateProperties>
              <stateProperty id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""Confidentiality"">
                <state name=""Normal|Domain.Confidentiality, Domain"" value=""0"" />
                <state name=""Confidential|Domain.Confidentiality, Domain"" value=""1"" />
                <state name=""Private|Domain.Confidentiality, Domain"" value=""2"" />
              </stateProperty>
            </stateProperties>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
示例#3
0
        public void GetMetadata()
        {
            Dictionary <Enum, EnumValueInfo> values = new Dictionary <Enum, EnumValueInfo> ();

            values.Add(Confidentiality.Normal, PropertyStates.ConfidentialityNormal);
            values.Add(Confidentiality.Confidential, PropertyStates.ConfidentialityConfidential);
            values.Add(Confidentiality.Private, PropertyStates.ConfidentialityPrivate);

            Expect.Call(_enumeratedTypeReflectorMock.GetValues(typeof(Confidentiality), _cache)).Return(values);
            _mocks.ReplayAll();

            StatePropertyInfo info = _statePropertyReflector.GetMetadata(typeof(PaperFile).GetProperty("Confidentiality"), _cache);

            _mocks.VerifyAll();

            Assert.That(info, Is.Not.Null);
            Assert.That(info.Name, Is.EqualTo("Confidentiality"));
            Assert.That(info.ID, Is.EqualTo("00000000-0000-0000-0001-000000000001"));

            Assert.That(info.Values, Is.Not.Null);
            Assert.That(info.Values.Count, Is.EqualTo(3));
            Assert.That(info.Values, Has.Member(PropertyStates.ConfidentialityNormal));
            Assert.That(info.Values, Has.Member(PropertyStates.ConfidentialityPrivate));
            Assert.That(info.Values, Has.Member(PropertyStates.ConfidentialityConfidential));
        }
示例#4
0
        public void ConvertAndSave_LocalizedStateName()
        {
            CultureInfo[] cultures = CreateCultureInfos("de", "en");
            LocalizingMetadataConverter converter = new LocalizingMetadataConverter(_localizationConverter, cultures);
            string               filename         = "metadata.xml";
            MetadataCache        cache            = new MetadataCache();
            List <EnumValueInfo> states           = new List <EnumValueInfo> ();

            states.Add(new EnumValueInfo("Remotion.Security.UnitTests.TestDomain.FileState", "Archived", 2));
            StatePropertyInfo propertyInfo = AddStatePropertyInfo(cache, typeof(PaperFile), "State", "00000000-0000-0000-0002-000000000001", states);

            string stateDescription = propertyInfo.Description + "|Archived";

            LocalizedName[] expectedGermanNames = new LocalizedName[] {
                CreateLocalizedName(propertyInfo),
                CreateLocalizedName(propertyInfo, 0, stateDescription)
            };

            _localizationConverter.ConvertAndSave(expectedGermanNames, cultures[0], filename);

            LocalizedName[] expectedEnglishNames = new LocalizedName[] {
                CreateLocalizedName(propertyInfo),
                CreateLocalizedName(propertyInfo, 0, stateDescription)
            };
            _localizationConverter.ConvertAndSave(expectedEnglishNames, cultures[1], filename);
            _mocks.ReplayAll();

            converter.ConvertAndSave(cache, filename);

            _mocks.VerifyAll();
        }
示例#5
0
        private LocalizedName CreateLocalizedName(StatePropertyInfo statePropertyInfo, int stateIndex, string text)
        {
            EnumValueInfo stateInfo = statePropertyInfo.Values[stateIndex];
            string        id        = statePropertyInfo.ID + "|" + stateInfo.Value;
            string        name      = statePropertyInfo.Name + "|" + stateInfo.Name;

            return(new LocalizedName(id, name, text));
        }
示例#6
0
        public void GetMetadataFromCache()
        {
            StatePropertyReflector reflector = new StatePropertyReflector();

            reflector.GetMetadata(typeof(PaperFile).GetProperty("Confidentiality"), _cache);
            reflector.GetMetadata(typeof(File).GetProperty("Confidentiality"), _cache);

            StatePropertyInfo paperFileConfidentialityInfo = _cache.GetStatePropertyInfo(typeof(PaperFile).GetProperty("Confidentiality"));

            Assert.That(paperFileConfidentialityInfo, Is.Not.Null);
            Assert.That(paperFileConfidentialityInfo.Name, Is.EqualTo("Confidentiality"));
            Assert.That(_cache.GetStatePropertyInfo(typeof(File).GetProperty("Confidentiality")), Is.SameAs(paperFileConfidentialityInfo));
        }
示例#7
0
        private StatePropertyInfo AddStatePropertyInfo(MetadataCache metadataCache, Type type, string propertyName, string id, List <EnumValueInfo> states)
        {
            StatePropertyInfo propertyInfo = new StatePropertyInfo();

            propertyInfo.ID     = id;
            propertyInfo.Name   = type.FullName;
            propertyInfo.Values = states;

            PropertyInfo property = type.GetProperty(propertyName);

            metadataCache.AddStatePropertyInfo(property, propertyInfo);

            return(propertyInfo);
        }
示例#8
0
        public void SetUp()
        {
            _mocks = new MockRepository();
            _statePropertyReflectorMock = _mocks.StrictMock <IStatePropertyReflector> ();
            _accessTypeReflectorMock    = _mocks.StrictMock <IAccessTypeReflector> ();
            _classReflector             = new ClassReflector(_statePropertyReflectorMock, _accessTypeReflectorMock);
            _cache = new MetadataCache();

            _confidentialityProperty      = new StatePropertyInfo();
            _confidentialityProperty.ID   = Guid.NewGuid().ToString();
            _confidentialityProperty.Name = "Confidentiality";

            _stateProperty      = new StatePropertyInfo();
            _stateProperty.ID   = Guid.NewGuid().ToString();
            _stateProperty.Name = "State";
        }
示例#9
0
        public void Convert_MultipleStateProperties()
        {
            StatePropertyInfo propertyInfo1 = new StatePropertyInfo();

            propertyInfo1.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            propertyInfo1.Name = "Confidentiality";
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Normal", 0));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Confidential", 1));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Private", 2));

            StatePropertyInfo propertyInfo2 = new StatePropertyInfo();

            propertyInfo2.ID   = "40749391-5c45-4fdd-a698-53a6cf167ae7";
            propertyInfo2.Name = "SomeEnum";
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "First", 0));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Second", 1));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Third", 2));

            Type         type      = typeof(File);
            PropertyInfo property1 = type.GetProperty("Confidentiality");

            _cache.AddStatePropertyInfo(property1, propertyInfo1);
            PropertyInfo property2 = type.GetProperty("SimpleEnum");

            _cache.AddStatePropertyInfo(property2, propertyInfo2);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <stateProperties>
              <stateProperty id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""Confidentiality"">
                <state name=""Normal|Domain.Confidentiality, Domain"" value=""0"" />
                <state name=""Confidential|Domain.Confidentiality, Domain"" value=""1"" />
                <state name=""Private|Domain.Confidentiality, Domain"" value=""2"" />
              </stateProperty>

              <stateProperty id=""40749391-5c45-4fdd-a698-53a6cf167ae7"" name=""SomeEnum"">
                <state name=""First|Namespace.TypeName, Assembly"" value=""0"" />
                <state name=""Second|Namespace.TypeName, Assembly"" value=""1"" />
                <state name=""Third|Namespace.TypeName, Assembly"" value=""2"" />
              </stateProperty>
            </stateProperties>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
示例#10
0
        public void ConvertAndSave_LocalizedStatePropertyName()
        {
            CultureInfo[] cultures = CreateCultureInfos("de", "en");
            LocalizingMetadataConverter converter = new LocalizingMetadataConverter(_localizationConverter, cultures);
            string            filename            = "metadata.xml";
            MetadataCache     cache        = new MetadataCache();
            StatePropertyInfo propertyInfo = AddStatePropertyInfo(cache, typeof(PaperFile), "State", "00000000-0000-0000-0002-000000000001", new List <EnumValueInfo> ());

            LocalizedName expectedGermanName = CreateLocalizedName(propertyInfo);

            _localizationConverter.ConvertAndSave(new LocalizedName[] { expectedGermanName }, cultures[0], filename);
            LocalizedName expectedEnglishName = CreateLocalizedName(propertyInfo);

            _localizationConverter.ConvertAndSave(new LocalizedName[] { expectedEnglishName }, cultures[1], filename);
            _mocks.ReplayAll();

            converter.ConvertAndSave(cache, filename);

            _mocks.VerifyAll();
        }
示例#11
0
        public void GetCachedPropertyInfos()
        {
            PropertyInfo confidentialityProperty = typeof(PaperFile).GetProperty("Confidentiality");

            Assert.That(confidentialityProperty, Is.Not.Null);

            PropertyInfo stateProperty = typeof(PaperFile).GetProperty("State");

            Assert.That(stateProperty, Is.Not.Null);

            StatePropertyInfo confidentialityPropertyInfo = new StatePropertyInfo();
            StatePropertyInfo statePropertyInfo           = new StatePropertyInfo();

            _cache.AddStatePropertyInfo(confidentialityProperty, confidentialityPropertyInfo);
            _cache.AddStatePropertyInfo(stateProperty, statePropertyInfo);

            List <StatePropertyInfo> infos = _cache.GetStatePropertyInfos();

            Assert.That(infos, Is.Not.Null);
            Assert.That(infos.Count, Is.EqualTo(2));
            Assert.That(infos, Has.Member(confidentialityPropertyInfo));
            Assert.That(infos, Has.Member(statePropertyInfo));
        }
示例#12
0
        public void Convert_IntegrationTest()
        {
            SecurableClassInfo classInfo = new SecurableClassInfo();

            classInfo.ID   = "4bbb1bab-8d37-40c0-918d-7a07cc7de44f";
            classInfo.Name = "File";
            _cache.AddSecurableClassInfo(typeof(File), classInfo);

            SecurableClassInfo derivedClassInfo = new SecurableClassInfo();

            derivedClassInfo.ID   = "ac101f66-6d1f-4002-b32b-f951db36582c";
            derivedClassInfo.Name = "PaperFile";
            _cache.AddSecurableClassInfo(typeof(PaperFile), derivedClassInfo);

            classInfo.DerivedClasses.Add(derivedClassInfo);
            derivedClassInfo.BaseClass = classInfo;

            StatePropertyInfo propertyInfo1 = new StatePropertyInfo();

            propertyInfo1.ID   = "d81b1521-ea06-4338-af6f-ff8510394efd";
            propertyInfo1.Name = "Confidentiality";
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Normal", 0));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Confidential", 1));
            propertyInfo1.Values.Add(new EnumValueInfo("Domain.Confidentiality, Domain", "Private", 2));

            StatePropertyInfo propertyInfo2 = new StatePropertyInfo();

            propertyInfo2.ID   = "40749391-5c45-4fdd-a698-53a6cf167ae7";
            propertyInfo2.Name = "SomeEnum";
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "First", 0));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Second", 1));
            propertyInfo2.Values.Add(new EnumValueInfo("Namespace.TypeName, Assembly", "Third", 2));

            Type         type      = typeof(File);
            PropertyInfo property1 = type.GetProperty("Confidentiality");

            _cache.AddStatePropertyInfo(property1, propertyInfo1);
            PropertyInfo property2 = type.GetProperty("SimpleEnum");

            _cache.AddStatePropertyInfo(property2, propertyInfo2);

            classInfo.Properties.Add(propertyInfo1);
            derivedClassInfo.Properties.Add(propertyInfo1);
            derivedClassInfo.Properties.Add(propertyInfo2);

            EnumValueInfo accessType1 = new EnumValueInfo("Domain.AccessType, Domain", "Archive", 0);

            accessType1.ID = "64d8f74e-685f-44ab-9705-1fda9ff836a4";
            _cache.AddAccessType(DomainAccessTypes.Archive, accessType1);

            EnumValueInfo accessType2 = new EnumValueInfo("Domain.AccessType, Domain", "Journalize", 1);

            accessType2.ID = "c6995b9b-7fed-42df-a2d1-897600b00fb0";
            _cache.AddAccessType(DomainAccessTypes.Journalize, accessType2);

            classInfo.AccessTypes.Add(accessType1);
            derivedClassInfo.AccessTypes.Add(accessType1);
            derivedClassInfo.AccessTypes.Add(accessType2);

            EnumValueInfo abstractRole1 = new EnumValueInfo("Domain.AbstractRole, Domain", "Administrator", 0);

            abstractRole1.ID = "00000004-0001-0000-0000-000000000000";
            _cache.AddAbstractRole(SpecialAbstractRoles.Administrator, abstractRole1);

            EnumValueInfo abstractRole2 = new EnumValueInfo("Domain.AbstractRole, Domain", "PowerUser", 1);

            abstractRole2.ID = "3b84739a-7f35-4224-989f-3d5b05047cbb";
            _cache.AddAbstractRole(SomeEnum.First, abstractRole2);

            XmlDocument document = _converter.Convert(_cache);

            string expectedXml = @"<?xml version=""1.0""?>
          <securityMetadata xmlns=""http://www.re-motion.org/Security/Metadata/1.0"">
            <classes>
              <class id=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"" name=""File"">
                <stateProperties>
                  <statePropertyRef>d81b1521-ea06-4338-af6f-ff8510394efd</statePropertyRef>
                </stateProperties>

                <accessTypes>
                  <accessTypeRef>64d8f74e-685f-44ab-9705-1fda9ff836a4</accessTypeRef>
                </accessTypes>
              </class>

              <class id=""ac101f66-6d1f-4002-b32b-f951db36582c"" name=""PaperFile"" base=""4bbb1bab-8d37-40c0-918d-7a07cc7de44f"">
                <stateProperties>
                  <statePropertyRef>d81b1521-ea06-4338-af6f-ff8510394efd</statePropertyRef>
                  <statePropertyRef>40749391-5c45-4fdd-a698-53a6cf167ae7</statePropertyRef>
                </stateProperties>

                <accessTypes>
                  <accessTypeRef>64d8f74e-685f-44ab-9705-1fda9ff836a4</accessTypeRef>
                  <accessTypeRef>c6995b9b-7fed-42df-a2d1-897600b00fb0</accessTypeRef>
                </accessTypes>
              </class>
            </classes>

            <stateProperties>
              <stateProperty id=""d81b1521-ea06-4338-af6f-ff8510394efd"" name=""Confidentiality"">
                <state name=""Normal|Domain.Confidentiality, Domain"" value=""0"" />
                <state name=""Confidential|Domain.Confidentiality, Domain"" value=""1"" />
                <state name=""Private|Domain.Confidentiality, Domain"" value=""2"" />
              </stateProperty>

              <stateProperty id=""40749391-5c45-4fdd-a698-53a6cf167ae7"" name=""SomeEnum"">
                <state name=""First|Namespace.TypeName, Assembly"" value=""0"" />
                <state name=""Second|Namespace.TypeName, Assembly"" value=""1"" />
                <state name=""Third|Namespace.TypeName, Assembly"" value=""2"" />
              </stateProperty>
            </stateProperties>

            <accessTypes>
              <accessType id=""64d8f74e-685f-44ab-9705-1fda9ff836a4"" name=""Archive|Domain.AccessType, Domain"" value=""0"" />
              <accessType id=""c6995b9b-7fed-42df-a2d1-897600b00fb0"" name=""Journalize|Domain.AccessType, Domain"" value=""1"" />
            </accessTypes>

            <abstractRoles>
              <abstractRole id=""00000004-0001-0000-0000-000000000000"" name=""Administrator|Domain.AbstractRole, Domain"" value=""0"" />
              <abstractRole id=""3b84739a-7f35-4224-989f-3d5b05047cbb"" name=""PowerUser|Domain.AbstractRole, Domain"" value=""1"" />
            </abstractRoles>
          </securityMetadata>";

            XmlAssert.AreDocumentsEqual(expectedXml, document);
        }
示例#13
0
 private LocalizedName CreateLocalizedName(StatePropertyInfo statePropertyInfo)
 {
     return(new LocalizedName(statePropertyInfo.ID, statePropertyInfo.Name, statePropertyInfo.Name));
 }