madrob commented on a change in pull request #227:
URL: https://github.com/apache/solr/pull/227#discussion_r674165749



##########
File path: solr/core/src/test/org/apache/solr/util/TestObjectReleaseTracker.java
##########
@@ -16,46 +16,103 @@
  */
 package org.apache.solr.util;
 
-import org.apache.lucene.util.TestRuleLimitSysouts.Limit;
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.ObjectReleaseTracker;
+import org.apache.solr.common.util.SolrNamedThreadFactory;
+import org.hamcrest.MatcherAssert;
 import org.junit.Test;
 
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+import static org.hamcrest.Matchers.containsString;
 
-@Limit(bytes=150000) // raise limit as this writes to sys err
 public class TestObjectReleaseTracker extends SolrTestCaseJ4 {
-  
+
   @Test
-  public void testObjectReleaseTracker() {
-    ObjectReleaseTracker.track(new Object());
-    ObjectReleaseTracker.release(new Object());
-    assertNotNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
-    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+  public void testReleaseObject() {
     Object obj = new Object();
     ObjectReleaseTracker.track(obj);
     ObjectReleaseTracker.release(obj);
     assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
-    
+
     Object obj1 = new Object();
     ObjectReleaseTracker.track(obj1);
     Object obj2 = new Object();
     ObjectReleaseTracker.track(obj2);
     Object obj3 = new Object();
     ObjectReleaseTracker.track(obj3);
-    
+
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     ObjectReleaseTracker.release(obj3);
     assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
-    
+  }
+
+  @Test
+  public void testUnreleased() {
+    Object obj1 = new Object();
+    Object obj2 = new Object();
+    Object obj3 = new Object();
+
     ObjectReleaseTracker.track(obj1);
     ObjectReleaseTracker.track(obj2);
     ObjectReleaseTracker.track(obj3);
     
     ObjectReleaseTracker.release(obj1);
     ObjectReleaseTracker.release(obj2);
     // ObjectReleaseTracker.release(obj3);
+
     assertNotNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
     assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
   }
+
+  @Test
+  public void testReleaseDifferentObject() {
+    ObjectReleaseTracker.track(new Object());
+    ObjectReleaseTracker.release(new Object());
+    assertNotNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+    assertNull(SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1));
+  }
+
+  @Test
+  public void testAnonymousClasses() {
+    ObjectReleaseTracker.track(new Object() {});
+    String message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    MatcherAssert.assertThat(message, containsString("[Object]"));
+  }
+
+  @Test
+  public void testAsyncTracking() throws InterruptedException, 
ExecutionException {
+    ExecutorService es = ExecutorUtil.newMDCAwareSingleThreadExecutor(new 
SolrNamedThreadFactory("TestExecutor"));
+    Object trackable = new Object();
+
+    Future<?> result = es.submit(() -> {
+      ObjectReleaseTracker.track(trackable);
+    });
+
+    result.get(); // make sure that track has been called
+    String message = SolrTestCaseJ4.clearObjectTrackerAndCheckEmpty(1);
+    MatcherAssert.assertThat(message, containsString(getTestName()));

Review comment:
       Based on your commit, I realized I wasn't testing what I thought I was 
testing, so I tried a slightly different set of criteria.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org



---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@solr.apache.org
For additional commands, e-mail: issues-h...@solr.apache.org

Reply via email to