Fix yanglib SFT failure 59/70759/1
authorTom Pantelis <tompantelis@gmail.com>
Fri, 6 Apr 2018 22:35:29 +0000 (18:35 -0400)
committerJakub Morvay <jakub.morvay@gmail.com>
Wed, 11 Apr 2018 06:21:58 +0000 (06:21 +0000)
For some reason the YangLibRestApp doesn't get created which causes
BP to timeout b/c it advertises an OSGi service referenced by the
BP xml. Instead of using a service I changed it to use a static
to bridge between BP and the web app, as is done elsewhere.

Change-Id: Ia606514258d2082bf041ac81ab890f53f999ee2c
Signed-off-by: Tom Pantelis <tompantelis@gmail.com>
(cherry picked from commit c734a43d922f4603c0463e6de86c99f0ca317887)

netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibProvider.java
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibRestApp.java
netconf/yanglib/src/main/java/org/opendaylight/yanglib/impl/YangLibServiceImpl.java
netconf/yanglib/src/main/resources/WEB-INF/web.xml
netconf/yanglib/src/main/resources/org/opendaylight/blueprint/yanglib.xml
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibProviderTest.java
netconf/yanglib/src/test/java/org/opendaylight/yanglib/impl/YangLibRestAppTest.java

index a89233727eef93e82593b0be1ce9cf66bf453ef3..d969f0b40fddfeaa1713daccc36104efd8967a7e 100644 (file)
@@ -58,21 +58,18 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
         input -> YangTextSchemaSource.class.isAssignableFrom(input.getRepresentation());
 
     private final DataBroker dataBroker;
-    private final YangLibServiceImpl yangLibService;
     private final YanglibConfig yanglibConfig;
     private SchemaListenerRegistration schemaListenerRegistration;
     private SharedSchemaRepository schemaRepository;
 
