Search in sources :

Example 11 with ConsumerPatch

use of org.wikidata.query.rdf.tool.rdf.ConsumerPatch in project wikidata-query-rdf by wikimedia.

the class StreamingUpdaterConsumerUnitTest method test.

@Test
public void test() throws InterruptedException {
    List<String> entityIdsToDelete = new ArrayList<String>();
    Map<String, Collection<Statement>> reconciliations = new HashMap<>();
    ConsumerPatch patch = new ConsumerPatch(statements(), statements(), statements(), statements(), entityIdsToDelete, reconciliations);
    Instant avgEventTime = Instant.EPOCH.plus(4, ChronoUnit.MINUTES);
    RDFPatchResult rdfPatchResult = new RDFPatchResult(2, 1, 2, 1, 1, 1);
    LongAdder patchApplied = new LongAdder();
    CountDownLatch countdown = new CountDownLatch(5);
    Answer<StreamConsumer.Batch> batchSupplier = (i) -> new StreamConsumer.Batch(patch, avgEventTime, "1", Instant.now(), "2", Instant.now());
    when(consumer.poll(any())).thenAnswer(batchSupplier);
    when(rdfRepositoryUpdater.applyPatch(any(), any())).thenAnswer((Answer<RDFPatchResult>) i -> {
        countdown.countDown();
        patchApplied.increment();
        return rdfPatchResult;
    });
    MetricRegistry registry = new MetricRegistry();
    StreamingUpdaterConsumer updater = new StreamingUpdaterConsumer(consumer, rdfRepositoryUpdater, registry, 1F);
    Thread t = new Thread(updater);
    t.start();
    // Wait for five patches to be applied and stop the updater
    countdown.await();
    updater.close();
    t.join();
    // Make sure that we called the methods the right number of times
    // This updater does not much other than bridging a consumer and a repository
    verify(consumer, times(patchApplied.intValue())).poll(any());
    verify(consumer, times(patchApplied.intValue())).acknowledge();
    verify(consumer, times(1)).close();
    verify(rdfRepositoryUpdater, times(patchApplied.intValue())).applyPatch(same(patch), same(avgEventTime));
    verify(rdfRepositoryUpdater, times(1)).close();
    assertThat(registry.counter("mutations").getCount()).isEqualTo(patchApplied.intValue());
    assertThat(registry.counter("delete-mutations").getCount()).isEqualTo(patchApplied.intValue());
    assertThat(registry.counter("reconciliation-mutations").getCount()).isEqualTo(patchApplied.intValue());
    assertThat(registry.counter("divergences").getCount()).isEqualTo(patchApplied.intValue());
    assertThat(registry.counter("shared-element-mutations").getCount()).isEqualTo(patchApplied.intValue());
    assertThat(registry.counter("shared-element-redundant-mutations").getCount()).isEqualTo(patchApplied.intValue());
}
Also used : Statement(org.openrdf.model.Statement) LongAdder(java.util.concurrent.atomic.LongAdder) RDFPatchResult(org.wikidata.query.rdf.tool.rdf.RDFPatchResult) Matchers.same(org.mockito.Matchers.same) StreamingUpdaterConsumer.passInconsistencyThreshold(org.wikidata.query.rdf.updater.consumer.StreamingUpdaterConsumer.passInconsistencyThreshold) Mock(org.mockito.Mock) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) RunWith(org.junit.runner.RunWith) HashMap(java.util.HashMap) StatementHelper.statements(org.wikidata.query.rdf.test.StatementHelper.statements) ArrayList(java.util.ArrayList) Answer(org.mockito.stubbing.Answer) Map(java.util.Map) ConsumerPatch(org.wikidata.query.rdf.tool.rdf.ConsumerPatch) MetricRegistry(com.codahale.metrics.MetricRegistry) Collection(java.util.Collection) Mockito.times(org.mockito.Mockito.times) Test(org.junit.Test) Mockito.when(org.mockito.Mockito.when) Instant(java.time.Instant) Mockito.verify(org.mockito.Mockito.verify) Matchers.any(org.mockito.Matchers.any) CountDownLatch(java.util.concurrent.CountDownLatch) List(java.util.List) ChronoUnit(java.time.temporal.ChronoUnit) MockitoJUnitRunner(org.mockito.runners.MockitoJUnitRunner) RdfRepositoryUpdater(org.wikidata.query.rdf.tool.rdf.RdfRepositoryUpdater) HashMap(java.util.HashMap) Instant(java.time.Instant) MetricRegistry(com.codahale.metrics.MetricRegistry) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) LongAdder(java.util.concurrent.atomic.LongAdder) Collection(java.util.Collection) RDFPatchResult(org.wikidata.query.rdf.tool.rdf.RDFPatchResult) ConsumerPatch(org.wikidata.query.rdf.tool.rdf.ConsumerPatch) Test(org.junit.Test)

Aggregations

Test (org.junit.Test)11 ConsumerPatch (org.wikidata.query.rdf.tool.rdf.ConsumerPatch)11 MetricRegistry (com.codahale.metrics.MetricRegistry)4 MutationEventDataGenerator (org.wikidata.query.rdf.updater.MutationEventDataGenerator)4 Instant (java.time.Instant)3 ArrayList (java.util.ArrayList)3 ConsumerRecord (org.apache.kafka.clients.consumer.ConsumerRecord)3 Statement (org.openrdf.model.Statement)3 Duration (java.time.Duration)2 Collection (java.util.Collection)2 HashSet (java.util.HashSet)2 List (java.util.List)2 Map (java.util.Map)2 TopicPartition (org.apache.kafka.common.TopicPartition)2 Assertions.assertThat (org.assertj.core.api.Assertions.assertThat)2 RunWith (org.junit.runner.RunWith)2 Matchers.any (org.mockito.Matchers.any)2 Mock (org.mockito.Mock)2 Mockito.times (org.mockito.Mockito.times)2 Mockito.verify (org.mockito.Mockito.verify)2