diff options
Diffstat (limited to 'feature-pooling-dmaap/src/test/java/org/onap/policy/drools/pooling')
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 -> { |