public void TestTimeout() { ConnectorInfoManager manager = GetConnectorInfoManager(); ConnectorInfo info1 = FindConnectorInfo(manager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector"); Assert.IsNotNull(info1); APIConfiguration config = info1.CreateDefaultAPIConfiguration(); config.SetTimeout(SafeType <APIOperation> .ForRawType(typeof(CreateApiOp)), 5000); config.SetTimeout(SafeType <APIOperation> .ForRawType(typeof(SearchApiOp)), 5000); ConfigurationProperties props = config.ConfigurationProperties; ConfigurationProperty property = props.GetProperty("numResults"); // 1000 is several times the remote size between pauses property.Value = 2; OperationOptionsBuilder opBuilder = new OperationOptionsBuilder(); opBuilder.SetOption("delay", 10000); ConnectorFacade facade1 = ConnectorFacadeFactory.GetInstance().NewInstance(config); ICollection <ConnectorAttribute> attrs = CollectionUtil.NewReadOnlySet <ConnectorAttribute>(); try { facade1.Create(ObjectClass.ACCOUNT, attrs, opBuilder.Build()).GetUidValue(); Assert.Fail("expected timeout"); } catch (OperationTimeoutException) { // expected } //catch (RemoteWrappedException e) //{ // Assert.IsTrue(e.Is(typeof(OperationTimeoutException))); //} try { facade1.Search(ObjectClass.ACCOUNT, null, new ResultsHandler() { Handle = obj => { return(true); } }, opBuilder.Build()); Assert.Fail("expected timeout"); } catch (OperationTimeoutException) { // expected } //catch (RemoteWrappedException e) //{ // Assert.IsTrue(e.Is(typeof(OperationTimeoutException))); //} }
public void TestAPIConfiguration() { ConnectorInfoManager manager = GetConnectorInfoManager(); ConnectorInfo info = FindConnectorInfo(manager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector"); Assert.IsNotNull(info); APIConfiguration api = info.CreateDefaultAPIConfiguration(); ConfigurationProperties props = api.ConfigurationProperties; ConfigurationProperty property = props.GetProperty("tstField"); Assert.IsNotNull(property); ICollection <SafeType <APIOperation> > operations = property.Operations; Assert.AreEqual(1, operations.Count); Assert.IsTrue(operations.Contains(SafeType <APIOperation> .Get <SyncApiOp>())); Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); Assert.AreEqual("Help for test field.", property.GetHelpMessage(null)); Assert.AreEqual("Display for test field.", property.GetDisplayName(null)); Assert.AreEqual("Group for test field.", property.GetGroup(null)); Assert.AreEqual("Test Framework Value", info.Messages.Format("TEST_FRAMEWORK_KEY", "empty")); CultureInfo eslocale = new CultureInfo("es"); Thread.CurrentThread.CurrentUICulture = eslocale; Assert.AreEqual("tstField.help_es", property.GetHelpMessage(null)); Assert.AreEqual("tstField.display_es", property.GetDisplayName(null)); CultureInfo esESlocale = new CultureInfo("es-ES"); Thread.CurrentThread.CurrentUICulture = esESlocale; Assert.AreEqual("tstField.help_es-ES", property.GetHelpMessage(null)); Assert.AreEqual("tstField.display_es-ES", property.GetDisplayName(null)); CultureInfo esARlocale = new CultureInfo("es-AR"); Thread.CurrentThread.CurrentUICulture = esARlocale; Assert.AreEqual("tstField.help_es", property.GetHelpMessage(null)); Assert.AreEqual("tstField.display_es", property.GetDisplayName(null)); ConnectorFacadeFactory facf = ConnectorFacadeFactory.GetInstance(); ConnectorFacade facade = facf.NewInstance(api); // call the various create/update/delete commands.. facade.Schema(); }
public void TestValidate() { ConnectorInfoManager manager = GetConnectorInfoManager(); ConnectorInfo info = FindConnectorInfo(manager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector"); Assert.IsNotNull(info); APIConfiguration api = info.CreateDefaultAPIConfiguration(); ConfigurationProperties props = api.ConfigurationProperties; ConfigurationProperty property = props.GetProperty("failValidation"); property.Value = false; ConnectorFacadeFactory facf = ConnectorFacadeFactory.GetInstance(); ConnectorFacade facade = facf.NewInstance(api); facade.Validate(); property.Value = true; facade = facf.NewInstance(api); try { Thread.CurrentThread.CurrentUICulture = new CultureInfo("en"); facade.Validate(); Assert.Fail("exception expected"); } catch (ConnectorException e) { Assert.AreEqual("validation failed en", e.Message); } try { Thread.CurrentThread.CurrentUICulture = new CultureInfo("es"); facade.Validate(); Assert.Fail("exception expected"); } catch (ConnectorException e) { Assert.AreEqual("validation failed es", e.Message); } }
public static Hasher DefaultHasher(ConfigurationProperties properties) { switch (properties.GetProperty("crypto.type", "(unknown)")) { case "argon2": var cryptoArgon2MaxDuration = int.Parse(properties.GetProperty("crypto.argon2.max.duration", "10") !); var cryptoArgon2MemoryCost = int.Parse(properties.GetProperty("crypto.argon2.memory.cost", "65536") !); var cryptoArgon2Parallelism = int.Parse(properties.GetProperty("crypto.argon2.parallelism", "1") !); return(new Argon2Hasher(cryptoArgon2MaxDuration, cryptoArgon2MemoryCost, cryptoArgon2Parallelism)); case "scrypt": var cryptoScryptNCostFactor = int.Parse(properties.GetProperty("crypto.scrypt.N.cost.factor", "16384") !); var cryptoScryptRBlocksize = int.Parse(properties.GetProperty("crypto.scrypt.r.blocksize", "8") !); var cryptoScryptPParallelization = int.Parse(properties.GetProperty("crypto.scrypt.p.parallelization", "1") !); return(new SCryptHasher(cryptoScryptNCostFactor, cryptoScryptRBlocksize, cryptoScryptPParallelization)); case "bcrypt": throw new NotImplementedException("bcrypt is not implemented"); default: throw new NotImplementedException("Crypto type is not defined."); } }
public void TestSyncWithManyResults() { ConnectorInfoManager manager = GetConnectorInfoManager(); ConnectorInfo info = FindConnectorInfo(manager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector"); Assert.IsNotNull(info); APIConfiguration api = info.CreateDefaultAPIConfiguration(); ConfigurationProperties props = api.ConfigurationProperties; ConfigurationProperty property = props.GetProperty("numResults"); //1000 is several times the remote size between pauses property.Value = (1000); ConnectorFacadeFactory facf = ConnectorFacadeFactory.GetInstance(); ConnectorFacade facade = facf.NewInstance(api); SyncToken latest = facade.GetLatestSyncToken(ObjectClass.ACCOUNT); Assert.AreEqual("mylatest", latest.Value); IList <SyncDelta> results = new List <SyncDelta>(); facade.Sync(ObjectClass.ACCOUNT, null, new SyncResultsHandler() { Handle = obj => { results.Add(obj); return(true); } }, null); Assert.AreEqual(1000, results.Count); for (int i = 0; i < results.Count; i++) { SyncDelta obj = results[i]; Assert.AreEqual(i.ToString(), obj.Uid.GetUidValue()); } results.Clear(); facade.Sync(ObjectClass.ACCOUNT, null, new SyncResultsHandler() { Handle = obj => { if (results.Count < 500) { results.Add(obj); return(true); } else { return(false); } } } , null); Assert.AreEqual(500, results.Count); for (int i = 0; i < results.Count; i++) { SyncDelta obj = results[i]; Assert.AreEqual(i.ToString(), obj.Uid.GetUidValue()); } }
public void TestSearchWithManyResults() { ConnectorInfoManager manager = GetConnectorInfoManager(); ConnectorInfo info = FindConnectorInfo(manager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector"); Assert.IsNotNull(info); APIConfiguration api = info.CreateDefaultAPIConfiguration(); api.ProducerBufferSize = 0; ConfigurationProperties props = api.ConfigurationProperties; ConfigurationProperty property = props.GetProperty("numResults"); //1000 is several times the remote size between pauses property.Value = 1000; ConnectorFacadeFactory facf = ConnectorFacadeFactory.GetInstance(); ConnectorFacade facade = facf.NewInstance(api); IList <ConnectorObject> results = new List <ConnectorObject>(); SearchResult searchResult = facade.Search(ObjectClass.ACCOUNT, null, new ResultsHandler() { Handle = obj => { results.Add(obj); return(true); } }, null); Assert.AreEqual(1000, results.Count); Assert.AreEqual(0, searchResult.RemainingPagedResults); for (int i = 0; i < results.Count; i++) { ConnectorObject obj = results[i]; Assert.AreEqual(i.ToString(), obj.Uid.GetUidValue()); } results.Clear(); searchResult = facade.Search(ObjectClass.ACCOUNT, null, new ResultsHandler() { Handle = obj => { if (results.Count < 500) { results.Add(obj); return(true); } else { return(false); } } }, null); Assert.AreEqual(500, results.Count); Assert.IsTrue(500 == searchResult.RemainingPagedResults || 401 == searchResult.RemainingPagedResults); for (int i = 0; i < results.Count; i++) { ConnectorObject obj = results[i]; Assert.AreEqual(i.ToString(), obj.Uid.GetUidValue()); } }