public void when_try_release_where_envelope_null() { var memoryQuarantine = new MemoryQuarantine(); var immutableEnvelope = new ImmutableEnvelope("EnvId", DateTime.UtcNow, new SerializerTest1 { Name = "Test1" }, new[] { new MessageAttribute("key1", "val1"), new MessageAttribute("key2", "val2"), }); var result0 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); memoryQuarantine.TryRelease(null); var result1 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); var result2 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); var result3 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); var result4 = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); Assert.IsFalse(result0); Assert.IsFalse(result1); Assert.IsFalse(result2); Assert.IsTrue(result3); Assert.IsFalse(result4); }
public void when_more_try_to_quarantine() { var memoryQuarantine = new MemoryQuarantine(); var immutableEnvelope = new ImmutableEnvelope("EnvId", DateTime.UtcNow, new SerializerTest1 { Name = "Test1" }, new[] { new MessageAttribute("key1", "val1"), new MessageAttribute("key2", "val2"), }); const int callCount = 30; var results = new bool[callCount]; for (int i = 0; i < callCount; i++) { results[i] = memoryQuarantine.TryToQuarantine(immutableEnvelope, new Exception()); } for (int i = 0; i < callCount; i++) { if ((i + 1) % 4 == 0) { Assert.IsTrue(results[i]); } else { Assert.IsFalse(results[i]); } } }
public bool TryToQuarantine(ImmutableEnvelope context, Exception ex) { // quit immediately, we don't want an endless cycle! //if (context.Items.Any(m => m.Content is MessageQuarantined)) // return true; var quarantined = _quarantine.TryToQuarantine(context, ex); try { var file = string.Format("{0:yyyy-MM-dd}-{1}-engine.txt", DateTime.UtcNow, context.EnvelopeId.ToLowerInvariant()); var data = ""; if (_root.Exists(file)) { using (var stream = _root.OpenRead(file)) using (var reader = new StreamReader(stream)) { data = reader.ReadToEnd(); } } var builder = new StringBuilder(data); if (builder.Length == 0) { DescribeMessage(builder, context); } builder.AppendLine("[Exception]"); builder.AppendLine(DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)); builder.AppendLine(ex.ToString()); builder.AppendLine(); var text = builder.ToString(); using (var stream = _root.OpenWrite(file)) using (var writer = new StreamWriter(stream)) { writer.Write(text); } if (quarantined) { ReportFailure(text, context); } } catch (Exception x) { SystemObserver.Notify(x.ToString()); } return(quarantined); }
public bool TryToQuarantine(ImmutableEnvelope envelope, Exception ex) { var quarantined = _quarantine.TryToQuarantine(envelope, ex); try { var item = GetStreamingItem(envelope.CreatedOnUtc, envelope.EnvelopeId); var data = ""; try { data = item.ReadText(); } catch (StreamingItemNotFoundException) { } var builder = new StringBuilder(data); if (builder.Length == 0) { builder.AppendLine(envelope.PrintToString(o => o.SerializeAndFormat())); } builder.AppendLine("[Exception]"); builder.AppendLine(DateTime.UtcNow.ToString()); builder.AppendLine(ex.ToString()); builder.AppendLine(); var text = builder.ToString(); item.WriteText(text); if (quarantined) { ReportFailure(text, envelope); } } catch (Exception x) { Trace.WriteLine(x.ToString()); } return(quarantined); }