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);
            }
        }
Esempio n. 4
0
        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());
            }
        }