diff options
author | Jim Hahn <jrh3@att.com> | 2020-10-29 18:15:51 -0400 |
---|---|---|
committer | Jim Hahn <jrh3@att.com> | 2020-11-02 18:17:49 -0500 |
commit | dc6c4a21d46909dad59f4bd16cb6d4fc29fcce77 (patch) | |
tree | ef6bd7f152e189913c802d07aea43c83f3dc97e2 /feature-pooling-dmaap/src/test/java | |
parent | d418aff3a9fd547941e40978c648d6209d332e37 (diff) |
Make feature-pooling-dmaap work without filtering
As DMaaP server-side filtering has been deprecated, modified
feature-pooling-dmaap to work without it. The new design assumes that
each pdp gets its own unique consumer group, thus all pdps receive all
events. Each pdp then uses the bucket assignments to determine whether
or not to process the event. Note: this means that events no longer
have to be forwarded to the correct host, thus the "Forward" class has
been deleted.
Other than that, the code already did post-filtering of events so most
of it still works even without server-side filtering. As a result, most
of the effort was in simply removing code that no longer applies.
Per review comments:
Modified code to use the event hash code instead of the request ID has
code when routing events. This eliminated the need for the extractor
classes and related properties.
Replaced amsterdam and beijing properties with usecases properties.
Issue-ID: POLICY-2881
Change-Id: I87e4f98c14f419593879c278d7da053c80575553
Signed-off-by: Jim Hahn <jrh3@att.com>
Diffstat (limited to 'feature-pooling-dmaap/src/test/java')
22 files changed, 89 insertions, 1742 deletions
diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/DmaapManagerTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/DmaapManagerTest.java index 7f73a702..ec554fc9 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/DmaapManagerTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/DmaapManagerTest.java @@ -38,7 +38,6 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import org.junit.Before; import org.junit.Test; -import org.onap.policy.common.endpoints.event.comm.FilterableTopicSource; import org.onap.policy.common.endpoints.event.comm.TopicListener; import org.onap.policy.common.endpoints.event.comm.TopicSink; import org.onap.policy.common.endpoints.event.comm.TopicSource; @@ -48,10 +47,9 @@ public class DmaapManagerTest { private static final String EXPECTED = "expected"; private static final String MY_TOPIC = "my.topic"; private static final String MSG = "a message"; - private static final String FILTER = "a filter"; private TopicListener listener; - private FilterableTopicSource source; + private TopicSource source; private boolean gotSources; private TopicSink sink; private boolean gotSinks; @@ -65,7 +63,7 @@ public class DmaapManagerTest { @Before public void setUp() throws Exception { listener = mock(TopicListener.class); - source = mock(FilterableTopicSource.class); + source = mock(TopicSource.class); gotSources = false; sink = mock(TopicSink.class); gotSinks = false; @@ -104,35 +102,12 @@ public class DmaapManagerTest { }; } - @Test(expected = PoolingFeatureException.class) - public void testDmaapManager_CannotFilter() throws PoolingFeatureException { - // force an error when setFilter() is called - doThrow(new UnsupportedOperationException(EXPECTED)).when(source).setFilter(any()); - - new DmaapManagerImpl(MY_TOPIC); - } - @Test public void testGetTopic() { assertEquals(MY_TOPIC, mgr.getTopic()); } @Test(expected = PoolingFeatureException.class) - public void testFindTopicSource_NotFilterableTopicSource() throws PoolingFeatureException { - - // matching topic, but doesn't have the correct interface - TopicSource source2 = mock(TopicSource.class); - when(source2.getTopic()).thenReturn(MY_TOPIC); - - new DmaapManagerImpl(MY_TOPIC) { - @Override - protected List<TopicSource> getTopicSources() { - return Arrays.asList(source2); - } - }; - } - - @Test(expected = PoolingFeatureException.class) public void testFindTopicSource_NotFound() throws PoolingFeatureException { // one item in list, and its topic doesn't match new DmaapManagerImpl(MY_TOPIC) { @@ -275,19 +250,6 @@ public class DmaapManagerTest { } @Test - public void testSetFilter() throws PoolingFeatureException { - assertThatCode(() -> mgr.setFilter(FILTER)).doesNotThrowAnyException(); - } - - @Test(expected = PoolingFeatureException.class) - public void testSetFilter_Exception() throws PoolingFeatureException { - // force an error when setFilter() is called - doThrow(new UnsupportedOperationException(EXPECTED)).when(source).setFilter(any()); - - mgr.setFilter(FILTER); - } - - @Test public void testPublish() throws PoolingFeatureException { // cannot publish before starting assertThatThrownBy(() -> mgr.publish(MSG)).as("publish,pre").isInstanceOf(PoolingFeatureException.class); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/FeatureTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/FeatureTest.java index 96b358da..efab636b 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/FeatureTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/FeatureTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018-2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -47,20 +47,19 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; +import lombok.Getter; import org.apache.commons.lang3.tuple.Pair; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; -import org.onap.policy.common.endpoints.event.comm.FilterableTopicSource; import org.onap.policy.common.endpoints.event.comm.Topic; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.endpoints.event.comm.TopicListener; import org.onap.policy.common.endpoints.event.comm.TopicSink; import org.onap.policy.common.endpoints.event.comm.TopicSource; import org.onap.policy.drools.controller.DroolsController; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.system.PolicyController; import org.onap.policy.drools.system.PolicyEngine; import org.slf4j.Logger; @@ -216,10 +215,6 @@ public class FeatureTest { */ private final ConcurrentMap<String, BlockingQueue<String>> channel2queue = new ConcurrentHashMap<>(7); /** - * Queue for the external "DMaaP" topic. - */ - private final BlockingQueue<String> externalTopic = new LinkedBlockingQueue<String>(); - /** * Counts the number of decode errors. */ private final AtomicInteger numDecodeErrors = new AtomicInteger(0); @@ -306,13 +301,16 @@ public class FeatureTest { } /** - * Offers an event to the external topic. + * Offers an event to the external topic. As each host needs a copy, it is posted + * to each Host's queue. * * @param event event */ public void offerExternal(String event) { - externalTopic.offer(event); + for (Host host : hosts) { + host.getExternalTopic().offer(event); + } } /** @@ -337,20 +335,6 @@ public class FeatureTest { } /** - * Offers amessage to an internal channel. - * - * @param channel channel - * @param message message - */ - - public void offerInternal(String channel, String message) { - BlockingQueue<String> queue = channel2queue.get(channel); - if (queue != null) { - queue.offer(message); - } - } - - /** * Associates a controller with its drools controller. * * @param controller controller @@ -374,16 +358,6 @@ public class FeatureTest { } /** - * Constructor. - * - * @return queue for the external topic - */ - - public BlockingQueue<String> getExternalTopic() { - return externalTopic; - } - - /** * Get decode errors. * * @return the number of decode errors so far @@ -465,6 +439,12 @@ public class FeatureTest { private final BlockingQueue<String> msgQueue = new LinkedBlockingQueue<>(); /** + * Queue for the external "DMaaP" topic. + */ + @Getter + private final BlockingQueue<String> externalTopic = new LinkedBlockingQueue<String>(); + + /** * Source that reads from the external topic and posts to the listener. */ @@ -493,7 +473,7 @@ public class FeatureTest { doAnswer(new MyExternalTopicListener(context, this)).when(controller).onTopicEvent(any(), any(), any()); context.addController(controller, drools); // arrange to read from the external topic - externalSource = new TopicSourceImpl(context, false); + externalSource = new TopicSourceImpl(EXTERNAL_TOPIC, externalTopic); feature = new PoolingFeatureImpl(context); } @@ -666,10 +646,6 @@ public class FeatureTest { private static class TopicSinkImpl extends TopicImpl implements TopicSink { private final Context context; - /** - * Used to decode the messages so that the channel can be extracted. - */ - private final Serializer serializer = new Serializer(); /** * Constructor. @@ -687,15 +663,7 @@ public class FeatureTest { return false; } try { - Message msg = serializer.decodeMsg(message); - String channel = msg.getChannel(); - if (Message.ADMIN.equals(channel)) { - // add to every queue - context.offerInternal(message); - } else { - // add to a specific queue - context.offerInternal(channel, message); - } + context.offerInternal(message); return true; } catch (JsonParseException e) { logger.warn("could not decode message: {}", message); @@ -709,7 +677,7 @@ public class FeatureTest { * Source implementation that reads from a queue associated with a topic. */ - private static class TopicSourceImpl extends TopicImpl implements FilterableTopicSource { + private static class TopicSourceImpl extends TopicImpl implements TopicSource { private final String topic; /** @@ -726,24 +694,13 @@ public class FeatureTest { /** * Constructor. * - * @param context context - * @param internal {@code true} if to read from the internal topic, {@code false} - * to read from the external topic + * @param type topic type + * @param queue topic from which to read */ - public TopicSourceImpl(Context context, boolean internal) { - if (internal) { - this.topic = INTERNAL_TOPIC; - this.queue = context.getCurrentHost().getInternalQueue(); - } else { - this.topic = EXTERNAL_TOPIC; - this.queue = context.getExternalTopic(); - } - } - - @Override - public void setFilter(String filter) { - logger.info("topic filter set to: {}", filter); + public TopicSourceImpl(String type, BlockingQueue<String> queue) { + this.topic = type; + this.queue = queue; } @Override @@ -1056,7 +1013,8 @@ public class FeatureTest { @Override protected List<TopicSource> getTopicSources() { - return Arrays.asList(new TopicSourceImpl(currentContext.get(), true)); + return Arrays.asList(new TopicSourceImpl(INTERNAL_TOPIC, + currentContext.get().getCurrentHost().getInternalQueue())); } @Override diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingFeatureTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingFeatureTest.java index 63bfc11e..02a4db5c 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingFeatureTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingFeatureTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018, 2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -298,20 +298,20 @@ public class PoolingFeatureTest { @Test public void testBeforeOffer() { assertFalse(pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1)); - verify(mgr1).beforeOffer(CommInfrastructure.UEB, TOPIC1, EVENT1); + verify(mgr1).beforeOffer(TOPIC1, EVENT1); // ensure that the args were captured pool.beforeInsert(drools1, OBJECT1); - verify(mgr1).beforeInsert(CommInfrastructure.UEB, TOPIC1, EVENT1, OBJECT1); + verify(mgr1).beforeInsert(TOPIC1, OBJECT1); // ensure it's still in the map by re-invoking assertFalse(pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC2, EVENT2)); - verify(mgr1).beforeOffer(CommInfrastructure.UEB, TOPIC2, EVENT2); + verify(mgr1).beforeOffer(TOPIC2, EVENT2); // ensure that the new args were captured pool.beforeInsert(drools1, OBJECT2); - verify(mgr1).beforeInsert(CommInfrastructure.UEB, TOPIC2, EVENT2, OBJECT2); + verify(mgr1).beforeInsert(TOPIC2, OBJECT2); assertFalse(pool.beforeOffer(controllerDisabled, CommInfrastructure.UEB, TOPIC1, EVENT1)); @@ -326,14 +326,14 @@ public class PoolingFeatureTest { public void testBeforeOffer_MgrTrue() { // manager will return true - when(mgr1.beforeOffer(any(), any(), any())).thenReturn(true); + when(mgr1.beforeOffer(any(), any())).thenReturn(true); assertTrue(pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1)); - verify(mgr1).beforeOffer(CommInfrastructure.UEB, TOPIC1, EVENT1); + verify(mgr1).beforeOffer(TOPIC1, EVENT1); // ensure it's still in the map by re-invoking assertTrue(pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC2, EVENT2)); - verify(mgr1).beforeOffer(CommInfrastructure.UEB, TOPIC2, EVENT2); + verify(mgr1).beforeOffer(TOPIC2, EVENT2); assertFalse(pool.beforeOffer(controllerDisabled, CommInfrastructure.UEB, TOPIC1, EVENT1)); } @@ -342,12 +342,12 @@ public class PoolingFeatureTest { public void testBeforeInsert() { pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1); assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1).beforeInsert(CommInfrastructure.UEB, TOPIC1, EVENT1, OBJECT1); + verify(mgr1).beforeInsert(TOPIC1, OBJECT1); // ensure it's still in the map by re-invoking pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC2, EVENT2); assertFalse(pool.beforeInsert(drools1, OBJECT2)); - verify(mgr1).beforeInsert(CommInfrastructure.UEB, TOPIC2, EVENT2, OBJECT2); + verify(mgr1).beforeInsert(TOPIC2, OBJECT2); pool.beforeOffer(controllerDisabled, CommInfrastructure.UEB, TOPIC2, EVENT2); assertFalse(pool.beforeInsert(droolsDisabled, OBJECT1)); @@ -358,10 +358,10 @@ public class PoolingFeatureTest { // call beforeInsert without beforeOffer assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); assertFalse(pool.beforeInsert(droolsDisabled, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); } @Test @@ -376,7 +376,7 @@ public class PoolingFeatureTest { pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1); assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); } @Test @@ -391,7 +391,7 @@ public class PoolingFeatureTest { pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1); assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); } @Test @@ -407,7 +407,7 @@ public class PoolingFeatureTest { pool.beforeOffer(controller1, CommInfrastructure.UEB, TOPIC1, EVENT1); assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); } @Test @@ -426,7 +426,7 @@ public class PoolingFeatureTest { assertFalse(pool.afterOffer(controller1, CommInfrastructure.UEB, TOPIC2, EVENT2, true)); assertFalse(pool.beforeInsert(drools1, OBJECT1)); - verify(mgr1, never()).beforeInsert(any(), any(), any(), any()); + verify(mgr1, never()).beforeInsert(any(), any()); assertFalse(pool.beforeInsert(droolsDisabled, OBJECT1)); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingManagerImplTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingManagerImplTest.java index 2a0066b7..21bd62d1 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingManagerImplTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/PoolingManagerImplTest.java @@ -25,10 +25,8 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.contains; -import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; @@ -49,9 +47,7 @@ import org.mockito.ArgumentCaptor; import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; import org.onap.policy.common.endpoints.event.comm.TopicListener; import org.onap.policy.drools.controller.DroolsController; -import org.onap.policy.drools.pooling.extractor.ClassExtractors; import org.onap.policy.drools.pooling.message.BucketAssignments; -import org.onap.policy.drools.pooling.message.Forward; import org.onap.policy.drools.pooling.message.Heartbeat; import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; @@ -83,7 +79,6 @@ public class PoolingManagerImplTest { private static final String THE_EVENT = "the event"; private static final Object DECODED_EVENT = new Object(); - private static final String REQUEST_ID = "my.request.id"; /** * Number of dmaap.publish() invocations that should be issued when the manager is @@ -98,7 +93,6 @@ public class PoolingManagerImplTest { private PoolingProperties poolProps; private ListeningController controller; - private ClassExtractors extractors; private DmaapManager dmaap; private boolean gotDmaap; private ScheduledThreadPoolExecutor sched; @@ -132,7 +126,6 @@ public class PoolingManagerImplTest { ser = new Serializer(); active = new CountDownLatch(1); - extractors = mock(ClassExtractors.class); dmaap = mock(DmaapManager.class); gotDmaap = false; controller = mock(ListeningController.class); @@ -140,8 +133,6 @@ public class PoolingManagerImplTest { schedCount = 0; drools = mock(DroolsController.class); - when(extractors.extract(DECODED_EVENT)).thenReturn(REQUEST_ID); - when(controller.getName()).thenReturn(MY_CONTROLLER); when(controller.getDrools()).thenReturn(drools); when(controller.isAlive()).thenReturn(true); @@ -176,18 +167,6 @@ public class PoolingManagerImplTest { } @Test - public void testPoolingManagerImpl_ClassEx() { - /* - * this controller does not implement TopicListener, which should cause a - * ClassCastException - */ - PolicyController ctlr = mock(PolicyController.class); - - assertThatThrownBy(() -> new PoolingManagerTest(MY_HOST, ctlr, poolProps, active)) - .isInstanceOf(PoolingFeatureRtException.class).hasCauseInstanceOf(ClassCastException.class); - } - - @Test public void testPoolingManagerImpl_PoolEx() throws PoolingFeatureException { // throw an exception when we try to create the dmaap manager PoolingFeatureException ex = new PoolingFeatureException(); @@ -284,23 +263,20 @@ public class PoolingManagerImplTest { startMgr(); mgr.startDistributing(makeAssignments(false)); - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - verify(dmaap, times(START_PUB + 1)).publish(any()); + verify(dmaap, times(START_PUB)).publish(any()); mgr.beforeStop(); verify(dmaap).stopConsumer(mgr); verify(sched).shutdownNow(); - verify(dmaap, times(START_PUB + 2)).publish(any()); + verify(dmaap, times(START_PUB + 1)).publish(any()); verify(dmaap).publish(contains("offline")); assertTrue(mgr.getCurrent() instanceof IdleState); // verify that next message is handled locally - mgr.handle(msg); - verify(dmaap, times(START_PUB + 2)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); + verify(dmaap, times(START_PUB + 1)).publish(any()); } @Test @@ -407,19 +383,11 @@ public class PoolingManagerImplTest { // start should invoke changeState() startMgr(); - int ntimes = 0; - - // should have set the filter for the StartState - verify(dmaap, times(++ntimes)).setFilter(any()); - /* * now go offline while it's locked */ lockMgr(); - // should have set the new filter - verify(dmaap, times(++ntimes)).setFilter(any()); - // should have cancelled the timers assertEquals(2, futures.size()); verify(futures.poll()).cancel(false); @@ -430,9 +398,6 @@ public class PoolingManagerImplTest { */ unlockMgr(); - // should have set the new filter - verify(dmaap, times(++ntimes)).setFilter(any()); - // new timers should now be active assertEquals(2, futures.size()); verify(futures.poll(), never()).cancel(false); @@ -440,26 +405,6 @@ public class PoolingManagerImplTest { } @Test - public void testSetFilter() throws Exception { - // start should cause a filter to be set - startMgr(); - - verify(dmaap).setFilter(any()); - } - - @Test - public void testSetFilter_DmaapEx() throws Exception { - - // generate an exception - doThrow(new PoolingFeatureException()).when(dmaap).setFilter(any()); - - // start should invoke setFilter() - assertThatCode(() -> startMgr()).doesNotThrowAnyException(); - - // no exception, means success - } - - @Test public void testSchedule() throws Exception { // must start the scheduler startMgr(); @@ -583,64 +528,35 @@ public class PoolingManagerImplTest { } @Test - public void testBeforeOffer_Unlocked_NoIntercept() throws Exception { + public void testBeforeOffer_Unlocked() throws Exception { startMgr(); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); - } - - @Test - public void testBeforeOffer_Locked_NoIntercept() throws Exception { - startMgr(); - - lockMgr(); + // route the message to another host + mgr.startDistributing(makeAssignments(false)); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); + assertFalse(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test - public void testBeforeOffer_Locked_Intercept() throws Exception { + public void testBeforeOffer_Locked() throws Exception { startMgr(); lockMgr(); - // route the message to this host - mgr.startDistributing(makeAssignments(true)); - - final CountDownLatch latch = catchRecursion(false); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); + // route the message to another host + mgr.startDistributing(makeAssignments(false)); - // ensure we made it past both beforeXxx() methods - assertEquals(0, latch.getCount()); + assertTrue(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test - public void testBeforeInsert_Intercept() throws Exception { + public void testBeforeInsert() throws Exception { startMgr(); lockMgr(); // route the message to this host mgr.startDistributing(makeAssignments(true)); - final CountDownLatch latch = catchRecursion(true); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - - // ensure we made it past both beforeXxx() methods - assertEquals(0, latch.getCount()); - } - - @Test - public void testBeforeInsert_NoIntercept() throws Exception { - validateUnhandled(CommInfrastructure.UEB); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); } @Test @@ -657,17 +573,17 @@ public class PoolingManagerImplTest { public void testHandleExternalCommInfrastructureStringStringString_InvalidMsg() throws Exception { startMgr(); - assertTrue(mgr.beforeInsert(null, TOPIC2, THE_EVENT, DECODED_EVENT)); + assertFalse(mgr.beforeInsert(TOPIC2, "invalid message")); } @Test public void testHandleExternalCommInfrastructureStringStringString() throws Exception { - validateUnhandled(CommInfrastructure.UEB); + validateUnhandled(); } @Test public void testHandleExternalForward_NoAssignments() throws Exception { - validateUnhandled(CommInfrastructure.UEB); + validateUnhandled(); } @Test @@ -678,7 +594,7 @@ public class PoolingManagerImplTest { @Test public void testHandleEvent_NullTarget() throws Exception { // buckets have null targets - validateHandled(new BucketAssignments(new String[] {null, null}), START_PUB); + validateDiscarded(new BucketAssignments(new String[] {null, null})); } @Test @@ -687,46 +603,9 @@ public class PoolingManagerImplTest { } @Test - public void testHandleEvent_DiffHost_TooManyHops() throws Exception { - startMgr(); - - // route the message to this host - mgr.startDistributing(makeAssignments(false)); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - msg.setNumHops(PoolingManagerImpl.MAX_HOPS + 1); - mgr.handle(msg); - - // shouldn't publish - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller, never()).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - } - - @Test - public void testHandleEvent_DiffHost_Forward() throws Exception { - validateHandled(makeAssignments(false), START_PUB + 1); - } - - @Test - public void testExtractRequestId_NullEvent() throws Exception { - startMgr(); - - assertFalse(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, null)); - } - - @Test - public void testExtractRequestId_NullReqId() throws Exception { - validateHandleReqId(null); - } - - @Test - public void testExtractRequestId() throws Exception { - startMgr(); - + public void testHandleEvent_DiffHost() throws Exception { // route the message to the *OTHER* host - mgr.startDistributing(makeAssignments(false)); - - assertTrue(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); + validateDiscarded(makeAssignments(false)); } @Test @@ -746,7 +625,7 @@ public class PoolingManagerImplTest { // create assignments, though they are irrelevant mgr.startDistributing(makeAssignments(false)); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); + assertFalse(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test @@ -767,7 +646,7 @@ public class PoolingManagerImplTest { // create assignments, though they are irrelevant mgr.startDistributing(makeAssignments(false)); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); + assertFalse(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test @@ -787,7 +666,7 @@ public class PoolingManagerImplTest { // create assignments, though they are irrelevant mgr.startDistributing(makeAssignments(false)); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); + assertFalse(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test @@ -807,7 +686,7 @@ public class PoolingManagerImplTest { // create assignments, though they are irrelevant mgr.startDistributing(makeAssignments(false)); - assertFalse(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); + assertFalse(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test @@ -819,101 +698,7 @@ public class PoolingManagerImplTest { // route to another host mgr.startDistributing(makeAssignments(false)); - assertTrue(mgr.beforeOffer(CommInfrastructure.UEB, TOPIC2, THE_EVENT)); - } - - @Test - public void testMakeForward() throws Exception { - startMgr(); - - // route the message to another host - mgr.startDistributing(makeAssignments(false)); - - assertTrue(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); - - verify(dmaap, times(START_PUB + 1)).publish(any()); - } - - @Test - public void testMakeForward_InvalidMsg() throws Exception { - startMgr(); - - // route the message to another host - mgr.startDistributing(makeAssignments(false)); - - assertTrue(mgr.beforeInsert(null, TOPIC2, THE_EVENT, DECODED_EVENT)); - - // should not have tried to publish a message - verify(dmaap, times(START_PUB)).publish(any()); - } - - @Test - public void testHandle_SameHost() throws Exception { - startMgr(); - - // route the message to this host - mgr.startDistributing(makeAssignments(true)); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - } - - @Test - public void testHandle_DiffHost() throws Exception { - startMgr(); - - // route the message to this host - mgr.startDistributing(makeAssignments(false)); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB + 1)).publish(any()); - verify(controller, never()).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - } - - @Test - public void testInject() throws Exception { - startMgr(); - - // route the message to this host - mgr.startDistributing(makeAssignments(true)); - - final CountDownLatch latch = catchRecursion(true); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - - // ensure we made it past both beforeXxx() methods - assertEquals(0, latch.getCount()); - } - - @Test - public void testInject_Ex() throws Exception { - startMgr(); - - // route the message to this host - mgr.startDistributing(makeAssignments(true)); - - // generate RuntimeException when onTopicEvent() is invoked - doThrow(new IllegalArgumentException("expected")).when(controller).onTopicEvent(any(), any(), any()); - - final CountDownLatch latch = catchRecursion(true); - - Forward msg = new Forward(mgr.getHost(), CommInfrastructure.UEB, TOPIC2, THE_EVENT, REQUEST_ID); - mgr.handle(msg); - - verify(dmaap, times(START_PUB)).publish(any()); - verify(controller).onTopicEvent(CommInfrastructure.UEB, TOPIC2, THE_EVENT); - - // ensure we made it past both beforeXxx() methods - assertEquals(0, latch.getCount()); + assertTrue(mgr.beforeOffer(TOPIC2, THE_EVENT)); } @Test @@ -971,20 +756,18 @@ public class PoolingManagerImplTest { // null assignments should cause message to be processed locally mgr.startDistributing(null); - assertFalse(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); verify(dmaap, times(START_PUB)).publish(any()); - // route the message to this host + // message for this host mgr.startDistributing(makeAssignments(true)); - assertFalse(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); - verify(dmaap, times(START_PUB)).publish(any()); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); - // route the message to the other host + // message for another host mgr.startDistributing(makeAssignments(false)); - assertTrue(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); - verify(dmaap, times(START_PUB + 1)).publish(any()); + assertTrue(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); } @Test @@ -1088,9 +871,7 @@ public class PoolingManagerImplTest { private void validateHandleReqId(String requestId) throws PoolingFeatureException { startMgr(); - when(extractors.extract(any())).thenReturn(requestId); - - assertFalse(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); } private void validateNoForward() throws PoolingFeatureException { @@ -1099,67 +880,23 @@ public class PoolingManagerImplTest { // route the message to this host mgr.startDistributing(makeAssignments(true)); - assertFalse(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); verify(dmaap, times(START_PUB)).publish(any()); } - private void validateHandled(BucketAssignments assignments, int publishCount) throws PoolingFeatureException { + private void validateUnhandled() throws PoolingFeatureException { startMgr(); - - // route the message to the *OTHER* host - mgr.startDistributing(assignments); - - assertTrue(mgr.beforeInsert(CommInfrastructure.UEB, TOPIC2, THE_EVENT, DECODED_EVENT)); - - verify(dmaap, times(publishCount)).publish(any()); + assertFalse(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); } - private void validateUnhandled(CommInfrastructure infra) throws PoolingFeatureException { + private void validateDiscarded(BucketAssignments bucketAssignments) throws PoolingFeatureException { startMgr(); - assertFalse(mgr.beforeInsert(infra, TOPIC2, THE_EVENT, DECODED_EVENT)); - } - - /** - * Configure the mock controller to act like a real controller, invoking beforeOffer - * and then beforeInsert, so we can make sure they pass through. We'll keep count to - * ensure we don't get into infinite recursion. - * - * @param invokeBeforeInsert {@code true} if beforeInsert() should be invoked, - * {@code false} if it should be skipped - * - * @return a latch that will be counted down if both beforeXxx() methods return false - */ - private CountDownLatch catchRecursion(boolean invokeBeforeInsert) { - CountDownLatch recursion = new CountDownLatch(3); - CountDownLatch latch = new CountDownLatch(1); - - doAnswer(args -> { - - recursion.countDown(); - if (recursion.getCount() == 0) { - fail("recursive calls to onTopicEvent"); - } - - int iarg = 0; - CommInfrastructure proto = args.getArgument(iarg++); - String topic = args.getArgument(iarg++); - String event = args.getArgument(iarg++); - - if (mgr.beforeOffer(proto, topic, event)) { - return null; - } - if (invokeBeforeInsert && mgr.beforeInsert(proto, topic, event, DECODED_EVENT)) { - return null; - } - - latch.countDown(); - - return null; - }).when(controller).onTopicEvent(any(), any(), any()); + // buckets have null targets + mgr.startDistributing(bucketAssignments); - return latch; + assertTrue(mgr.beforeInsert(TOPIC2, DECODED_EVENT)); } /** @@ -1170,7 +907,7 @@ public class PoolingManagerImplTest { * @return a new bucket assignment */ private BucketAssignments makeAssignments(boolean sameHost) { - int slot = REQUEST_ID.hashCode() % 2; + int slot = DECODED_EVENT.hashCode() % 2; // slot numbers are 0 and 1 - reverse them if it's for a different host if (!sameHost) { @@ -1199,6 +936,7 @@ public class PoolingManagerImplTest { */ private void lockMgr() { mgr.beforeLock(); + when(controller.isLocked()).thenReturn(true); } /** @@ -1206,6 +944,7 @@ public class PoolingManagerImplTest { */ private void unlockMgr() { mgr.afterUnlock(); + when(controller.isLocked()).thenReturn(false); } /** @@ -1227,11 +966,6 @@ public class PoolingManagerImplTest { } @Override - protected ClassExtractors makeClassExtractors(Properties props) { - return extractors; - } - - @Override protected DmaapManager makeDmaapManager(String topic) throws PoolingFeatureException { gotDmaap = true; return dmaap; diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/SerializerTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/SerializerTest.java index 662e0a7c..f4cd940c 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/SerializerTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/SerializerTest.java @@ -23,15 +23,9 @@ package org.onap.policy.drools.pooling; import static org.assertj.core.api.Assertions.assertThatCode; import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeAnd; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeEquals; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeOr; import com.google.gson.JsonParseException; -import java.util.Map; -import java.util.TreeMap; import org.junit.Test; import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Query; @@ -44,33 +38,6 @@ public class SerializerTest { } @Test - @SuppressWarnings("unchecked") - public void testEncodeFilter() throws Exception { - final Serializer ser = new Serializer(); - - /* - * Ensure raw maps serialize as expected. Use a TreeMap so the field - * order is predictable. - */ - Map<String, Object> top = new TreeMap<>(); - Map<String, Object> inner = new TreeMap<>(); - top.put("abc", 20); - top.put("def", inner); - top.put("ghi", true); - inner.put("xyz", 30); - assertEquals("{'abc':20,'def':{'xyz':30},'ghi':true}".replace('\'', '"'), ser.encodeFilter(top)); - - /* - * Ensure we can encode a complicated filter without throwing an - * exception - */ - Map<String, Object> complexFilter = makeAnd(makeEquals("fieldC", "valueC"), - makeOr(makeEquals("fieldA", "valueA"), makeEquals("fieldB", "valueB"))); - String val = ser.encodeFilter(complexFilter); - assertFalse(val.isEmpty()); - } - - @Test public void testEncodeMsg_testDecodeMsg() throws Exception { Serializer ser = new Serializer(); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTest.java deleted file mode 100644 index 0bf087a3..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTest.java +++ /dev/null @@ -1,445 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018-2019 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; - -import java.util.Map; -import java.util.Properties; -import java.util.TreeMap; -import java.util.function.Function; -import org.junit.Before; -import org.junit.Test; - -public class ClassExtractorsTest { - - private static final int NTIMES = 5; - - private static final String MY_TYPE = "theType"; - private static final String PROP_PREFIX = "extractor." + MY_TYPE + "."; - - private static final String VALUE = "a value"; - private static final Integer INT_VALUE = 10; - private static final Integer INT_VALUE2 = 20; - - private Properties props; - private ClassExtractors map; - - /** - * Setup. - * - */ - @Before - public void setUp() { - props = new Properties(); - - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${intValue}"); - props.setProperty(PROP_PREFIX + WithString.class.getName(), "${strValue}"); - - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - } - - @Test - public void testExtract() { - Simple obj = new Simple(); - assertEquals(INT_VALUE, map.extract(obj)); - - // string value - assertEquals(VALUE, tryIt(Simple.class, "${strValue}", xxx -> new Simple())); - - // null object - assertNull(map.extract(null)); - - // values from two different kinds of objects - props = new Properties(); - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${intValue}"); - props.setProperty(PROP_PREFIX + WithString.class.getName(), "${strValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - assertEquals(INT_VALUE, map.extract(new Simple())); - assertEquals(VALUE, map.extract(new Sub())); - - // values from a superclass method, but property defined for subclass - props = new Properties(); - props.setProperty(PROP_PREFIX + Sub.class.getName(), "${strValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - assertEquals(VALUE, map.extract(new Sub())); - - // values from a superclass field, but property defined for subclass - props = new Properties(); - props.setProperty(PROP_PREFIX + Sub.class.getName(), "${intValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - assertEquals(INT_VALUE, map.extract(new Sub())); - - - // prefix includes trailing "." - props = new Properties(); - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${intValue}"); - map = new ClassExtractors(props, PROP_PREFIX.substring(0, PROP_PREFIX.length() - 1), MY_TYPE); - assertEquals(INT_VALUE, map.extract(new Simple())); - - - // values from an class in a different file - props = new Properties(); - props.setProperty(PROP_PREFIX + ClassExtractorsTestSupport.class.getName(), "${nested.theValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - assertEquals(ClassExtractorsTestSupport2.NESTED_VALUE, map.extract(new ClassExtractorsTestSupport())); - } - - @Test - public void testGetExtractor() { - Simple obj = new Simple(); - - // repeat - shouldn't re-create the extractor - for (int x = 0; x < NTIMES; ++x) { - assertEquals("x=" + x, INT_VALUE, map.extract(obj)); - assertEquals("x=" + x, 1, map.size()); - } - } - - @Test - public void testBuildExtractorClass_TopLevel() { - // extractor defined for top-level class - props = new Properties(); - props.setProperty(PROP_PREFIX + Sub.class.getName(), "${strValue}"); - - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals(VALUE, map.extract(new Sub())); - - // one extractor for top-level class - assertEquals(1, map.size()); - } - - @Test - public void testBuildExtractorClass_SuperClass() { - // extractor defined for superclass (interface) - assertEquals(VALUE, map.extract(new Sub())); - - // one extractor for top-level class and one for interface - assertEquals(2, map.size()); - } - - @Test - public void testBuildExtractorClass_NotDefined() { - // no extractor defined for "this" class - assertNull(map.extract(this)); - - // one NULL extractor for top-level class - assertEquals(1, map.size()); - } - - @Test - public void testBuildExtractorClassString() { - // no leading "${" - assertNull(tryIt(Simple.class, "intValue}", xxx -> new Simple())); - - // no trailing "}" - assertNull(tryIt(Simple.class, "${intValue", xxx -> new Simple())); - - // leading "." - assertNull(tryIt(Sub.class, "${.simple.strValue}", xxx -> new Sub())); - - // trailing "." - assertNull(tryIt(Sub.class, "${simple.strValue.}", xxx -> new Sub())); - - // one component - assertEquals(VALUE, tryIt(Sub.class, "${strValue}", xxx -> new Sub())); - - // two components - assertEquals(VALUE, tryIt(Sub.class, "${simple.strValue}", xxx -> new Sub())); - - // invalid component - assertNull(tryIt(Sub.class, "${unknown}", xxx -> new Sub())); - } - - @Test - public void testGetClassExtractor_InSuper() { - // field in the superclass - assertEquals(INT_VALUE, tryIt(Super.class, "${intValue}", xxx -> new Sub())); - } - - @Test - public void testGetClassExtractor_InInterface() { - // defined in the interface - assertEquals(VALUE, map.extract(new Sub())); - } - - @Test - public void testNullExtractorExtract() { - // empty properties - should only create NullExtractor - map = new ClassExtractors(new Properties(), PROP_PREFIX, MY_TYPE); - - Simple obj = new Simple(); - - // repeat - shouldn't re-create the extractor - for (int x = 0; x < NTIMES; ++x) { - assertNull("x=" + x, map.extract(obj)); - assertEquals("x=" + x, 1, map.size()); - } - } - - @Test - public void testComponetizedExtractor() { - // one component - assertEquals(VALUE, tryIt(Sub.class, "${strValue}", xxx -> new Sub())); - - // three components - assertEquals(VALUE, tryIt(Sub.class, "${cont.data.strValue}", xxx -> new Sub())); - } - - @Test - public void testComponetizedExtractorBuildExtractor_Method() { - assertEquals(INT_VALUE, tryIt(Simple.class, "${intValue}", xxx -> new Simple())); - } - - @Test - public void testComponetizedExtractorBuildExtractor_Field() { - assertEquals(VALUE, tryIt(Simple.class, "${strValue}", xxx -> new Simple())); - } - - @Test - public void testComponetizedExtractorBuildExtractor_Map() { - Map<String, Object> inner = new TreeMap<>(); - inner.put("inner1", "abc1"); - inner.put("inner2", "abc2"); - - Map<String, Object> outer = new TreeMap<>(); - outer.put("outer1", "def1"); - outer.put("outer2", inner); - - Simple obj = new Simple(); - - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${mapValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals(null, map.extract(obj)); - - obj.mapValue = outer; - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${mapValue.outer2.inner2}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals("abc2", map.extract(obj)); - } - - @Test - public void testComponetizedExtractorBuildExtractor_Unknown() { - assertNull(tryIt(Simple.class, "${unknown2}", xxx -> new Simple())); - } - - @Test - public void testComponetizedExtractorExtract_MiddleNull() { - // data component is null - assertEquals(null, tryIt(Sub.class, "${cont.data.strValue}", xxx -> { - Sub obj = new Sub(); - obj.cont.simpleValue = null; - return obj; - })); - } - - @Test - public void testComponetizedExtractorGetMethodExtractor_VoidMethod() { - // tell it to use getVoidValue() - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${voidValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - Simple obj = new Simple(); - assertNull(map.extract(obj)); - - assertFalse(obj.voidInvoked); - } - - @Test - public void testComponetizedExtractorGetMethodExtractor() { - assertEquals(INT_VALUE, map.extract(new Simple())); - } - - @Test - public void testComponetizedExtractorGetFieldExtractor() { - // use a field - assertEquals(VALUE, tryIt(Simple.class, "${strValue}", xxx -> new Simple())); - } - - @Test - public void testComponetizedExtractorGetMapExtractor() { - Map<String, Object> inner = new TreeMap<>(); - inner.put("inner1", "abc1"); - inner.put("inner2", "abc2"); - - Map<String, Object> outer = new TreeMap<>(); - outer.put("outer1", "def1"); - outer.put("outer2", inner); - - Simple obj = new Simple(); - - obj.mapValue = outer; - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${mapValue.outer2.inner2}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals("abc2", map.extract(obj)); - } - - @Test - public void testComponetizedExtractorGetMapExtractor_MapSubclass() { - Map<String, Object> inner = new TreeMap<>(); - inner.put("inner1", "abc1"); - inner.put("inner2", "abc2"); - - MapSubclass outer = new MapSubclass(); - outer.put("outer1", "def1"); - outer.put("outer2", inner); - - Simple obj = new Simple(); - - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${mapValue}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals(null, map.extract(obj)); - - obj.mapValue = outer; - props.setProperty(PROP_PREFIX + Simple.class.getName(), "${mapValue.outer2.inner2}"); - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - assertEquals("abc2", map.extract(obj)); - } - - /** - * Sets a property for the given class, makes an object, and then returns - * the value extracted. - * - * @param clazz class whose property is to be set - * @param propval value to which to set the property - * @param makeObj function to create the object whose data is to be - * extracted - * @return the extracted data, or {@code null} if nothing was extracted - */ - private Object tryIt(Class<?> clazz, String propval, Function<Void, Object> makeObj) { - Properties props = new Properties(); - props.setProperty(PROP_PREFIX + clazz.getName(), propval); - - map = new ClassExtractors(props, PROP_PREFIX, MY_TYPE); - - return map.extract(makeObj.apply(null)); - } - - /** - * A Map subclass, used to verify that getMapExtractor() still handles it. - */ - private static class MapSubclass extends TreeMap<String, Object> { - private static final long serialVersionUID = 1L; - - } - - /** - * A simple class. - */ - private static class Simple { - - /** - * This will not be used because getIntValue() will override it. - */ - @SuppressWarnings("unused") - public final int intValue = INT_VALUE2; - - /** - * Used to verify retrieval via a field name. - */ - @SuppressWarnings("unused") - public final String strValue = VALUE; - - /** - * Used to verify retrieval within maps. - */ - @SuppressWarnings("unused") - public Map<String, Object> mapValue = null; - - /** - * {@code True} if {@link #getVoidValue()} was invoked, {@code false} - * otherwise. - */ - private boolean voidInvoked = false; - - /** - * This function will supercede the value in the "intValue" field. - * - * @return INT_VALUE - */ - @SuppressWarnings("unused") - public Integer getIntValue() { - return INT_VALUE; - } - - /** - * Used to verify that void functions are not invoked. - */ - @SuppressWarnings("unused") - public void getVoidValue() { - voidInvoked = true; - } - } - - /** - * Used to verify multi-component retrieval. - */ - private static class Container { - public Simple simpleValue = new Simple(); - - @SuppressWarnings("unused") - public Simple getData() { - return simpleValue; - } - } - - /** - * Used to verify extraction when the property refers to an interface. - */ - private static interface WithString { - - String getStrValue(); - } - - /** - * Used to verify retrieval within a superclass. - */ - private static class Super implements WithString { - - @SuppressWarnings("unused") - public final int intValue = INT_VALUE; - - @Override - public String getStrValue() { - return VALUE; - } - } - - /** - * Used to verify retrieval within a subclass. - */ - private static class Sub extends Super { - - @SuppressWarnings("unused") - public final Simple simple = new Simple(); - - /** - * Used to verify multi-component retrieval. - */ - public final Container cont = new Container(); - } -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport.java deleted file mode 100644 index df42fe0f..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -/** - * Used to test extractors. - */ -public class ClassExtractorsTestSupport { - - private ClassExtractorsTestSupport2 nested = new ClassExtractorsTestSupport2(); - - /** - * Constructor. - */ - public ClassExtractorsTestSupport() { - super(); - } - - public ClassExtractorsTestSupport2 getNested() { - return nested; - } -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport2.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport2.java deleted file mode 100644 index dddd2510..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ClassExtractorsTestSupport2.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -/** - * Used to test extractors. - */ -public class ClassExtractorsTestSupport2 { - - public static final int NESTED_VALUE = 30; - - public final int theValue = NESTED_VALUE; -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ExtractorExceptionTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ExtractorExceptionTest.java deleted file mode 100644 index aef0a925..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/ExtractorExceptionTest.java +++ /dev/null @@ -1,35 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.onap.policy.common.utils.test.ExceptionsTester; - -public class ExtractorExceptionTest extends ExceptionsTester { - - @Test - public void test() { - assertEquals(5, test(ExtractorException.class)); - } - -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/FieldExtractorTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/FieldExtractorTest.java deleted file mode 100644 index 7536d007..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/FieldExtractorTest.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.lang.reflect.Field; -import org.junit.Before; -import org.junit.Test; - -public class FieldExtractorTest { - - private static final String VALUE = "the value"; - private static final Integer INT_VALUE = 10; - - private Field field; - private FieldExtractor ext; - - @Before - public void setUp() throws Exception { - field = MyClass.class.getDeclaredField("value"); - ext = new FieldExtractor(field); - } - - @Test - public void testExtract() throws Exception { - assertEquals(VALUE, ext.extract(new MyClass())); - - // repeat - assertEquals(VALUE, ext.extract(new MyClass())); - - // null value - MyClass obj = new MyClass(); - obj.value = null; - assertEquals(null, ext.extract(obj)); - - obj.value = VALUE + "X"; - assertEquals(VALUE + "X", ext.extract(obj)); - - // different value type - field = MyClass.class.getDeclaredField("value2"); - ext = new FieldExtractor(field); - assertEquals(INT_VALUE, ext.extract(new MyClass())); - } - - @Test - public void testExtract_ArgEx() { - // pass it the wrong class type - assertNull(ext.extract(this)); - } - - private static class MyClass { - @SuppressWarnings("unused") - public String value = VALUE; - - @SuppressWarnings("unused") - public int value2 = INT_VALUE; - } -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MapExtractorTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MapExtractorTest.java deleted file mode 100644 index 74694579..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MapExtractorTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.util.HashMap; -import java.util.Map; -import org.junit.Before; -import org.junit.Test; - -public class MapExtractorTest { - private static final String KEY = "a.key"; - private static final String VALUE = "a.value"; - - private MapExtractor ext; - - @Before - public void setUp() { - ext = new MapExtractor(KEY); - } - - @Test - public void testExtract_NotAMap() { - - // object is not a map (i.e., it's a String) - assertNull(ext.extract(KEY)); - } - - @Test - public void testExtract_MissingValue() { - - Map<String, Object> map = new HashMap<>(); - map.put(KEY + "x", VALUE + "x"); - - // object is a map, but doesn't have the key - assertNull(ext.extract(map)); - } - - @Test - public void testExtract() { - - Map<String, Object> map = new HashMap<>(); - map.put(KEY + "x", VALUE + "x"); - map.put(KEY, VALUE); - - // object is a map and contains the key - assertEquals(VALUE, ext.extract(map)); - - // change to value to a different type - map.put(KEY, 20); - assertEquals(20, ext.extract(map)); - } - -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MethodExtractorTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MethodExtractorTest.java deleted file mode 100644 index 41f731fb..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/extractor/MethodExtractorTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.extractor; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNull; - -import java.lang.reflect.Method; -import org.junit.Before; -import org.junit.Test; - -public class MethodExtractorTest { - - private static final String VALUE = "the value"; - private static final Integer INT_VALUE = 10; - - private Method meth; - private MethodExtractor ext; - - @Before - public void setUp() throws Exception { - meth = MyClass.class.getMethod("getValue"); - ext = new MethodExtractor(meth); - } - - @Test - public void testExtract() throws Exception { - assertEquals(VALUE, ext.extract(new MyClass())); - - // repeat - assertEquals(VALUE, ext.extract(new MyClass())); - - // null value - MyClass obj = new MyClass(); - meth = MyClass.class.getMethod("getNullValue"); - ext = new MethodExtractor(meth); - assertEquals(null, ext.extract(obj)); - - // different value type - meth = MyClass.class.getMethod("getIntValue"); - ext = new MethodExtractor(meth); - assertEquals(INT_VALUE, ext.extract(new MyClass())); - } - - @Test - public void testExtract_ArgEx() { - // pass it the wrong class type - assertNull(ext.extract(this)); - } - - @Test - public void testExtract_InvokeEx() throws Exception { - // invoke method that throws an exception - meth = MyClass.class.getMethod("throwException"); - ext = new MethodExtractor(meth); - assertEquals(null, ext.extract(new MyClass())); - } - - private static class MyClass { - - @SuppressWarnings("unused") - public String getValue() { - return VALUE; - } - - @SuppressWarnings("unused") - public int getIntValue() { - return INT_VALUE; - } - - @SuppressWarnings("unused") - public String getNullValue() { - return null; - } - - @SuppressWarnings("unused") - public String throwException() { - throw new IllegalStateException("expected"); - } - } - -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/message/ForwardTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/message/ForwardTest.java deleted file mode 100644 index 99df69ec..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/message/ForwardTest.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.message; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.onap.policy.common.endpoints.event.comm.Topic.CommInfrastructure; - -public class ForwardTest extends SupportBasicMessageTester<Forward> { - // values set by makeValidMessage() - public static final CommInfrastructure VALID_PROTOCOL = CommInfrastructure.UEB; - public static final int VALID_HOPS = 0; - public static final String VALID_TOPIC = "topicA"; - public static final String VALID_PAYLOAD = "payloadA"; - public static final String VALID_REQUEST_ID = "requestIdA"; - - /** - * Time, in milliseconds, after which the most recent message was created. - */ - private static long tcreateMs; - - public ForwardTest() { - super(Forward.class); - } - - @Test - public void testBumpNumHops() { - Forward msg = makeValidMessage(); - - for (int x = 0; x < 3; ++x) { - assertEquals("x=" + x, x, msg.getNumHops()); - msg.bumpNumHops(); - } - } - - @Test - public void testGetNumHops_testSetNumHops() { - Forward msg = makeValidMessage(); - - // from constructor - assertEquals(VALID_HOPS, msg.getNumHops()); - - msg.setNumHops(5); - assertEquals(5, msg.getNumHops()); - - msg.setNumHops(7); - assertEquals(7, msg.getNumHops()); - } - - @Test - public void testGetCreateTimeMs_testSetCreateTimeMs() { - Forward msg = makeValidMessage(); - - // from constructor - assertTrue(msg.getCreateTimeMs() >= tcreateMs); - - msg.setCreateTimeMs(1000L); - assertEquals(1000L, msg.getCreateTimeMs()); - - msg.setCreateTimeMs(2000L); - assertEquals(2000L, msg.getCreateTimeMs()); - } - - @Test - public void testGetProtocol_testSetProtocol() { - Forward msg = makeValidMessage(); - - // from constructor - assertEquals(CommInfrastructure.UEB, msg.getProtocol()); - - msg.setProtocol(CommInfrastructure.DMAAP); - assertEquals(CommInfrastructure.DMAAP, msg.getProtocol()); - - msg.setProtocol(CommInfrastructure.UEB); - assertEquals(CommInfrastructure.UEB, msg.getProtocol()); - } - - @Test - public void testGetTopic_testSetTopic() { - Forward msg = makeValidMessage(); - - // from constructor - assertEquals(VALID_TOPIC, msg.getTopic()); - - msg.setTopic("topicX"); - assertEquals("topicX", msg.getTopic()); - - msg.setTopic("topicY"); - assertEquals("topicY", msg.getTopic()); - } - - @Test - public void testGetPayload_testSetPayload() { - Forward msg = makeValidMessage(); - - // from constructor - assertEquals(VALID_PAYLOAD, msg.getPayload()); - - msg.setPayload("payloadX"); - assertEquals("payloadX", msg.getPayload()); - - msg.setPayload("payloadY"); - assertEquals("payloadY", msg.getPayload()); - } - - @Test - public void testGetRequestId_testSetRequestId() { - Forward msg = makeValidMessage(); - - // from constructor - assertEquals(VALID_REQUEST_ID, msg.getRequestId()); - - msg.setRequestId("reqX"); - assertEquals("reqX", msg.getRequestId()); - - msg.setRequestId("reqY"); - assertEquals("reqY", msg.getRequestId()); - } - - @Test - public void testIsExpired() { - Forward msg = makeValidMessage(); - - long tcreate = msg.getCreateTimeMs(); - assertTrue(msg.isExpired(tcreate + 1)); - assertTrue(msg.isExpired(tcreate + 10)); - - assertFalse(msg.isExpired(tcreate)); - assertFalse(msg.isExpired(tcreate - 1)); - assertFalse(msg.isExpired(tcreate - 10)); - } - - @Test - public void testCheckValidity_InvalidFields() throws Exception { - // null source (i.e., superclass field) - expectCheckValidityFailure(msg -> msg.setSource(null)); - - // null protocol - expectCheckValidityFailure(msg -> msg.setProtocol(null)); - - // null or empty topic - expectCheckValidityFailure_NullOrEmpty((msg, value) -> msg.setTopic(value)); - - // null payload - expectCheckValidityFailure(msg -> msg.setPayload(null)); - - // empty payload should NOT throw an exception - Forward forward = makeValidMessage(); - forward.setPayload(""); - forward.checkValidity(); - - // null or empty requestId - expectCheckValidityFailure_NullOrEmpty((msg, value) -> msg.setRequestId(value)); - - // invalid hop count - expectCheckValidityFailure(msg -> msg.setNumHops(-1)); - } - - @Override - public Forward makeValidMessage() { - tcreateMs = System.currentTimeMillis(); - - Forward msg = new Forward(VALID_HOST, VALID_PROTOCOL, VALID_TOPIC, VALID_PAYLOAD, VALID_REQUEST_ID); - msg.setChannel(VALID_CHANNEL); - - return msg; - } - - @Override - public void testDefaultConstructorFields(Forward msg) { - super.testDefaultConstructorFields(msg); - - assertEquals(VALID_HOPS, msg.getNumHops()); - assertEquals(0, msg.getCreateTimeMs()); - assertNull(msg.getPayload()); - assertNull(msg.getProtocol()); - assertNull(msg.getRequestId()); - assertNull(msg.getTopic()); - } - - @Override - public void testValidFields(Forward msg) { - super.testValidFields(msg); - - assertEquals(VALID_HOPS, msg.getNumHops()); - assertTrue(msg.getCreateTimeMs() >= tcreateMs); - assertEquals(VALID_PAYLOAD, msg.getPayload()); - assertEquals(VALID_PROTOCOL, msg.getProtocol()); - assertEquals(VALID_REQUEST_ID, msg.getRequestId()); - assertEquals(VALID_TOPIC, msg.getTopic()); - } -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ActiveStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ActiveStateTest.java index d8ed62c8..771f694e 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ActiveStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ActiveStateTest.java @@ -36,7 +36,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; -import java.util.Map; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.junit.Before; @@ -44,7 +43,6 @@ import org.junit.Test; import org.onap.policy.drools.pooling.message.BucketAssignments; import org.onap.policy.drools.pooling.message.Heartbeat; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; import org.onap.policy.drools.pooling.message.Query; @@ -76,17 +74,6 @@ public class ActiveStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test public void testProcessHeartbeat_NullHost() { assertNull(state.process(new Heartbeat())); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/FilterUtilsTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/FilterUtilsTest.java deleted file mode 100644 index f4eb870e..00000000 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/FilterUtilsTest.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - * ============LICENSE_START======================================================= - * ONAP - * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.policy.drools.pooling.state; - -import static org.junit.Assert.assertEquals; -import static org.onap.policy.drools.pooling.state.FilterUtils.CLASS_AND; -import static org.onap.policy.drools.pooling.state.FilterUtils.CLASS_EQUALS; -import static org.onap.policy.drools.pooling.state.FilterUtils.CLASS_OR; -import static org.onap.policy.drools.pooling.state.FilterUtils.JSON_CLASS; -import static org.onap.policy.drools.pooling.state.FilterUtils.JSON_FIELD; -import static org.onap.policy.drools.pooling.state.FilterUtils.JSON_FILTERS; -import static org.onap.policy.drools.pooling.state.FilterUtils.JSON_VALUE; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeAnd; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeEquals; -import static org.onap.policy.drools.pooling.state.FilterUtils.makeOr; - -import java.util.Map; -import org.junit.Test; - -public class FilterUtilsTest { - - @Test - public void testMakeEquals() { - checkEquals("abc", "def", makeEquals("abc", "def")); - } - - @Test - public void testMakeAnd() { - @SuppressWarnings("unchecked") - Map<String, Object> filter = - makeAnd(makeEquals("an1", "av1"), makeEquals("an2", "av2"), makeEquals("an3", "av3")); - - checkArray(CLASS_AND, 3, filter); - checkEquals("an1", "av1", getItem(filter, 0)); - checkEquals("an2", "av2", getItem(filter, 1)); - checkEquals("an3", "av3", getItem(filter, 2)); - } - - @Test - public void testMakeOr() { - @SuppressWarnings("unchecked") - Map<String, Object> filter = - makeOr(makeEquals("on1", "ov1"), makeEquals("on2", "ov2"), makeEquals("on3", "ov3")); - - checkArray(CLASS_OR, 3, filter); - checkEquals("on1", "ov1", getItem(filter, 0)); - checkEquals("on2", "ov2", getItem(filter, 1)); - checkEquals("on3", "ov3", getItem(filter, 2)); - } - - /** - * Checks that the filter contains an array. - * - * @param expectedClassName type of filter this should represent - * @param expectedCount number of items expected in the array - * @param filter filter to be examined - */ - protected void checkArray(String expectedClassName, int expectedCount, Map<String, Object> filter) { - assertEquals(expectedClassName, filter.get(JSON_CLASS)); - - Object[] val = (Object[]) filter.get(JSON_FILTERS); - assertEquals(expectedCount, val.length); - } - - /** - * Checks that a map represents an "equals". - * - * @param name name of the field on the left side of the equals - * @param value value on the right side of the equals - * @param map map whose content is to be examined - */ - protected void checkEquals(String name, String value, Map<String, Object> map) { - assertEquals(CLASS_EQUALS, map.get(JSON_CLASS)); - assertEquals(name, map.get(JSON_FIELD)); - assertEquals(value, map.get(JSON_VALUE)); - } - - /** - * Gets a particular sub-filter from the array contained within a filter. - * - * @param filter containing filter - * @param index index of the sub-filter of interest - * @return the sub-filter with the given index - */ - @SuppressWarnings("unchecked") - protected Map<String, Object> getItem(Map<String, Object> filter, int index) { - Object[] val = (Object[]) filter.get(JSON_FILTERS); - - return (Map<String, Object>) val[index]; - } - -} diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/IdleStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/IdleStateTest.java index 9e3ddcf9..5cc88d3a 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/IdleStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/IdleStateTest.java @@ -2,14 +2,14 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018, 2020 AT&T Intellectual Property. All rights reserved. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -21,21 +21,18 @@ package org.onap.policy.drools.pooling.state; import static org.junit.Assert.assertNull; -import static org.mockito.Matchers.any; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.Map; import org.junit.Before; import org.junit.Test; import org.onap.policy.drools.pooling.message.BucketAssignments; -import org.onap.policy.drools.pooling.message.Forward; import org.onap.policy.drools.pooling.message.Heartbeat; import org.onap.policy.drools.pooling.message.Identification; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; import org.onap.policy.drools.pooling.message.Query; @@ -54,26 +51,6 @@ public class IdleStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test - public void testProcessForward() { - Forward msg = new Forward(); - msg.setChannel(MY_HOST); - assertNull(state.process(msg)); - - verify(mgr).handle(msg); - } - - @Test public void testProcessHeartbeat() { assertNull(state.process(new Heartbeat(PREV_HOST, 0L))); verifyNothingPublished(); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/InactiveStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/InactiveStateTest.java index ab468a1c..f8f70461 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/InactiveStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/InactiveStateTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018, 2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -29,14 +29,12 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.Map; import org.apache.commons.lang3.tuple.Pair; import org.junit.Before; import org.junit.Test; import org.onap.policy.drools.pooling.message.BucketAssignments; import org.onap.policy.drools.pooling.message.Identification; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Query; public class InactiveStateTest extends SupportBasicStateTester { @@ -56,17 +54,6 @@ public class InactiveStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test public void testProcessLeader() { State next = mock(State.class); when(mgr.goActive()).thenReturn(next); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ProcessingStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ProcessingStateTest.java index 7dc7b2fd..e7c9db72 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ProcessingStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/ProcessingStateTest.java @@ -32,7 +32,6 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; -import java.util.Map; import org.junit.Before; import org.junit.Test; import org.onap.policy.drools.pooling.message.BucketAssignments; @@ -59,17 +58,6 @@ public class ProcessingStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test public void testProcessQuery() { State next = mock(State.class); when(mgr.goQuery()).thenReturn(next); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/QueryStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/QueryStateTest.java index aa999b5d..70abb96a 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/QueryStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/QueryStateTest.java @@ -2,7 +2,7 @@ * ============LICENSE_START======================================================= * ONAP * ================================================================================ - * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * Copyright (C) 2018, 2020 AT&T Intellectual Property. All rights reserved. * Modifications Copyright (C) 2020 Nordix Foundation * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); @@ -32,14 +32,12 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.Map; import org.apache.commons.lang3.tuple.Pair; import org.junit.Before; import org.junit.Test; import org.onap.policy.drools.pooling.message.BucketAssignments; import org.onap.policy.drools.pooling.message.Identification; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; public class QueryStateTest extends SupportBasicStateTester { @@ -58,17 +56,6 @@ public class QueryStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test public void testGoQuery() { assertNull(state.goQuery()); } diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StartStateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StartStateTest.java index 142fbf7e..3d64687f 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StartStateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StartStateTest.java @@ -31,16 +31,13 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.Map; import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Triple; import org.junit.Before; import org.junit.Test; -import org.onap.policy.drools.pooling.message.Forward; import org.onap.policy.drools.pooling.message.Heartbeat; import org.onap.policy.drools.pooling.message.Identification; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; import org.onap.policy.drools.pooling.message.Query; @@ -60,24 +57,6 @@ public class StartStateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - - // get the sub-filter - filter = utils.getItem(filter, 1); - - utils.checkArray(FilterUtils.CLASS_AND, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_TIMESTAMP, String.valueOf(state.getHbTimestampMs()), - utils.getItem(filter, 1)); - } - - @Test public void testStart() { state.start(); @@ -142,15 +121,6 @@ public class StartStateTest extends SupportBasicStateTester { } @Test - public void testProcessForward() { - Forward msg = new Forward(); - msg.setChannel(MY_HOST); - assertNull(state.process(msg)); - - verify(mgr).handle(msg); - } - - @Test public void testProcessHeartbeat() { Heartbeat msg = new Heartbeat(); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StateTest.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StateTest.java index 5284ed11..87868a76 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StateTest.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/StateTest.java @@ -31,17 +31,14 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import java.util.Map; import org.junit.Before; import org.junit.Test; import org.onap.policy.drools.pooling.CancellableScheduledTask; import org.onap.policy.drools.pooling.PoolingManager; import org.onap.policy.drools.pooling.message.BucketAssignments; -import org.onap.policy.drools.pooling.message.Forward; import org.onap.policy.drools.pooling.message.Heartbeat; import org.onap.policy.drools.pooling.message.Identification; import org.onap.policy.drools.pooling.message.Leader; -import org.onap.policy.drools.pooling.message.Message; import org.onap.policy.drools.pooling.message.Offline; import org.onap.policy.drools.pooling.message.Query; @@ -125,17 +122,6 @@ public class StateTest extends SupportBasicStateTester { } @Test - public void testGetFilter() { - Map<String, Object> filter = state.getFilter(); - - FilterUtilsTest utils = new FilterUtilsTest(); - - utils.checkArray(FilterUtils.CLASS_OR, 2, filter); - utils.checkEquals(FilterUtils.MSG_CHANNEL, Message.ADMIN, utils.getItem(filter, 0)); - utils.checkEquals(FilterUtils.MSG_CHANNEL, MY_HOST, utils.getItem(filter, 1)); - } - - @Test public void testStart() { assertThatCode(() -> state.start()).doesNotThrowAnyException(); } @@ -213,19 +199,6 @@ public class StateTest extends SupportBasicStateTester { } @Test - public void testProcessForward() { - Forward msg = new Forward(); - assertNull(state.process(msg)); - - verify(mgr, never()).handle(msg); - - msg.setChannel(MY_HOST); - assertNull(state.process(msg)); - - verify(mgr).handle(msg); - } - - @Test public void testProcessHeartbeat() { assertNull(state.process(new Heartbeat())); } @@ -341,16 +314,6 @@ public class StateTest extends SupportBasicStateTester { } @Test - public void testPublishStringForward() { - String chnl = "channelF"; - Forward msg = new Forward(); - - state.publish(chnl, msg); - - verify(mgr).publish(chnl, msg); - } - - @Test public void testPublishStringHeartbeat() { String chnl = "channelH"; Heartbeat msg = new Heartbeat(); diff --git a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/SupportBasicStateTester.java b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/SupportBasicStateTester.java index 1a65c802..18d77ba7 100644 --- a/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/SupportBasicStateTester.java +++ b/feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling/state/SupportBasicStateTester.java @@ -32,7 +32,6 @@ import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import java.util.concurrent.atomic.AtomicReference; @@ -143,12 +142,7 @@ public class SupportBasicStateTester { when(props.getActiveHeartbeatMs()).thenReturn(STD_ACTIVE_HEARTBEAT_MS); when(props.getInterHeartbeatMs()).thenReturn(STD_INTER_HEARTBEAT_MS); - prevState = new State(mgr) { - @Override - public Map<String, Object> getFilter() { - throw new UnsupportedOperationException("cannot filter"); - } - }; + prevState = new State(mgr) {}; // capture publish() arguments doAnswer(invocation -> { |