public void UnderReleaseBufferLeak() { ResourceLeakDetector.DetectionLevel preservedLevel = ResourceLeakDetector.Level; try { ResourceLeakDetector.Level = ResourceLeakDetector.DetectionLevel.Paranoid; var eventListener = new ObservableEventListener(); Mock <IObserver <EventEntry> > logListener = this.mockRepo.Create <IObserver <EventEntry> >(); var eventTextFormatter = new EventTextFormatter(); Func <EventEntry, bool> leakPredicate = y => y.TryFormatAsString(eventTextFormatter).Contains("LEAK"); logListener.Setup(x => x.OnNext(It.Is <EventEntry>(y => leakPredicate(y)))).Verifiable(); logListener.Setup(x => x.OnNext(It.Is <EventEntry>(y => !leakPredicate(y)))); eventListener.Subscribe(logListener.Object); eventListener.EnableEvents(DefaultEventSource.Log, EventLevel.Verbose); this.CreateAndForgetBuffer(); GC.Collect(); GC.WaitForPendingFinalizers(); this.mockRepo.Verify(); } finally { ResourceLeakDetector.Level = preservedLevel; } }
public void UnderReleaseBufferLeak() { ResourceLeakDetector.DetectionLevel preservedLevel = ResourceLeakDetector.Level; try { ResourceLeakDetector.Level = ResourceLeakDetector.DetectionLevel.Paranoid; bool observedLeak = false; LogTestHelper.Intercept logInterceptor = (name, level, id, message, exception) => { if (message.Contains("LEAK")) { observedLeak = true; } }; using (LogTestHelper.SetInterceptionLogger(logInterceptor)) { this.CreateAndForgetBuffer(); GC.Collect(); GC.WaitForPendingFinalizers(); } Assert.True(observedLeak); } finally { ResourceLeakDetector.Level = preservedLevel; } }
public void ResampleNoLeak() { ResourceLeakDetector.DetectionLevel preservedLevel = ResourceLeakDetector.Level; try { ResourceLeakDetector.Level = ResourceLeakDetector.DetectionLevel.Paranoid; IByteBuffer buffer = PooledByteBufferAllocator.Default.Buffer(10); buffer.Release(); buffer = PooledByteBufferAllocator.Default.Buffer(10); buffer.Release(); } finally { ResourceLeakDetector.Level = preservedLevel; } }