public void SPMetadata_serialise_deserialise_Test() { ////ARRANGE var logger = new LogProviderMock(); string metadataXml = String.Empty; var metadataWriter = new TestMetadatWriter(el => metadataXml = el.OuterXml); var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var metadataContext = contextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost"); context.MetadataContext = metadataContext; var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT sPSSOMetadataProvider.CreateMetadata(metadataRequest); var xmlReader = XmlReader.Create(new StringReader(metadataXml)); var deserialisedMetadata = metadataSerialiser.ReadMetadata(xmlReader) as EntityDescriptor; //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(metadataXml)); Assert.AreEqual(1, deserialisedMetadata.RoleDescriptors.Count); }
public async Task WsFederationConfigurationRetrieverTest() { //ARRANGE var webRequestHandler = new WebRequestHandler(); webRequestHandler.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((_, __, ___, ____) => true); var httpClient = new HttpClient(webRequestHandler); var documentRetrieer = new HttpDocumentRetriever(() => httpClient); var configurationProvider = new CertificateValidationConfigurationProvider(); var certValidator = new CertificateValidator(configurationProvider); var logger = new LogProviderMock(); var serialiser = new FederationMetadataSerialiser(certValidator, logger); var configurationRetriever = new WsFederationConfigurationRetriever(documentRetrieer, serialiser); //ACT //var baseMetadata = await WsFederationConfigurationRetriever.GetAsync("https://dg-mfb/idp/shibboleth", documentRetrieer, new CancellationToken()); var context = new FederationPartyConfiguration("local", "https://www.testshib.org/metadata/testshib-providers.xml"); var baseMetadata = await configurationRetriever.GetAsync(context, new CancellationToken()); var metadata = baseMetadata as EntitiesDescriptor; //ASSERT Assert.IsTrue(metadata != null); Assert.AreEqual(2, metadata.ChildEntities.Count); }
public void SPMetadata_serialise_deserialise_Test() { ////ARRANGE string metadataXml = String.Empty; var metadataWriter = new TestMetadatWriter(el => metadataXml = el.OuterXml); var contextBuilder = new InlineMetadataContextBuilder(); var context = contextBuilder.BuildContext(); var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataWriter, ssoCryptoProvider, metadataSerialiser, g => context); //ACT sPSSOMetadataProvider.CreateMetadata(MetadataType.SP); var xmlReader = XmlReader.Create(new StringReader(metadataXml)); var deserialisedMetadata = metadataSerialiser.ReadMetadata(xmlReader) as EntityDescriptor; //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(metadataXml)); Assert.AreEqual(1, deserialisedMetadata.RoleDescriptors.Count); }
public void SPMetadataGenerationTest() { ////ARRANGE var result = String.Empty; var metadataWriter = new TestMetadatWriter(el => result = el.OuterXml); //var metadataWriter = new TestMetadatWriter(el => //{ // using (var writer = XmlWriter.Create(@"D:\Dan\Software\Apira\SPMetadata\SPMetadata.xml")) // { // el.WriteTo(writer); // writer.Flush(); // } //}); var contextBuilder = new InlineMetadataContextBuilder(); var context = contextBuilder.BuildContext(); var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataWriter, ssoCryptoProvider, metadataSerialiser, g => context); //ACT sPSSOMetadataProvider.CreateMetadata(MetadataType.SP); //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(result)); }
public void SerialiseMetadataTest() { //ARRANGE var logger = new LogProviderMock(); var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var context = contextBuilder.BuildContext(metadataRequest); var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider, logger); var metadata = context.EntityDesriptorConfiguration; var spDescriptorConfigurtion = context.EntityDesriptorConfiguration.RoleDescriptors.First() as SPSSODescriptorConfiguration; var descriptorBuilder = new ServiceProviderSingleSignOnDescriptorBuilder(); var descriptor = descriptorBuilder.BuildDescriptor(spDescriptorConfigurtion); var entityDescriptor = new EntityDescriptor(new EntityId("EntityIdTest")); entityDescriptor.RoleDescriptors.Add(descriptor); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); //ACT var sb = new StringBuilder(); using (var xmlWriter = XmlWriter.Create(sb)) { metadataSerialiser.Serialise(xmlWriter, entityDescriptor); } var xmlResult = sb.ToString(); //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(xmlResult)); }
public async Task SPMetadataGenerationTest() { ////ARRANGE var result = String.Empty; var metadataWriter = new TestMetadatWriter(el => result = el.OuterXml); var logger = new LogProviderMock(); var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var metadataContext = contextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost"); context.MetadataContext = metadataContext; var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider, logger); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT await sPSSOMetadataProvider.CreateMetadata(metadataRequest); //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(result)); }
public void SPMetadataGenerationTest_sql_source() { ////ARRANGE var result = false; var metadataWriter = new TestMetadatWriter(el => { result = true; }); var cacheProvider = new CacheProviderMock(); var customConfiguration = new DbCustomConfiguration(); var connectionStringProvider = new MetadataConnectionStringProviderMock(); var models = ReflectionHelper.GetAllTypes(new[] { typeof(MetadataContextBuilder).Assembly }) .Where(t => !t.IsAbstract && !t.IsInterface && typeof(BaseModel).IsAssignableFrom(t)); customConfiguration.ModelsFactory = () => models; var seeders = ReflectionHelper.GetAllTypes(new[] { typeof(MetadataContextBuilder).Assembly }) .Where(t => !t.IsAbstract && !t.IsInterface && typeof(ISeeder).IsAssignableFrom(t)) .Select(x => (ISeeder)Activator.CreateInstance(x)); seeders .OrderBy(x => x.SeedingOrder) .Aggregate(customConfiguration.Seeders, (c, next) => { c.Add(next); return(c); }); object dbcontext = new DBContext(connectionStringProvider, customConfiguration); var metadataContextBuilder = new MetadataContextBuilder((IDbContext)dbcontext, cacheProvider); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var metadatContext = metadataContextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost") { MetadataContext = metadatContext }; var logger = new LogProviderMock(); var configurationProvider = new CertificateValidationConfigurationProvider((IDbContext)dbcontext, cacheProvider); var certificateValidator = new CertificateValidator(configurationProvider, logger); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT sPSSOMetadataProvider.CreateMetadata(metadataRequest).Wait(); //ASSERT Assert.IsTrue(result); }
public SSOOwinMiddleware(OwinMiddleware next, IAppBuilder app, SSOAuthenticationOptions options, IDependencyResolver resolver) : base(next, options) { this._resolver = resolver; this._logger = app.CreateLogger <SSOOwinMiddleware>(); if (base.Options.BackchannelCertificateValidator == null) { base.Options.BackchannelCertificateValidator = this._resolver.Resolve <Kernel.Cryptography.Validation.ICertificateValidator>(); } if (string.IsNullOrWhiteSpace(this.Options.TokenValidationParameters.AuthenticationType)) { this.Options.TokenValidationParameters.AuthenticationType = app.GetDefaultSignInAsAuthenticationType(); } if (this.Options.StateDataFormat == null) { this.Options.StateDataFormat = (ISecureDataFormat <AuthenticationProperties>) new PropertiesDataFormat(app.CreateDataProtector(typeof(SSOOwinMiddleware).FullName, this.Options.AuthenticationType, "v1")); } //if (this.Options.Notifications == null) // this.Options.Notifications = new WsFederationAuthenticationNotifications(); Uri result; if (!this.Options.CallbackPath.HasValue && !string.IsNullOrEmpty(this.Options.Wreply) && Uri.TryCreate(this.Options.Wreply, UriKind.Absolute, out result)) { this.Options.CallbackPath = PathString.FromUriComponent(result); } if (this.Options.ConfigurationManager != null) { return; } if (this.Options.Configuration != null) { } //this.Options.ConfigurationManager = (IConfigurationManager<object>)new StaticConfigurationManager<object>(this.Options.Configuration); else { var httpClient = new HttpClient(SSOOwinMiddleware.ResolveHttpMessageHandler(this.Options)) { Timeout = this.Options.BackchannelTimeout, MaxResponseContentBufferSize = 10485760L }; var documentRetriever = new HttpDocumentRetriever(() => httpClient); var certValidator = this._resolver.Resolve <Kernel.Cryptography.Validation.ICertificateValidator>(); var serialiser = new FederationMetadataSerialiser(certValidator); var configurationRetriever = new WsFederationConfigurationRetriever(documentRetriever, serialiser); var relyingPartyContextBuilder = this._resolver.Resolve <IRelyingPartyContextBuilder>(); this.Options.ConfigurationManager = new ConfigurationManager <MetadataBase>(relyingPartyContextBuilder, configurationRetriever); } }
public async Task GetPlainAsertion_Test() { //ARRANGE var foo = "lVRLj9owEL5X6n%2BIfM87IWARVhRUCamtEKx66GXlOANrKbFT2wH239fOBsKyLdpex5%2F9PWbG04dTXTkHkIoJnqPQC9DD7POnqSJ11eB5q5%2F5Bn63oLRjgFxhe5CjVnIsiGIKc1KDwpri7fz7Nxx5ASZKgdTmOeSslGphxZUmXOcoCsLMDUM3TB%2FDBAchTjIvDbNxmsa%2FkLM0HIwT3el41rpR2PePUIStBzUQby9F23hEV0RR0VDhUVH7zMjxVaP81eaLb6VFgV%2BJPbPcyxwBJU%2BjXVJkUVy6WVyGblJA4o4hHLlBmk3CeFJGZQFPaVyMIoDCDYIxcZNxGblklyQuzUbJhMQBTUiEnJ%2FnmIxN5MzPPheCq7YGuQV5YNT4LeGUI4vQWrKi1fCKYHz%2FDvJVSApdzDnakUqBDW1tImQHuFSG5Jv70TdSaEFFhUwLHadrIu56IC1RTfT967bCSnfXQTFwzfQLml16cTx6JlCXcQ3ytVGksl2Y%2BldEA3ODf5j3Vsu1qBh9ceZVJY4LCUQPxv5flJaEK2akIce%2FMmkCLplVpLriuTxvS4OlsDGzJRm1gP78FvFhl5cLPY9%2Fl6g%2FvpHXx9MvFpRd%2Fw1Gw0k7C1E3RDJl5wxOhGp0Y2nALswuqA3sZnfXkWJqcaZs5%2BooZLk2YwLUED%2FaNBsh9cXGXx4ffPxD8rWnrdlNM%2BeOoTi9LERr9z5442B4RK6WH4397aVrRT2h%2FbP895%2FW7A8%3D"; var unescaped = Uri.UnescapeDataString(foo); var request = "SAMLRequest=lVRLj9owEL5X6n%2BIfM87IWARVhRUCamtEKx66GXlOANrKbFT2wH239fOBsKyLdpex5%2F9PWbG04dTXTkHkIoJnqPQC9DD7POnqSJ11eB5q5%2F5Bn63oLRjgFxhe5CjVnIsiGIKc1KDwpri7fz7Nxx5ASZKgdTmOeSslGphxZUmXOcoCsLMDUM3TB%2FDBAchTjIvDbNxmsa%2FkLM0HIwT3el41rpR2PePUIStBzUQby9F23hEV0RR0VDhUVH7zMjxVaP81eaLb6VFgV%2BJPbPcyxwBJU%2BjXVJkUVy6WVyGblJA4o4hHLlBmk3CeFJGZQFPaVyMIoDCDYIxcZNxGblklyQuzUbJhMQBTUiEnJ%2FnmIxN5MzPPheCq7YGuQV5YNT4LeGUI4vQWrKi1fCKYHz%2FDvJVSApdzDnakUqBDW1tImQHuFSG5Jv70TdSaEFFhUwLHadrIu56IC1RTfT967bCSnfXQTFwzfQLml16cTx6JlCXcQ3ytVGksl2Y%2BldEA3ODf5j3Vsu1qBh9ceZVJY4LCUQPxv5flJaEK2akIce%2FMmkCLplVpLriuTxvS4OlsDGzJRm1gP78FvFhl5cLPY9%2Fl6g%2FvpHXx9MvFpRd%2Fw1Gw0k7C1E3RDJl5wxOhGp0Y2nALswuqA3sZnfXkWJqcaZs5%2BooZLk2YwLUED%2FaNBsh9cXGXx4ffPxD8rWnrdlNM%2BeOoTi9LERr9z5442B4RK6WH4397aVrRT2h%2FbP895%2FW7A8%3D&RelayState=tVFLi8IwEP4rEjx2oyvCYm5S9yGrWKi3IhjTUbOkSclMxSL%2B9013q%2B7jspe9TeZ7hjmxLtUlMMHSGgkKHjtjQJF2FvkzWPBa8Yn%2BWEhfrwdZ1hJT8truok6BynmjN6vogiw2b8HhC7K6zSxiW8jBy8YwkZ7qaR7Cx2Qkxq5ULhAkIvgGj0OJqgCfgj9oBcjE6S91ZxppfZ9lr%2BAtGP50zeNzIDmRJIPMbvWuatePNk%2BctsSnNocj5Jf3N1bU%2BeX342PdgzRV0zK71fz3DiFXNwom%2BmHCCWxlZYgJ8hVEbBOwcKVQpPJWOIkahZUFoCAl0vF8Jga8L1oWipflMrlLFukyuBqnPgME2xOVotdrNmbvkMRwNHoY9tosLrE8BoEHLMMZYHYV2sqY8%2Bp8fgc%3D&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=fSYSDEFSQs2E1lko89N6yhZWd9lptNVuKdI%2BdoKJ0nB%2FI13Mfwv2omvuaa0uaYKjF7hbBHCA1gYg7QTx1UXmyMEhbYk4c0thvvyF3HYlToQeiS9BD1tUTXA305bU0BRIf3kLTuRZzT6Rf5kS9XctAg1NZeBW02ro61YJ01E8Rxxt80GmHcQbEDkc7fIua31xqz%2FYxlz5fwIPmfQgH%2Fei2U7Cabf55GozXcffV7MefhbkyYPm9a2dpGo7Tb1t7THURBrwkUjIbYtcFSbTBVQ52nzGJ%2FoqR8SsJ7bIdgzXjKJdZqVZCxEBpXi69A1xL4llLVUrZmwKKDqplP1jkI9foA%3D%3D"; var messageEncoding = new MessageEncoding(new DeflateCompressor()); var decoded = await messageEncoding.DecodeMessage(unescaped); var federationMetadataSerialiser = new FederationMetadataSerialiser(new CertificateValidatorMock(), new LogProviderMock()); var metadataXml = XmlReader.Create(@"D:\Dan\Software\ECA-Interenational\ECA_SPMetadata_20171114.xml"); var metadata = federationMetadataSerialiser.Deserialise(metadataXml) as EntityDescriptor; var spDescriptor = metadata.RoleDescriptors.OfType <ServiceProviderSingleSignOnDescriptor>().First(); var i = request.IndexOf("Signature"); var data = request.Substring(0, i - 1); var sgn = Uri.UnescapeDataString(request.Substring(i + 10)); var certificateManager = new CertificateManager(new LogProviderMock()); //ACT var keyDescriptors = spDescriptor.Keys.Where(k => k.Use == KeyType.Signing); var validated = false; foreach (var k in keyDescriptors.SelectMany(x => x.KeyInfo)) { var binaryClause = k as BinaryKeyIdentifierClause; if (binaryClause == null) { throw new InvalidOperationException(String.Format("Expected type: {0} but it was: {1}", typeof(BinaryKeyIdentifierClause), k.GetType())); } var certContent = binaryClause.GetBuffer(); var cert = new X509Certificate2(certContent); validated = this.VerifySignature(request, cert, certificateManager); if (validated) { break; } } //ASSERT Assert.True(validated); }
public void SPMetadataGeneration_create_file() { ////ARRANGE var result = false; var path = @"D:\Dan\Software\Apira\SPMetadata\SPMetadataTest.xml"; var metadataWriter = new TestMetadatWriter(el => { if (File.Exists(path)) { File.Delete(path); } using (var writer = XmlWriter.Create(path)) { el.WriteTo(writer); writer.Flush(); } result = true; }); var logger = new LogProviderMock(); var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var metadatContext = contextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost"); var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT sPSSOMetadataProvider.CreateMetadata(metadataRequest); //ASSERT Assert.IsTrue(result); }
public void SPMetadataGeneration_create_file() { ////ARRANGE var result = false; var path = @"D:\Dan\Software\Apira\SPMetadata\SPMetadataTest.xml"; var metadataWriter = new TestMetadatWriter(el => { if (File.Exists(path)) { File.Delete(path); } using (var writer = XmlWriter.Create(path)) { el.WriteTo(writer); writer.Flush(); } result = true; }); var contextBuilder = new InlineMetadataContextBuilder(); var context = contextBuilder.BuildContext(); var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataWriter, ssoCryptoProvider, metadataSerialiser, g => context); //ACT sPSSOMetadataProvider.CreateMetadata(MetadataType.SP); //ASSERT Assert.IsTrue(result); }
public async Task WsFederationConfigurationRetrieverTest() { //ARRANGE var logger = new LogProviderMock(); var bckChannelcertValidator = new CertificateValidatorMock(); var documentRetrieer = new HttpDocumentRetrieverMock(bckChannelcertValidator); var configurationProvider = new CertificateValidationConfigurationProvider(); var certValidator = new CertificateValidator(configurationProvider, logger); var serialiser = new FederationMetadataSerialiser(certValidator, logger); var configurationRetriever = new WsFederationConfigurationRetriever(_ => documentRetrieer, serialiser); //ACT var context = new FederationPartyConfiguration("local", "https://localhost"); var baseMetadata = await configurationRetriever.GetAsync(context, new CancellationToken()); var metadata = baseMetadata as EntityDescriptor; //ASSERT Assert.IsTrue(metadata != null); Assert.AreEqual(1, metadata.RoleDescriptors.Count); }
public void SPMetadataGenerationTest() { ////ARRANGE var result = String.Empty; var metadataWriter = new TestMetadatWriter(el => result = el.OuterXml); //var metadataWriter = new TestMetadatWriter(el => //{ // using (var writer = XmlWriter.Create(@"D:\Dan\Software\Apira\SPMetadata\SPMetadata.xml")) // { // el.WriteTo(writer); // writer.Flush(); // } //}); var logger = new LogProviderMock(); var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.SP, "local"); var metadataContext = contextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost"); context.MetadataContext = metadataContext; var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var sPSSOMetadataProvider = new SPSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT sPSSOMetadataProvider.CreateMetadata(metadataRequest); //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(result)); }
public async Task IdPMetadata_serialise_deserialise_Test() { ////ARRANGE var logger = new LogProviderMock(); string metadataXml = String.Empty; var metadataWriter = new TestMetadatWriter(el => metadataXml = el.OuterXml); CertificateValidationRulesFactory.InstanceCreator = ValidationRuleInstanceCreatorMock.CreateInstance; var contextBuilder = new InlineMetadataContextBuilder(); var metadataRequest = new MetadataGenerateRequest(MetadataType.Idp, "local"); var metadataContext = contextBuilder.BuildContext(metadataRequest); var context = new FederationPartyConfiguration(metadataRequest.FederationPartyId, "localhost"); context.MetadataContext = metadataContext; var configurationProvider = new CertificateValidationConfigurationProvider(); var certificateValidator = new CertificateValidator(configurationProvider, logger); var ssoCryptoProvider = new CertificateManager(logger); var metadataSerialiser = new FederationMetadataSerialiser(certificateValidator, logger); var metadataDispatcher = new FederationMetadataDispatcherMock(() => new[] { metadataWriter }); var idPSSOMetadataProvider = new IdpSSOMetadataProvider(metadataDispatcher, ssoCryptoProvider, metadataSerialiser, g => context, logger); //ACT await idPSSOMetadataProvider.CreateMetadata(metadataRequest); var xmlReader = XmlReader.Create(new StringReader(metadataXml)); var deserialisedMetadata = metadataSerialiser.Deserialise(xmlReader) as EntityDescriptor; //ASSERT Assert.IsFalse(String.IsNullOrWhiteSpace(metadataXml)); Assert.AreEqual(1, deserialisedMetadata.RoleDescriptors.Count); Assert.IsInstanceOf <IdentityProviderSingleSignOnDescriptor>(deserialisedMetadata.RoleDescriptors.Single()); }