/* * Copyright (c) 2014 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.test; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.opendaylight.controller.md.sal.binding.api.DataChangeListener; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker.DataChangeScope; import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.yangtools.yang.binding.DataObject; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import com.google.common.util.concurrent.SettableFuture; public abstract class AbstractDataChangeListenerTest extends AbstractDataBrokerTest { protected static final class TestListener implements DataChangeListener { private final SettableFuture, DataObject>> event; private boolean capture = false; private TestListener() { event = SettableFuture.create(); } @Override public void onDataChanged(final AsyncDataChangeEvent, DataObject> arg) { if (capture) { event.set(arg); } } public AsyncDataChangeEvent, DataObject> event() { try { return event.get(500, TimeUnit.MILLISECONDS); } catch (InterruptedException | TimeoutException | ExecutionException e) { throw new IllegalStateException(e); } } public boolean hasEvent() { return event.isDone(); } public void startCapture() { this.capture = true; } } protected final TestListener createListener(final LogicalDatastoreType store, final InstanceIdentifier path, final DataChangeScope scope) { TestListener listener = new TestListener(); getDataBroker().registerDataChangeListener(store, path, listener, scope); listener.startCapture(); return listener; } }