/*
* Copyright © 2015 Yale University 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.alto.basic.impl;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
import org.opendaylight.yang.gen.v1.urn.alto.simple.ird.rev151021.IrdInstanceConfiguration;
import org.opendaylight.yang.gen.v1.urn.alto.simple.ird.rev151021.IrdInstanceConfigurationBuilder;
import org.opendaylight.yang.gen.v1.urn.alto.simple.ird.rev151021.IrdInstanceConfigurationKey;
import org.opendaylight.yang.gen.v1.urn.alto.resourcepool.rev150921.Context;
import org.opendaylight.yang.gen.v1.urn.alto.resourcepool.rev150921.ContextKey;
import org.opendaylight.yang.gen.v1.urn.alto.types.rev150921.ResourceId;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.DataObject;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
public class SimpleIrdListenerTest {
private DataBroker m_dataBroker = mock(DataBroker.class);
private ListenerRegistration<DataChangeListener> m_reg = mock(ListenerRegistration.class);
private SimpleIrdListener simpleIrdListener = new SimpleIrdListener(new Uuid(DEFAULT_UUID));
private WriteTransaction wx = mock(WriteTransaction.class);
private ReadWriteTransaction rwx = mock(ReadWriteTransaction.class);
private MockDataChangedEvent dataChangedEvent = new MockDataChangedEvent();
private static final String DEFAULT_UUID = "00000000-0000-0000-0000-000000000001";
private static final String DEFAULT_CONTEXT_UUID = "00000000-0000-0000-0000-000000000001";
private static String ORIGINAL_INSTANCE_ID="ORIGINAL_INSTANCE_ID";
private static String UPDATED_INSTANCE_ID="UPDATED_INSTANCE_ID";
private static String DEFAULT_INSTANCE_ID="DEFAULT_INSTANCE_ID";
@Before
public void setUp() {
when(m_dataBroker.registerDataChangeListener(
any(LogicalDatastoreType.class),
any(InstanceIdentifier.class),
any(DataChangeListener.class),
any(AsyncDataBroker.DataChangeScope.class)))
.thenReturn(m_reg);
InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class).build();
simpleIrdListener.register(m_dataBroker, iicIID);
}
@Test
public void register() throws Exception {
when(m_dataBroker.registerDataChangeListener(
any(LogicalDatastoreType.class),
any(InstanceIdentifier.class),
any(DataChangeListener.class),
any(AsyncDataBroker.DataChangeScope.class)))
.thenReturn(m_reg);
InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(IrdInstanceConfiguration.class).build();
simpleIrdListener.register(m_dataBroker, iicIID);
verify(m_dataBroker, times(2)).registerDataChangeListener(LogicalDatastoreType.CONFIGURATION, iicIID
, this.simpleIrdListener, AsyncDataBroker.DataChangeScope.ONE);
}
@Test
public void onDataChanged() throws Exception {
when(m_dataBroker.newWriteOnlyTransaction()).thenReturn(wx);
simpleIrdListener.onDataChanged(dataChangedEvent);
//TBD
}
@Test
public void updateIrd() throws Exception {
IrdInstanceConfigurationBuilder originalIICB = new IrdInstanceConfigurationBuilder()
.setInstanceId(new ResourceId(ORIGINAL_INSTANCE_ID));
IrdInstanceConfigurationBuilder updatedIICB = new IrdInstanceConfigurationBuilder()
.setInstanceId(new ResourceId(UPDATED_INSTANCE_ID));
simpleIrdListener.updateIrd(originalIICB.build(), updatedIICB.build(), wx);
}
@Test
public void removeIrd() throws Exception {
IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
.setInstanceId(new ResourceId("test-instance-id"));
simpleIrdListener.removeIrd(iicb.build(), wx);
}
@Test
public void isValidEntryContext() throws Exception {
InstanceIdentifier<Context> contextIID = InstanceIdentifier
.builder(Context.class, new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID))).build();
assertEquals(simpleIrdListener.isValidEntryContext(contextIID), true);
}
@Test
public void createIrd() throws Exception {
InstanceIdentifier<Context> contextIId = InstanceIdentifier.builder(Context.class, new ContextKey(new Uuid(DEFAULT_CONTEXT_UUID))).build();
IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
.setInstanceId(new ResourceId(DEFAULT_INSTANCE_ID))
.setEntryContext(contextIId);
simpleIrdListener.createIrd(iicb.build(), wx);
}
@Test
public void close() throws Exception {
simpleIrdListener.close();
verify(m_reg).close();
}
static class MockDataChangedEvent implements AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> {
Map<InstanceIdentifier<?>,DataObject> created = new HashMap<>();
Map<InstanceIdentifier<?>,DataObject> updated = new HashMap<>();
Set<InstanceIdentifier<?>> removed = new HashSet<>();
@Override
public Map<InstanceIdentifier<?>, DataObject> getCreatedData() {
return created;
}
@Override
public Map<InstanceIdentifier<?>, DataObject> getUpdatedData() {
Map<InstanceIdentifier<?>, DataObject> updated = new HashMap<>();
InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(
IrdInstanceConfiguration.class, new IrdInstanceConfigurationKey(new ResourceId("UPDATED_CONFIG"))).build();
IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
.setKey(new IrdInstanceConfigurationKey(new ResourceId("UPDATED_CONFIG")));
updated.put(iicIID, iicb.build());
return updated;
}
@Override
public Set<InstanceIdentifier<?>> getRemovedPaths() {
return removed;
}
@Override
public Map<InstanceIdentifier<?>, DataObject> getOriginalData() {
Map<InstanceIdentifier<?>, DataObject> originaled = new HashMap<>();
InstanceIdentifier<IrdInstanceConfiguration> iicIID = InstanceIdentifier.builder(
IrdInstanceConfiguration.class, new IrdInstanceConfigurationKey(new ResourceId("ORIGINAL_CONFIG"))).build();
IrdInstanceConfigurationBuilder iicb = new IrdInstanceConfigurationBuilder()
.setKey(new IrdInstanceConfigurationKey(new ResourceId("ORIGINAL_CONFIG")));
originaled.put(iicIID, iicb.build());
return originaled;
}
@Override
public DataObject getOriginalSubtree() {
throw new UnsupportedOperationException("Not implemented by mock");
}
@Override
public DataObject getUpdatedSubtree() {
throw new UnsupportedOperationException("Not implemented by mock");
}
}
}