예제 #1
0
        public virtual void TestFacadeEviction()
        {
            ConnectorServer server = ConnectorServer.NewInstance();

            try
            {
                GuardedString str = new GuardedString();
                str.AppendChar('c');
                str.AppendChar('h');
                str.AppendChar('a');
                str.AppendChar('n');
                str.AppendChar('g');
                str.AppendChar('e');
                str.AppendChar('i');
                str.AppendChar('t');

#if DEBUG
                const int PORT = 58760;
#else
                const int PORT = 58761;
#endif

                server.MaxFacadeLifeTime = 1;
                server.Port      = PORT;
                server.IfAddress = (IOUtil.GetIPAddress("127.0.0.1"));
                server.KeyHash   = str.GetBase64SHA1Hash();
                server.Start();

                RemoteFrameworkConnectionInfo connInfo =
                    new RemoteFrameworkConnectionInfo("127.0.0.1", PORT, str, false, null, 0);
                ConnectorInfoManager remoteManager =
                    ConnectorInfoManagerFactory.GetInstance().GetRemoteManager(connInfo);

                ConnectorInfo remoteInfo =
                    FindConnectorInfo(remoteManager, "1.0.0.0", "org.identityconnectors.testconnector.TstConnector");

                ConnectorFacade remoteFacade = ConnectorFacadeFactory.GetInstance().
                                               NewInstance(remoteInfo.CreateDefaultAPIConfiguration());

                ManagedConnectorFacadeFactoryImpl managedFactory =
                    (ManagedConnectorFacadeFactoryImpl)ConnectorFacadeFactory.GetManagedInstance();

                // Assert it's empty
                Assert.IsNull(managedFactory.Find(remoteFacade.ConnectorFacadeKey));
                remoteFacade.Schema();
                // Assert it has one item
                Assert.IsNotNull(managedFactory.Find(remoteFacade.ConnectorFacadeKey));
                Thread.Sleep(new TimeSpan(0, 2, 0));
                // Assert it's empty
                Assert.IsNull(managedFactory.Find(remoteFacade.ConnectorFacadeKey));
            }
            finally
            {
                server.Stop();
            }
        }
        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 TestConnectionPooling()
        {
            ConnectorPoolManager.Dispose();
            ConnectorInfoManager manager =
                GetConnectorInfoManager();
            ConnectorInfo info1 =
                FindConnectorInfo(manager,
                                  "1.0.0.0",
                                  "org.identityconnectors.testconnector.TstConnector");

            Assert.IsNotNull(info1);
            //reset connection count
            {
                //trigger TstConnection.init to be called
                APIConfiguration config2 =
                    info1.CreateDefaultAPIConfiguration();
                config2.ConfigurationProperties.GetProperty("resetConnectionCount").Value = (true);
                ConnectorFacade facade2 =
                    ConnectorFacadeFactory.GetInstance().NewInstance(config2);
                facade2.Schema(); //force instantiation
            }

            APIConfiguration config =
                info1.CreateDefaultAPIConfiguration();

            config.ConnectorPoolConfiguration.MinIdle = (0);
            config.ConnectorPoolConfiguration.MaxIdle = (0);

            ConnectorFacade facade1 =
                ConnectorFacadeFactory.GetInstance().NewInstance(config);

            OperationOptionsBuilder builder = new OperationOptionsBuilder();

            builder.SetOption("testPooling", "true");
            OperationOptions options = builder.Build();
            ICollection <ConnectorAttribute> attrs = CollectionUtil.NewReadOnlySet <ConnectorAttribute>();

            Assert.AreEqual("1", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("2", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("3", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("4", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            config =
                info1.CreateDefaultAPIConfiguration();
            config.ConnectorPoolConfiguration.MinIdle = (1);
            config.ConnectorPoolConfiguration.MaxIdle = (2);
            facade1 =
                ConnectorFacadeFactory.GetInstance().NewInstance(config);
            Assert.AreEqual("5", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("5", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("5", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
            Assert.AreEqual("5", facade1.Create(ObjectClass.ACCOUNT, attrs, options).GetUidValue());
        }