Esempio n. 1
0
 public void TestScriptContext()
 {
     ScriptContextBuilder builder = new ScriptContextBuilder();
     builder.ScriptLanguage = ("language");
     builder.ScriptText = ("text");
     builder.AddScriptArgument("foo", "bar");
     builder.AddScriptArgument("foo2", "bar2");
     ScriptContext v1 = builder.Build();
     ScriptContext v2 = (ScriptContext)CloneObject(v1);
     Assert.AreEqual(2, v2.ScriptArguments.Count);
     Assert.AreEqual("bar", v2.ScriptArguments["foo"]);
     Assert.AreEqual("bar2", v2.ScriptArguments["foo2"]);
     Assert.AreEqual("language", v2.ScriptLanguage);
     Assert.AreEqual("text", v2.ScriptText);
 }
        public void TestScriptOnConnectorWithCache()
        {
            var builder = new ScriptContextBuilder();
            builder.ScriptLanguage = "POWERShell";
            builder.ScriptText = "$Connector.Configuration.PropertyBag['cache'] = $Connector.Arguments.uid.GetUidValue()";
            var uid = new Uid("foo", "12345");
            builder.AddScriptArgument("uid", uid);
            GetFacade().RunScriptOnConnector(builder.Build(), null);

            builder.ScriptText = "return $Connector.Configuration.PropertyBag['cache']";
            var res = GetFacade().RunScriptOnConnector(builder.Build(), null) as List<object>;
            if (res != null)
            {
                Assert.AreEqual(res[0], uid.GetUidValue());
            }
            else
            {
                throw new ConnectorException("Not the expected result");
            }
        }
 public void TestScriptOnConnector()
 {
     var builder = new ScriptContextBuilder();
     builder.ScriptLanguage = "POWERShell";
     builder.ScriptText = "Write-Warning \"Test\"; return $Connector.Arguments.uid.GetUidValue()";
     var uid = new Uid("foo", "12345");
     builder.AddScriptArgument("uid", uid);
     var res = GetFacade().RunScriptOnConnector(builder.Build(), null) as Collection<object>;
     if (res != null)
     {
         Assert.AreEqual(res[0], uid.GetUidValue());
     }
 }
 public void TestScriptOnConnectorParalell()
 {
     Action<String, int> timeStamp = (prefix, test) =>
     {
         Console.WriteLine("{0}:{1} = {2}", prefix, test, DateTime.Now.ToString("O"));
     };
     var builder = new ScriptContextBuilder();
     builder.ScriptLanguage = "POWERShell";
     builder.ScriptText = "Start-Sleep -s 15; return Get-Date -Format o";
     var longRunningContext = builder.Build();
     builder.ScriptText = "Start-Sleep -s 10; return Get-Date -Format o";
     var mediumRunningContext = builder.Build();
     builder.ScriptText = "Start-Sleep -s 5; return Get-Date -Format o";
     var shortRunningContext = builder.Build();
     string[] result = new string[5];
     var facade = GetFacade();
     Parallel.ForEach(
         new[]
         {
             Pair<int, ScriptContext>.Of(0, longRunningContext),
             Pair<int, ScriptContext>.Of(1, mediumRunningContext),
             Pair<int, ScriptContext>.Of(2, shortRunningContext),
             Pair<int, ScriptContext>.Of(3, mediumRunningContext),
             Pair<int, ScriptContext>.Of(4, shortRunningContext)
         },
         new ParallelOptions() {MaxDegreeOfParallelism = 5},
         (context, options) =>
         {
             timeStamp("Start", context.First);
             var res = facade.RunScriptOnConnector(context.Second, null);
             timeStamp("End  ", context.First);
             var collection = res as List<object>;
             if (collection != null)
                 result[context.First] = collection[0] as String;
         });
     Assert.Greater(result[0], result[1]);
     Assert.Greater(result[0], result[2]);
     Assert.Less(result[2], result[1]);
 }
        public void TestScriptOperations()
        {
            IAsyncConnectorInfoManager manager = ConnectorInfoManager;
            var task = manager.FindConnectorInfoAsync(TestStatefulConnectorKey);
            Assert.IsTrue(task.Wait(TimeSpan.FromMinutes(5)));

            ConnectorFacade facade = ConnectorFacade;

            ScriptContextBuilder contextBuilder = new ScriptContextBuilder
            {
                ScriptLanguage = "Boo",
                ScriptText = "arg",
            };
            contextBuilder.AddScriptArgument("arg", "test");

            object o = facade.RunScriptOnConnector(contextBuilder.Build(), null);
            Assert.AreEqual(o, "test");
            o = facade.RunScriptOnResource(contextBuilder.Build(), null);
            Assert.AreEqual(o, "test");
        }
        public void TestNullOperations()
        {
            IAsyncConnectorInfoManager manager = ConnectorInfoManager;
            var task = manager.FindConnectorInfoAsync(TestStatefulConnectorKey);
            Assert.IsTrue(task.Wait(TimeSpan.FromMinutes(5)));

            ConnectorFacade facade = GetConnectorFacade(true, true);
            OperationOptionsBuilder optionsBuilder = new OperationOptionsBuilder();
            facade.Test();
            Assert.IsNull(facade.Schema());

            var guardedString = new GuardedString();
            "Passw0rd".ToCharArray().ToList().ForEach(p => guardedString.AppendChar(p));

            Uid uid = facade.Create(ObjectClass.ACCOUNT,
                CollectionUtil.NewSet(new Name("CREATE_01"), ConnectorAttributeBuilder.BuildPassword(guardedString)),
                optionsBuilder.Build());
            Assert.IsNull(uid);

            Uid resolvedUid = facade.ResolveUsername(ObjectClass.ACCOUNT, "CREATE_01", optionsBuilder.Build());
            Assert.IsNull(resolvedUid);

            Uid authenticatedUid = facade.Authenticate(ObjectClass.ACCOUNT, "CREATE_01", guardedString,
                optionsBuilder.Build());
            Assert.IsNull(authenticatedUid);

            SyncToken token = facade.GetLatestSyncToken(ObjectClass.ACCOUNT);
            Assert.IsNull(token);

            SyncToken lastToken = facade.Sync(ObjectClass.ACCOUNT, new SyncToken(-1),
                new SyncResultsHandler {Handle = delta => true}, optionsBuilder.Build());

            Assert.IsNull(lastToken);

            SearchResult searchResult = facade.Search(ObjectClass.ACCOUNT, null,
                new ResultsHandler {Handle = connectorObject => true}, optionsBuilder.Build());

            Assert.IsNull(searchResult);

            Uid updatedUid = facade.Update(ObjectClass.ACCOUNT, new Uid("1"),
                CollectionUtil.NewSet(ConnectorAttributeBuilder.BuildLockOut(true)), optionsBuilder.Build());
            Assert.IsNull(updatedUid);

            ConnectorObject co = facade.GetObject(ObjectClass.ACCOUNT, new Uid("1"), optionsBuilder.Build());
            Assert.IsNull(co);

            ScriptContextBuilder contextBuilder = new ScriptContextBuilder
            {
                ScriptLanguage = "Boo",
                ScriptText = "arg"
            };
            contextBuilder.AddScriptArgument("arg", "test");

            object o = facade.RunScriptOnConnector(contextBuilder.Build(), optionsBuilder.Build());
            Assert.AreEqual(o, "test");
            o = facade.RunScriptOnResource(contextBuilder.Build(), optionsBuilder.Build());
            Assert.IsNull(o);
        }
        public virtual void TestConfigurationUpdate()
        {
            IAsyncConnectorInfoManager manager = ConnectorInfoManager;
            var taskA = manager.FindConnectorInfoAsync(TestStatefulConnectorKey);
            var taskB = manager.FindConnectorInfoAsync(TestPoolableStatefulConnectorKey);
            Assert.IsTrue(taskA.Wait(TimeSpan.FromMinutes(5)));
            Assert.IsTrue(taskB.Wait(TimeSpan.FromMinutes(5)));

            ConnectorInfo[] infos =
            {
                taskA.Result,
                taskB.Result
            };
            foreach (ConnectorInfo info in infos)
            {
                APIConfiguration api = info.CreateDefaultAPIConfiguration();

                ConfigurationProperties props = api.ConfigurationProperties;
                props.GetProperty("randomString").Value = StringUtil.RandomString();
                api.ProducerBufferSize = 0;

                var listener = new ConfigurationPropertyChangeListener();
                api.ChangeListener = listener;

                ConnectorFacade facade = ConnectorFramework.NewInstance(api);

                ScriptContextBuilder builder = new ScriptContextBuilder
                {
                    ScriptLanguage = "Boo",
                    ScriptText = "connector.Update()"
                };

                facade.RunScriptOnConnector(builder.Build(), null);

                for (int i = 0; (i < 25 && null == listener.Changes); i++)
                {
                    Thread.Sleep(1000);
                }
                Assert.NotNull(listener.Changes);
                Assert.AreEqual(listener.Changes.Count, 1);
                Assert.AreEqual(listener.Changes.First().Value, "change");
            }
        }
