public void BrokerSMIAppenderTest()
{
var trace = TraceManager.BeginTrace();
var brokerAppender = TraceManager_Accessor.appenders.Where(a => a is pt.sapo.gis.trace.appender.SMI.BrokerSMILoggerAppender).FirstOrDefault() as pt.sapo.gis.trace.appender.SMI.BrokerSMILoggerAppender;
var broker = new SapoBrokerClient.BrokerClient(new SapoBrokerClient.HostInfo(brokerAppender.Properties.Host, brokerAppender.Properties.Port));
var subscription = new SapoBrokerClient.Subscription(brokerAppender.Properties.Topic, SapoBrokerClient.NetAction.DestinationType.TOPIC);
JObject report = null;
var ev = new ManualResetEvent(false);
subscription.OnMessage += m =>
{
var str = new StringWriter();
var jsonSer = new Newtonsoft.Json.JsonSerializer();
report = JObject.Parse(Encoding.UTF8.GetString(m.Message.Payload));
ev.Set();
};
broker.Subscribe(subscription);
var e = new pt.sapo.gis.trace.Entry
{
Type = "UNKNOWN",
Description = "Who knowns...",
Severity = pt.sapo.gis.trace.configuration.severityType.FATAL,
Properties = new Dictionary<String, Object> { { "a", "1" }, { "b", "foo" } }
};
trace.TraceEntry(e);
if (ev.WaitOne(TimeSpan.FromSeconds(10)) == false)
Assert.Fail("Broker message doesn't arrive.");
Assert.IsNotNull(report["SourceID"]);
var defaultSourceId = TraceManager_Accessor.appenders.Where(a => a is BrokerSMILoggerAppender).Cast<BrokerSMILoggerAppender>().First().Properties.DefaultSourceId;
Assert.AreEqual(defaultSourceId, report["SourceID"]);
Assert.IsNotNull(report["DateTime"]);
var state = report["State"];
Assert.IsNotNull(state);
Assert.IsNotNull(state["Health"]);
Assert.AreEqual(pt.sapo.sdb.smi.HealthState.OperationalWithFailures.ToString(), state["Health"]);
Assert.IsNotNull(state["Execution"]);
Assert.AreEqual(pt.sapo.sdb.smi.ExecutionState.Active.ToString(), state["Execution"]);
Assert.IsNotNull(state["Failures"]);
Assert.AreEqual(1, state["Failures"].Count());
var failure = state["Failures"].First();
Assert.IsNotNull(failure["FailureID"]);
Assert.AreEqual(e.Type.ToString(), failure["FailureID"]);
Assert.AreEqual(defaultSourceId, failure["SourceID"]);
var details = failure["Details"];
Assert.IsNotNull(details);
Assert.IsNotNull(details["a"]);
Assert.AreEqual(JTokenType.String, details["a"].Type);
Assert.AreEqual("1", details["a"]);
Assert.IsNotNull(details["b"]);
Assert.AreEqual(JTokenType.String, details["b"].Type);
Assert.AreEqual("foo", details["b"]);
Assert.IsNotNull(report["Metrics"]);
Assert.IsNotNull(report["ActivityID"]);
Assert.IsNotNull(report["AgentID"]);
}