2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html.
9 package org.opendaylight.controller.sal.dom.broker;
11 import static junit.framework.Assert.fail;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Mockito.doAnswer;
14 import static org.mockito.Mockito.doReturn;
15 import static org.mockito.Mockito.mock;
16 import static org.mockito.Mockito.times;
17 import static org.mockito.Mockito.verify;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.mockito.invocation.InvocationOnMock;
24 import org.mockito.stubbing.Answer;
25 import org.opendaylight.controller.md.sal.dom.api.DOMMountPoint;
26 import org.opendaylight.controller.md.sal.dom.api.DOMMountPointService;
27 import org.opendaylight.controller.md.sal.dom.api.DOMService;
28 import org.opendaylight.controller.md.sal.dom.broker.impl.mount.DOMMountPointServiceImpl;
29 import org.opendaylight.controller.sal.core.api.mount.MountProvisionInstance;
30 import org.opendaylight.controller.sal.core.api.mount.MountProvisionListener;
31 import org.opendaylight.yangtools.concepts.ObjectRegistration;
32 import org.opendaylight.yangtools.yang.common.QName;
33 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
34 import org.opendaylight.yangtools.yang.model.api.DataSchemaNode;
35 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
39 import com.google.common.base.Optional;
41 public class BackwardsCompatibleMountPointManagerTest {
42 private static final Logger log = LoggerFactory.getLogger(BackwardsCompatibleMountPointManagerTest.class);
45 private DOMMountPointServiceImpl domMountPointService;
47 private DOMMountPointService.DOMMountPointBuilder mountBuilder;
49 private BackwardsCompatibleMountPointManager compatibleMountPointManager;
50 static final QName qName = QName.create("namespace", "12-12-1212", "mount");
51 static final YangInstanceIdentifier id = YangInstanceIdentifier.of(qName);
54 public void setUp() throws Exception {
55 MockitoAnnotations.initMocks(this);
57 compatibleMountPointManager = new BackwardsCompatibleMountPointManager(domMountPointService);
61 public void testCreateMountpointAlreadyCreated() throws Exception {
62 compatibleMountPointManager.createMountPoint(id);
63 verify(domMountPointService).createMountPoint(id);
64 verify(mountBuilder, times(3)).addService(any(Class.class), any(DOMService.class));
65 verify(mountBuilder).addInitialSchemaContext(any(SchemaContext.class));
68 compatibleMountPointManager.createMountPoint(id);
69 } catch (final IllegalStateException e) {
73 fail("Should fail to create duplicate mount");
77 public void testCreateMountpointGetOrCreate() throws Exception {
78 compatibleMountPointManager = new BackwardsCompatibleMountPointManager(new DOMMountPointServiceImpl());
80 final MountProvisionListener listener = new MountProvisionListener() {
81 public int createdMounts = 0;
84 public void onMountPointCreated(final YangInstanceIdentifier path) {
85 if(createdMounts++ > 1 ) {
86 fail("Only one mount point should have been created");
91 public void onMountPointRemoved(final YangInstanceIdentifier path) {}
94 compatibleMountPointManager.registerProvisionListener(listener);
96 final MountProvisionInstance m1 = compatibleMountPointManager.createOrGetMountPoint(id);
97 m1.setSchemaContext(mockSchemaContext());
98 compatibleMountPointManager.createOrGetMountPoint(id);
99 compatibleMountPointManager.createOrGetMountPoint(id);
102 private void stubMountService() {
103 doReturn(mockMountPointBuilder()).when(domMountPointService).createMountPoint(any(YangInstanceIdentifier.class));
104 doReturn(Optional.of(mockMountPoint())).when(domMountPointService).getMountPoint(any(YangInstanceIdentifier.class));
107 private DOMMountPoint mockMountPoint() {
108 final DOMMountPoint mock = mock(DOMMountPoint.class);
109 doAnswer(new Answer() {
111 public Object answer(final InvocationOnMock invocation) throws Throwable {
112 return Optional.of(mock(((Class<?>) invocation.getArguments()[0])));
114 }).when(mock).getService(any(Class.class));
115 doReturn(mockSchemaContext()).when(mock).getSchemaContext();
119 static SchemaContext mockSchemaContext() {
120 final SchemaContext mock = mock(SchemaContext.class);
121 doReturn(qName).when(mock).getQName();
122 doReturn("schema").when(mock).toString();
123 doReturn(mock(DataSchemaNode.class)).when(mock).getDataChildByName(any(QName.class));
127 private DOMMountPointService.DOMMountPointBuilder mockMountPointBuilder() {
128 doReturn(mountBuilder).when(mountBuilder).addService(any(Class.class), any(DOMService.class));
129 doReturn(mockObjectRegistration()).when(mountBuilder).register();
130 doReturn(mountBuilder).when(mountBuilder).addInitialSchemaContext(any(SchemaContext.class));
134 private ObjectRegistration<?> mockObjectRegistration() {
135 return mock(ObjectRegistration.class);