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)); }
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); }
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)); }
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(); }
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)); }
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)); }
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); }
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"; }
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); }
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(); }
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)); }
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); }
private LocalizedName CreateLocalizedName(StatePropertyInfo statePropertyInfo) { return(new LocalizedName(statePropertyInfo.ID, statePropertyInfo.Name, statePropertyInfo.Name)); }