Testing Multi-threaded Regex Filter Implementation in Alibaba Canal
This test suite validates the multi-threaded functionality of the AviaterRegexFilter in Alibaba Canal, focusing on concurrent regex pattern matching operations. The tests ensure reliable pattern matching behavior under parallel execution conditions.
Test Coverage Overview
Implementation Analysis
Technical Details
Best Practices Demonstrated
alibaba/canal
filter/src/test/java/com/alibaba/otter/canal/filter/MutliAviaterFilterTest.java
package com.alibaba.otter.canal.filter;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang.RandomStringUtils;
import org.junit.Assert;
import org.junit.Test;
import com.alibaba.otter.canal.filter.aviater.AviaterRegexFilter;
public class MutliAviaterFilterTest {
@Test
public void test_simple() {
int count = 5;
ExecutorService executor = Executors.newFixedThreadPool(count);
final CountDownLatch countDown = new CountDownLatch(count);
final AtomicInteger successed = new AtomicInteger(0);
for (int i = 0; i < count; i++) {
executor.submit(() -> {
try {
for (int i1 = 0; i1 < 100; i1++) {
doRegexTest();
// try {
// Thread.sleep(10);
// } catch (InterruptedException e) {
// }
}
successed.incrementAndGet();
} finally {
countDown.countDown();
}
});
}
try {
countDown.await();
} catch (InterruptedException e) {
}
Assert.assertEquals(count, successed.get());
executor.shutdownNow();
}
private void doRegexTest() {
AviaterRegexFilter filter3 = new AviaterRegexFilter("otter2.otter_stability1|otter1.otter_stability1|"
+ RandomStringUtils.randomAlphabetic(200));
boolean result = filter3.filter("otter1.otter_stability1");
Assert.assertEquals(true, result);
result = filter3.filter("otter2.otter_stability1");
Assert.assertEquals(true, result);
}
}