-    public YangLibProvider(final YanglibConfig yanglibConfig, final DataBroker dataBroker,
-            final YangLibServiceImpl yangLibService) {
+    public YangLibProvider(final YanglibConfig yanglibConfig, final DataBroker dataBroker) {
         this.yanglibConfig = Preconditions.checkNotNull(yanglibConfig);
         this.dataBroker = Preconditions.checkNotNull(dataBroker);
-        this.yangLibService = Preconditions.checkNotNull(yangLibService);
     }
 
     @Override
     public void close() {
-        yangLibService.setSchemaRepository(null);
+        YangLibServiceImpl.setSchemaRepository(null);
         if (schemaListenerRegistration != null) {
             schemaListenerRegistration.close();
         }
@@ -95,7 +92,7 @@ public class YangLibProvider implements AutoCloseable, SchemaSourceListener {
         schemaRepository.registerSchemaSourceListener(cache);
 
         schemaListenerRegistration = schemaRepository.registerSchemaSourceListener(this);
-        yangLibService.setSchemaRepository(schemaRepository);
+        YangLibServiceImpl.setSchemaRepository(schemaRepository);
 
         LOG.info("Started yang library with sources from {}", cacheFolderFile);
     }
index cafcd116234467bc5b9875dfb143dbe58841d76d..308e9bb7a3cab77da49d663737d8a42678c0a39f 100644 (file)
@@ -12,17 +12,9 @@ import java.util.Collections;
 import java.util.Set;
 import javax.ws.rs.core.Application;
 import org.opendaylight.yanglib.api.YangLibRestAppService;
-import org.osgi.framework.FrameworkUtil;
 
 public class YangLibRestApp extends Application implements YangLibRestAppService {
-
-    private final YangLibServiceImpl yangLibService;
-
-    public YangLibRestApp() {
-        this.yangLibService = new YangLibServiceImpl();
-        FrameworkUtil.getBundle(getClass()).getBundleContext().registerService(YangLibRestAppService.class.getName(),
-                this, null);
-    }
+    private final YangLibServiceImpl yangLibService = new YangLibServiceImpl();
 
     @Override
     public Set<Object> getSingletons() {
index 7b942dd0072f38b146772299b20485354584075b..949d8f577393c35baaf747ae4a1b51266d3aa0fb 100644 (file)
@@ -29,15 +29,15 @@ import org.slf4j.LoggerFactory;
 public class YangLibServiceImpl implements YangLibService {
     private static final Logger LOG = LoggerFactory.getLogger(YangLibServiceImpl.class);
 
-    private volatile SchemaRepository schemaRepository;
+    private static volatile SchemaRepository schemaRepository;
 
     public YangLibServiceImpl() {
 
     }
 
-    public void setSchemaRepository(final SchemaRepository schemaRepository) {
+    public static void setSchemaRepository(final SchemaRepository schemaRepository) {
         LOG.debug("Setting schema repository {}", schemaRepository);
-        this.schemaRepository = schemaRepository;
+        YangLibServiceImpl.schemaRepository = schemaRepository;
     }
 
     @Override
index ec758fb8275bc8748551c4f134dcc89255cc6467..73f005fcfcb8d2283a41b86fa7826606dfa2e3f1 100644 (file)
             <param-name>javax.ws.rs.Application</param-name>
             <param-value>org.opendaylight.yanglib.impl.YangLibRestApp</param-value>
         </init-param>
+        <load-on-startup>1</load-on-startup>
     </servlet>
 
     <servlet-mapping>
         <servlet-name>JAXRSYanglib</servlet-name>
         <url-pattern>/*</url-pattern>
     </servlet-mapping>
-</web-app>
\ No newline at end of file
+</web-app>
index 890d72bbdf45b3618ae8320d35e513cc0f35ad70..d16f601db647caf1f0bf5dc1027d07dbb9cb333f 100644 (file)
       binding-class="org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.yanglib.impl.rev141210.YanglibConfig"/>
 
   <reference id="dataBroker" interface="org.opendaylight.controller.md.sal.binding.api.DataBroker"/>
-  <reference id="yangLibRestAppService" interface="org.opendaylight.yanglib.api.YangLibRestAppService"/>
 
   <bean id="yangLibProvider" class="org.opendaylight.yanglib.impl.YangLibProvider"
           init-method="init" destroy-method="close">
     <argument ref="yanglibConfig"/>
     <argument ref="dataBroker"/>
-    <argument>
-      <bean factory-ref="yangLibRestAppService" factory-method="getYangLibService"/>
-    </argument>
   </bean>
 
 </blueprint>
index 5372a072605f4e243d216a438fa0b07eff6d2e8c..36db57aa783c2e2e9206a7c43315aab8e9bf8669 100644 (file)
@@ -89,7 +89,7 @@ public class YangLibProviderTest {
 
         final YanglibConfig yanglibConfig = new YanglibConfigBuilder().setBindingAddr("www.fake.com")
                 .setBindingPort(300L).setCacheFolder(CACHE_DIR.getAbsolutePath()).build();
-        yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker, new YangLibServiceImpl());
+        yangLibProvider = new YangLibProvider(yanglibConfig, dataBroker);
     }
 
     @Test
index 62b81599db10ba7911872e0aeedb4e953cfd5f47..c72366d6f8676c987f40751a88f134077140b93d 100644 (file)
@@ -9,44 +9,17 @@
 package org.opendaylight.yanglib.impl;
 
 import static junit.framework.TestCase.assertTrue;
-import static org.mockito.BDDMockito.given;
-import static org.mockito.BDDMockito.then;
-import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.times;
 
 import java.util.Set;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.opendaylight.yanglib.api.YangLibRestAppService;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.FrameworkUtil;
-import org.powermock.api.mockito.PowerMockito;
-import org.powermock.core.classloader.annotations.PrepareForTest;
-import org.powermock.modules.junit4.PowerMockRunner;
 
-@RunWith(PowerMockRunner.class)
-@PrepareForTest(FrameworkUtil.class)
 public class YangLibRestAppTest {
 
     @Test
     public void testYangLibRestApp() {
-        PowerMockito.mockStatic(FrameworkUtil.class);
-
-        final BundleContext bundleContext = mock(BundleContext.class);
-        final Bundle bundle = mock(Bundle.class);
-
-        given(FrameworkUtil.getBundle(any())).willReturn(bundle);
-        given(bundle.getBundleContext()).willReturn(bundleContext);
-
         final YangLibRestApp yangLibRestApp = new YangLibRestApp();
         final Set singleton = yangLibRestApp.getSingletons();
 
         assertTrue(singleton.contains(yangLibRestApp.getYangLibService()));
-
-        then(bundleContext).should(times(1))
-                .registerService(eq(YangLibRestAppService.class.getName()), eq(yangLibRestApp), eq(null));
     }
 }