Ejemplo n.º 1
0
        private SIF_ZoneStatus createZoneStatus()
        {
            SIF_ZoneStatus zoneStatus = new SIF_ZoneStatus();
            SIF_Providers  providers  = new SIF_Providers();

            zoneStatus.SIF_Providers = providers;

            SIF_Provider provider = new SIF_Provider();

            provider.SourceId       = "SPProvider";
            provider.SIF_ObjectList = new SIF_ObjectList(new SIF_Object("StudentPersonal"));
            providers.Add(provider);


            provider          = new SIF_Provider();
            provider.SourceId = "AcmeAgent";
            SIF_ObjectList objects = new SIF_ObjectList();

            objects.Add(new SIF_Object("Authentication"));
            objects.Add(new SIF_Object("SchoolInfo"));
            objects.Add(new SIF_Object("Acme"));
            objects.Add(new SIF_Object("SIF_AgentACL"));
            provider.SIF_ObjectList = objects;
            providers.Add(provider);

            return(zoneStatus);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Gets the SIF_ZoneStatus object
        /// </summary>
        private void GetZoneStatus()
        {
            Console.WriteLine();
            Console.WriteLine("Requesting SIF_ZoneStatus from all zones...");
            // Determine if the synchronous SIF_GetZoneStatus method can be used
            Query zoneStatusQuery = new Query(InfraDTD.SIF_ZONESTATUS);

            zoneStatusQuery.AddFieldRestriction(InfraDTD.SIF_ZONESTATUS_SIF_PROVIDERS);
            zoneStatusQuery.UserData = fSessionId;

            foreach (IZone zone in ZoneFactory.GetAllZones())
            {
                if (zone.Properties.UseZoneStatusSystemControl)
                {
                    SIF_ZoneStatus zs = zone.GetZoneStatus();
                    _processSIF_ZoneStatus(zs, zone);
                }
                else
                {
                    // Just create a SIF_Request and it will be handled by the
                    // OnQueryResults method
                    zone.Query(zoneStatusQuery);
                }
            }
        }
Ejemplo n.º 3
0
        public void testSelectNodes()
        {
            SIF_ZoneStatus  zoneStatus = createZoneStatus();
            SifXPathContext context    = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            // Select all of the objects that are provided in this zone
            XPathNodeIterator iterator = context.Select("//SIF_Provider/*/SIF_Object");

            Assert.AreEqual(5, iterator.Count, "Should be 5 objects selected");
        }
Ejemplo n.º 4
0
        public void testCustomFunction()
        {
            SIF_ZoneStatus  zoneStatus = createZoneStatus();
            SifXPathContext context    = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            object          value      =
                context.GetValue(
                    "adk:toLowerCase(SIF_Providers/SIF_Provider[SIF_ObjectList/SIF_Object[@ObjectName='SchoolInfo']]/@SourceId)");

            Assert.AreEqual("acmeagent", value, "Value");
        }
Ejemplo n.º 5
0
        public void testGetValue()
        {
            SIF_ZoneStatus  zoneStatus = createZoneStatus();
            SifXPathContext context    = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            object          value      =
                context.GetValue(
                    "SIF_Providers/SIF_Provider[SIF_ObjectList/SIF_Object[@ObjectName='SchoolInfo']]/@SourceId");

            Assert.AreEqual("AcmeAgent", value.ToString(), "Value");
        }
Ejemplo n.º 6
0
        public void testGetValueSubstring()
        {
            SIF_ZoneStatus zoneStatus = createZoneStatus();

            Console.WriteLine(zoneStatus.ToXml());

            SifXPathContext context = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            Object          value   =
                context.GetValue(
                    "substring(SIF_Providers/SIF_Provider[SIF_ObjectList/SIF_Object[@ObjectName='SchoolInfo']]/@SourceId, 5)");

            Assert.AreEqual("Agent", value, "Value");
        }
Ejemplo n.º 7
0
        public void testSelectSingleNode()
        {
            SIF_ZoneStatus  zoneStatus = createZoneStatus();
            SifXPathContext context    = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            // Select a single object provider
            XPathNodeIterator iterator =
                context.Select("SIF_Providers/SIF_Provider[SIF_ObjectList/SIF_Object[@ObjectName='StudentPersonal']]");

            Assert.AreEqual(1, iterator.Count);
            Assert.IsTrue(iterator.MoveNext());

            Element node = (Element)iterator.Current.UnderlyingObject;

            Assert.IsNotNull(node);
        }
Ejemplo n.º 8
0
        public void testIterate()
        {
            SIF_ZoneStatus  zoneStatus = createZoneStatus();
            SifXPathContext context    = SifXPathContext.NewSIFContext(zoneStatus, SifVersion.SIF20);
            // Select all of the objects that are provided in this zone
            XPathNodeIterator iterator = context.Select("//SIF_Provider/*/SIF_Object");
            int a = 0;

            foreach (XPathNavigator o in iterator)
            {
                Console.WriteLine(o.UnderlyingObject);
                a++;
            }
            Assert.AreEqual(5, a, "Should have iterated 5 objects");
        }
Ejemplo n.º 9
0
        public void OnQueryResults(IDataObjectInputStream data,
                                   SIF_Error error,
                                   IZone zone,
                                   IMessageInfo info)
        {
            SifMessageInfo smi = (SifMessageInfo)info;

            if (!(fRequestState.Equals(smi.SIFRequestInfo.UserData)))
            {
                // This is a SIF_ZoneStatus response from a previous invocation of the agent
                return;
            }
            if (data.Available)
            {
                SIF_ZoneStatus zoneStatus = data.ReadDataObject() as SIF_ZoneStatus;
                AsyncUtils.QueueTaskToThreadPool(new zsDelegate(_processSIF_ZoneStatus), zoneStatus, zone);
            }
        }
Ejemplo n.º 10
0
        public void testSynchronousGetZoneStatus()
        {
            Adk.SifVersion = (SifVersion.LATEST);
            Zone.Connect(ProvisioningFlags.None);
            InMemoryProtocolHandler handler = (InMemoryProtocolHandler)Zone.ProtocolHandler;

            Zone.Properties.UseZoneStatusSystemControl = true;
            Zone.Properties.ZisVersion = SifVersion.SIF15r1.ToString();
            handler.clear();

            SIF_ZoneStatus szs = Zone.GetZoneStatus();

            SIF_SystemControl ssc = (SIF_SystemControl)handler.readMsg();

            Assert.AreEqual(SifVersion.SIF15r1, ssc.SifVersion, "SifVersion");
            Assert.AreEqual(SifVersion.SIF15r1.Xmlns, ssc.GetXmlns(), "SifVersion->Xmlns");
            SifElement element = ssc.SIF_SystemControlData.GetChildList()[0];

            Assert.IsNotNull(element, "SIF_SystemControlData\\Child");
            Assert.IsTrue(element is SIF_GetZoneStatus, "is instanceof SIF_GetZoneStatus");
        }
Ejemplo n.º 11
0
        private void _processSIF_ZoneStatus(SIF_ZoneStatus zoneStatus, IZone zone)
        {
            if (zoneStatus == null)
            {
                return;
            }

            bool      sync       = getChameleonProperty(zone, "sync", false);
            bool      events     = getChameleonProperty(zone, "logEvents", true);
            bool      logEntry   = getChameleonProperty(zone, "sifLogEntrySupport", false);
            ArrayList objectDefs = new ArrayList();

            SIF_Providers providers = zoneStatus.SIF_Providers;

            if (providers != null)
            {
                foreach (SIF_Provider p in providers)
                {
                    foreach (SIF_Object obj in p.SIF_ObjectList)
                    {
                        // Lookup the topic for each provided object in the zone
                        IElementDef def = Adk.Dtd.LookupElementDef(obj.ObjectName);
                        if (def != null)
                        {
                            objectDefs.Add(def);
                            ITopic topic = TopicFactory.GetInstance(def);
                            if (topic.GetSubscriber() == null)
                            {
                                if (events)
                                {
                                    topic.SetSubscriber(fLogger, new SubscriptionOptions());
                                }
                                if (sync)
                                {
                                    topic.SetQueryResults(fLogger);
                                }
                            }
                        }
                    }
                }
            }

            if (logEntry)
            {
                ITopic sifLogEntryTopic = TopicFactory.GetInstance(InfraDTD.SIF_LOGENTRY);
                sifLogEntryTopic.SetSubscriber(fLogger, new SubscriptionOptions());
            }

            foreach (ITopic topic in TopicFactory.GetAllTopics(SifContext.DEFAULT))
            {
                try
                {
                    // Join the topic to each zone ( causes the agent to subscribe to the joined objects )
                    // TODO: Add an "isJoinedTo()" API to topic so that it doesn't throw an exception
                    if (topic.ObjectType != InfraDTD.SIF_ZONESTATUS.Name)
                    {
                        topic.Join(zone);
                    }
                }
                catch (Exception ex)
                {
                    zone.Log.Error(ex.Message, ex);
                }
            }

            if (sync)
            {
                if (objectDefs.Count == 0)
                {
                    zone.ServerLog.Log
                        (LogLevel.WARNING, "No objects are being provided in this zone", null,
                        "1001");
                }
                string syncObjects = zone.Properties.GetProperty("chameleon.syncObjects");
                foreach (IElementDef def in objectDefs)
                {
                    if (def.IsSupported(Adk.SifVersion))
                    {
                        if (syncObjects == null ||
                            (syncObjects.Length > 0 && syncObjects.IndexOf(def.Name) > -1))
                        {
                            Query q = new Query(def);

                            // Query by specific parameters
                            string condition =
                                zone.Properties.GetProperty
                                    ("chameleon.syncConditions." + def.Name);
                            if (condition != null && condition.Length > 0)
                            {
                                // The condition should be in the format "path=value" e.g "@RefId=123412341...1234|@Name=asdfasdf"
                                String[] queryConditions = condition.Split('|');
                                foreach (String cond in queryConditions)
                                {
                                    string[] conds = cond.Split('=');
                                    if (conds.Length == 2)
                                    {
                                        q.AddCondition(conds[0], "EQ", conds[1]);
                                    }
                                }
                            }

                            if (logEntry)
                            {
                                zone.ServerLog.Log
                                    (LogLevel.INFO,
                                    "Requesting " + q.ObjectType.Name + " from the zone",
                                    q.ToXml(Adk.SifVersion), "1002");
                            }

                            zone.Query(q);
                        }
                    }
                    else
                    {
                        String debug = "Will not request " + def.Name +
                                       " because it is not supported in " +
                                       Adk.SifVersion.ToString();
                        Console.WriteLine(debug);
                        zone.ServerLog.Log(LogLevel.WARNING, debug, null, "1001");
                    }
                }
            }
        }