Esempio n. 8
0
        public void TestScripting()
        {
            ConnectorInfoManager manager =
                GetConnectorInfoManager();
            ConnectorInfo info =
                FindConnectorInfo(manager,
                        "1.0.0.0",
                        "org.identityconnectors.testconnector.TstConnector");
            Assert.IsNotNull(info);
            APIConfiguration api = info.CreateDefaultAPIConfiguration();

            ConnectorFacadeFactory facf = ConnectorFacadeFactory.GetInstance();
            ConnectorFacade facade = facf.NewInstance(api);

            ScriptContextBuilder builder = new ScriptContextBuilder();
            builder.AddScriptArgument("arg1", "value1");
            builder.AddScriptArgument("arg2", "value2");
            builder.ScriptLanguage = ("BOO");

            //test that they can run the script and access the
            //connector object
            {
                String SCRIPT =
                    "connector.concat(arg1,arg2)";
                builder.ScriptText = (SCRIPT);
                String result = (String)facade.RunScriptOnConnector(builder.Build(),
                        null);

                Assert.AreEqual("value1value2", result);
            }

            //test that they can access a class in the class loader
            {
                String SCRIPT =
                    "import org.identityconnectors.testconnector\n" +
                    "TstConnector.GetVersion()";
                builder.ScriptText = (SCRIPT);
                String result = (String)facade.RunScriptOnConnector(builder.Build(),
                        null);
                Assert.AreEqual("1.0", result);
            }

            //test that they cannot access a class in internal
            {
                Type clazz = typeof(ConfigurationPropertyImpl);

                String SCRIPT =
                    "import " + clazz.Namespace + "\n" +
                    clazz.Name + "()";
                builder.ScriptText = (SCRIPT);
                try
                {
                    facade.RunScriptOnConnector(builder.Build(),
                            null);
                    Assert.Fail("exception expected");
                }
                catch (Exception e)
                {
                    String msg = e.Message;
                    String expectedMessage =
                        "Namespace '" + clazz.Namespace + "' not found";
                    Assert.IsTrue(
                            msg.Contains(expectedMessage),
                            "Unexpected message: " + msg);
                }
            }

            // test that they can access a class in common
            {
                Type clazz = typeof(ConnectorAttributeBuilder);
                String SCRIPT =
                    "import " + clazz.Namespace + "\n" +
                    clazz.Name + ".Build(\"myattr\")";
                builder.ScriptText = (SCRIPT);
                ConnectorAttribute attr = (ConnectorAttribute)facade.RunScriptOnConnector(builder.Build(), null);
                Assert.AreEqual("myattr", attr.Name);
            }
        }