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); }
/// <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); } } }
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"); }
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"); }
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"); }
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"); }
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); }
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"); }
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); } }
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"); }
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"); } } } }