/* * Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.controller.md.sal.binding.impl.test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService; import org.opendaylight.controller.md.sal.binding.api.NotificationService; import org.opendaylight.controller.md.sal.binding.compat.HeliumNotificationProviderServiceAdapter; import org.opendaylight.controller.md.sal.binding.test.AbstractNotificationBrokerTest; import org.opendaylight.controller.sal.binding.api.NotificationProviderService; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.OpendaylightMdsalListTestListener; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.TwoLevelListChanged; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.TwoLevelListChangedBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.md.sal.test.list.rev140701.two.level.list.TopLevelListKey; import org.opendaylight.yangtools.concepts.ListenerRegistration; import org.opendaylight.yangtools.yang.binding.NotificationListener; public class BackwardsCompatibleNotificationBrokerTest extends AbstractNotificationBrokerTest { private NotificationProviderService notificationProviderService; @Before public void initTest() { final NotificationService notificationService = getNotificationService(); final NotificationPublishService notificationPublishService = getNotificationPublishService(); notificationProviderService = new HeliumNotificationProviderServiceAdapter(notificationPublishService, notificationService); } private TwoLevelListChanged createTestData() { final TwoLevelListChangedBuilder tb = new TwoLevelListChangedBuilder(); tb.setTopLevelList(ImmutableList.of(new TopLevelListBuilder().withKey(new TopLevelListKey("test")).build())); return tb.build(); } @Test public void testNotifSubscriptionForwarded() throws InterruptedException { final CountDownLatch latch = new CountDownLatch(1); final TwoLevelListChanged testData = createTestData(); final NotifTestListenerChild testNotifListener = new NotifTestListenerChild(latch); final ListenerRegistration listenerRegistration = notificationProviderService.registerNotificationListener(testNotifListener); notificationProviderService.publish(testData); latch.await(500L, TimeUnit.MILLISECONDS); assertTrue(testNotifListener.getReceivedNotifications().size() == 1); assertEquals(testData, testNotifListener.getReceivedNotifications().get(0)); listenerRegistration.close(); } private static class NotifTestListenerChild extends NotifTestListener { NotifTestListenerChild(final CountDownLatch latch) { super(latch); } } private static class NotifTestListener implements OpendaylightMdsalListTestListener { private final List receivedNotifications = new ArrayList<>(); private final CountDownLatch latch; NotifTestListener(final CountDownLatch latch) { this.latch = latch; } @Override public void onTwoLevelListChanged(final TwoLevelListChanged notification) { receivedNotifications.add(notification); latch.countDown(); } public List getReceivedNotifications() { return receivedNotifications; } } }