Merge "Fix bug when creating SRG termination points"
authorGuillaume Lambert <guillaume.lambert@orange.com>
Wed, 11 May 2022 07:02:48 +0000 (07:02 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 11 May 2022 07:02:48 +0000 (07:02 +0000)
lighty/src/main/assembly/resources/clean-start-controller.sh
lighty/src/main/java/io/lighty/controllers/tpce/Main.java
lighty/src/main/java/io/lighty/controllers/tpce/module/TransportPCEImpl.java
lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java
lighty/src/test/java/io/lighty/controllers/tpce/MaintTest.java
tests/transportpce_tests/tapi/test01_abstracted_topology.py [moved from tests/transportpce_tests/2.2.1/test10_tapi.py with 100% similarity]
tests/transportpce_tests/tapi/test02_full_topology.py [moved from tests/transportpce_tests/2.2.1/test13_tapi_full_multi_layer.py with 100% similarity]
tests/transportpce_tests/with_docker/test02_nbinotifications.py
tox.ini

index ad4926ddc42df34c97dfae4afc89f5c037ac02a8..89907be25460efee9a10184ae8a99751983ab803 100755 (executable)
@@ -27,10 +27,26 @@ if [ -z "$USE_ODL_ALT_AKKA_MGT_PORT" ]; then
 else
     AKKA_MGT_PORT=$USE_ODL_ALT_AKKA_MGT_PORT
 fi
+if [ -z "$OLM_TIMER1" ]; then
+    olmtimer1=3000
+else
+    olmtimer1=$OLM_TIMER1
+fi
+if [ -z "$OLM_TIMER2" ]; then
+    olmtimer2=2000
+else
+    olmtimer2=$OLM_TIMER2
+fi
+if [ -n "$INSTALL_NBINOTIFICATIONS" ]  && [ "$INSTALL_NBINOTIFICATIONS" = "True" ]; then
+    install_nbinotifications="-nbinotification"
+fi
+if [ -n "$INSTALL_TAPI" ]; then
+    install_tapi="-tapi"
+fi
 
 # generate appropriate configuration files
 cat config_template.json | sed -e "s/ODL_RESTCONF_PORT/$RESTCONF_PORT/" -e "s/ODL_WEBSOCKET_PORT/$WEBSOCKET_PORT/" >config.json
 cat akka-default_template.conf | sed -e "s/ODL_AKKA_PORT/$AKKA_PORT/" -e "s/ODL_AKKA_MGT_PORT/$AKKA_MGT_PORT/" >singlenode/akka-default.conf
 
 #start controller
-java -ms128m -mx512m -XX:MaxMetaspaceSize=128m -jar tpce.jar -restconf config.json -olmtimer1 3000 -olmtimer2 2000
+java -ms128m -mx512m -XX:MaxMetaspaceSize=128m -jar tpce.jar -restconf config.json $install_nbinotifications $install_tapi -olmtimer1 $olmtimer1 -olmtimer2 $olmtimer2
\ No newline at end of file
index 9215bc29fee36c0dfe42d5cd2e8a72db76763f7d..043f37f9657f7cfbc738100e8b24d3ce6ed91a6f 100644 (file)
@@ -47,6 +47,7 @@ public class Main {
 
     private static final String RESTCONF_OPTION_NAME = "restconf";
     private static final String NBINOTIFICATION_OPTION_NAME = "nbinotification";
+    private static final String TAPI_OPTION_NAME = "tapi";
     private static final String OLMTIMER1_OPTION_NAME = "olmtimer1";
     private static final String OLMTIMER2_OPTION_NAME = "olmtimer2";
 
@@ -55,11 +56,11 @@ public class Main {
     private ShutdownHook shutdownHook;
 
     public void start() {
-        start(null, false, null, null, false);
+        start(null, false, false, null, null, false);
     }
 
     @SuppressWarnings("checkstyle:Illegalcatch")
-    public void start(String restConfConfigurationFile, boolean activateNbiNotification,
+    public void start(String restConfConfigurationFile, boolean activateNbiNotification, boolean activateTapi,
                       String olmtimer1, String olmtimer2, boolean registerShutdownHook) {
         long startTime = System.nanoTime();
         TpceBanner.print();
@@ -85,7 +86,7 @@ public class Main {
             // 3. NETCONF SBP configuration
             NetconfConfiguration netconfSBPConfig = NetconfConfigUtils.createDefaultNetconfConfiguration();
             startLighty(singleNodeConfiguration, restConfConfig, netconfSBPConfig, registerShutdownHook,
-                    activateNbiNotification, olmtimer1, olmtimer2);
+                    activateNbiNotification, activateTapi, olmtimer1, olmtimer2);
             float duration = (System.nanoTime() - startTime) / 1_000_000f;
             LOG.info("lighty.io and RESTCONF-NETCONF started in {}ms", duration);
         } catch (ConfigurationException | ExecutionException | IOException e) {
@@ -115,11 +116,17 @@ public class Main {
                 .required(false)
                 .build();
         Option useNbiNotificationsOption = Option.builder(NBINOTIFICATION_OPTION_NAME)
-                .desc("Activate NBI notifications feature")
-                .argName(NBINOTIFICATION_OPTION_NAME)
-                .hasArg(false)
-                .required(false)
-                .build();
+            .desc("Activate NBI notifications feature")
+            .argName(NBINOTIFICATION_OPTION_NAME)
+            .hasArg(false)
+            .required(false)
+            .build();
+        Option useTapiOption = Option.builder(TAPI_OPTION_NAME)
+            .desc("Activate TAPI feature")
+            .argName(TAPI_OPTION_NAME)
+            .hasArg(false)
+            .required(false)
+            .build();
         Option olmTimer1Option = Option.builder(OLMTIMER1_OPTION_NAME)
                 .desc("OLM timer 1 value")
                 .argName(OLMTIMER1_OPTION_NAME)
@@ -135,6 +142,7 @@ public class Main {
         Options options = new Options();
         options.addOption(restconfFileOption);
         options.addOption(useNbiNotificationsOption);
+        options.addOption(useTapiOption);
         options.addOption(olmTimer1Option);
         options.addOption(olmTimer2Option);
         return options;
@@ -142,8 +150,8 @@ public class Main {
 
     private void startLighty(ControllerConfiguration controllerConfiguration,
             RestConfConfiguration restConfConfiguration, NetconfConfiguration netconfSBPConfiguration,
-            boolean registerShutdownHook, boolean activateNbiNotification, String olmtimer1, String olmtimer2)
-                    throws ConfigurationException, ExecutionException, InterruptedException {
+            boolean registerShutdownHook, boolean activateNbiNotification, boolean activateTapi, String olmtimer1,
+            String olmtimer2) throws ConfigurationException, ExecutionException, InterruptedException {
 
         // 1. initialize and start Lighty controller (MD-SAL, Controller, YangTools,
         // Akka)
@@ -172,7 +180,7 @@ public class Main {
 
         // 4. start TransportPCE beans
         TransportPCE transportPCE = new TransportPCEImpl(lightyController.getServices(), activateNbiNotification,
-            olmtimer1, olmtimer2);
+            activateTapi, olmtimer1, olmtimer2);
         transportPCE.start().get();
 
         // 5. Register shutdown hook for graceful shutdown.
@@ -192,10 +200,11 @@ public class Main {
             CommandLine commandLine = new DefaultParser().parse(options, args);
             String restConfConfigurationFile = commandLine.getOptionValue(RESTCONF_OPTION_NAME, null);
             boolean useNbiNotifications = commandLine.hasOption(NBINOTIFICATION_OPTION_NAME);
+            boolean useTapi = commandLine.hasOption(TAPI_OPTION_NAME);
             String olmtimer1 = commandLine.getOptionValue(OLMTIMER1_OPTION_NAME, null);
             String olmtimer2 = commandLine.getOptionValue(OLMTIMER2_OPTION_NAME, null);
             Main app = new Main();
-            app.start(restConfConfigurationFile, useNbiNotifications, olmtimer1, olmtimer2, true);
+            app.start(restConfConfigurationFile, useNbiNotifications, useTapi, olmtimer1, olmtimer2, true);
         } catch (ParseException e) {
             HelpFormatter formatter = new HelpFormatter();
             formatter.printHelp(
index 276940850bddb42f12e478f5083ff4c8755df50d..ef88bf77e81598a2dc3f74de3f7af0bf7b45c118 100644 (file)
@@ -115,10 +115,10 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
     private final OlmProvider olmProvider;
     // renderer beans
     private final RendererProvider rendererProvider;
-    // T-api
-    private final TapiProvider tapiProvider;
     // service-handler beans
     private final ServicehandlerProvider servicehandlerProvider;
+    // T-api
+    private TapiProvider tapiProvider;
     // nbi-notifications beans
     private NbiNotificationsProvider nbiNotificationsProvider;
     /**
@@ -128,7 +128,7 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
             "ServiceHandler", "RendererListener");
     private final List<String> publisherAlarmList = Arrays.asList("ServiceListener");
 
-    public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification,
+    public TransportPCEImpl(LightyServices lightyServices, boolean activateNbiNotification, boolean activateTapi,
                             String olmtimer1, String olmtimer2) {
         LOG.info("Initializing transaction providers ...");
         deviceTransactionManager = new DeviceTransactionManagerImpl(lightyServices.getBindingMountPointService(),
@@ -208,30 +208,31 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
                 lightyServices.getRpcProviderService(), lightyServices.getNotificationService(),
                 serviceDataStoreOperations, pceListenerImpl, serviceListener, rendererListenerImpl,
                 networkModelListenerImpl, servicehandler);
+        if (activateTapi) {
+            LOG.info("Creating tapi beans ...");
+            TapiLink tapiLink = new TapiLink(networkTransaction);
+            R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
+                deviceTransactionManager, tapiLink);
+            TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
+                    .getBindingDataBroker());
+            TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
+            TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
+                    .getBindingDataBroker());
+            TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
+                    networkTransaction, tapiLink);
+            TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
+                tapilinkDiscoveryImpl, networkTransaction, tapiLink);
+            TapiNetconfTopologyListener tapiNetConfTopologyListener =
+                    new TapiNetconfTopologyListener(tapiNetworkModelService);
+            TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
+            TapiPortMappingListener tapiPortMappingListener =
+                new TapiPortMappingListener(tapiNetworkModelService);
 
-        LOG.info("Creating tapi beans ...");
-        TapiLink tapiLink = new TapiLink(networkTransaction);
-        R2RTapiLinkDiscovery tapilinkDiscoveryImpl = new R2RTapiLinkDiscovery(networkTransaction,
-            deviceTransactionManager, tapiLink);
-        TapiRendererListenerImpl tapiRendererListenerImpl = new TapiRendererListenerImpl(lightyServices
-                .getBindingDataBroker());
-        TapiPceListenerImpl tapiPceListenerImpl = new TapiPceListenerImpl(lightyServices.getBindingDataBroker());
-        TapiServiceHandlerListenerImpl tapiServiceHandlerListener = new TapiServiceHandlerListenerImpl(lightyServices
-                .getBindingDataBroker());
-        TransportpceTapinetworkutilsService tapiNetworkutilsServiceImpl = new TapiNetworkUtilsImpl(
-                networkTransaction, tapiLink);
-        TapiNetworkModelService tapiNetworkModelService = new TapiNetworkModelServiceImpl(
-            tapilinkDiscoveryImpl, networkTransaction, tapiLink);
-        TapiNetconfTopologyListener tapiNetConfTopologyListener =
-                new TapiNetconfTopologyListener(tapiNetworkModelService);
-        TapiOrLinkListener orLinkListener = new TapiOrLinkListener(tapiLink, networkTransaction);
-        TapiPortMappingListener tapiPortMappingListener =
-            new TapiPortMappingListener(tapiNetworkModelService);
-
-        tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
-            tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
-            tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
-            orLinkListener);
+            tapiProvider = initTapi(lightyServices, servicehandler, networkTransaction, serviceDataStoreOperations,
+                tapiNetConfTopologyListener, tapiPortMappingListener, tapiNetworkutilsServiceImpl, tapiPceListenerImpl,
+                tapiRendererListenerImpl, tapiServiceHandlerListener, lightyServices.getNotificationService(),
+                orLinkListener);
+        }
         if (activateNbiNotification) {
             LOG.info("Creating nbi-notifications beans ...");
             nbiNotificationsProvider = new NbiNotificationsProvider(
@@ -252,8 +253,10 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
         rendererProvider.init();
         LOG.info("Initializing service-handler provider ...");
         servicehandlerProvider.init();
-        LOG.info("Initializing tapi provider ...");
-        tapiProvider.init();
+        if (tapiProvider != null) {
+            LOG.info("Initializing tapi provider ...");
+            tapiProvider.init();
+        }
         if (nbiNotificationsProvider != null) {
             LOG.info("Initializing nbi-notifications provider ...");
             nbiNotificationsProvider.init();
@@ -264,10 +267,14 @@ public class TransportPCEImpl extends AbstractLightyModule implements TransportP
 
     @Override
     protected boolean stopProcedure() {
-        nbiNotificationsProvider.close();
-        LOG.info("Shutting down nbi-notifications provider ...");
-        tapiProvider.close();
-        LOG.info("Shutting down service-handler provider ...");
+        if (nbiNotificationsProvider != null) {
+            nbiNotificationsProvider.close();
+            LOG.info("Shutting down nbi-notifications provider ...");
+        }
+        if (tapiProvider != null) {
+            tapiProvider.close();
+            LOG.info("Shutting down service-handler provider ...");
+        }
         servicehandlerProvider.close();
         LOG.info("Shutting down renderer provider ...");
         rendererProvider.close();
index 71a06a6bf44a47ee2c1f8e0081b825d038cea30f..1d0692dc8a6a642a0a2afd13764becfe2b982bc3 100644 (file)
@@ -256,22 +256,22 @@ public final class TPCEUtils {
             org.opendaylight.yang.gen.v1.http.org.openroadm.wavelength.map.rev191129.$YangModuleInfoImpl.getInstance(),
 
             // network models
-            org.opendaylight.yang.gen.v1.http.org.openroadm.amplifier.rev191129.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.amplifier.rev210924.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.clli.network.rev191129.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev200529.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.degree.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.external.pluggable.rev211210.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.link.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev211210.$YangModuleInfoImpl
                     .getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.$YangModuleInfoImpl
+            org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev211210.$YangModuleInfoImpl
                     .getInstance(),
             org.opendaylight.yang.gen.v1.http.org.openroadm.roadm.rev191129.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev200529.$YangModuleInfoImpl.getInstance(),
-            org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev200529.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.srg.rev211210.$YangModuleInfoImpl.getInstance(),
+            org.opendaylight.yang.gen.v1.http.org.openroadm.xponder.rev211210.$YangModuleInfoImpl.getInstance(),
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.$YangModuleInfoImpl
                     .getInstance(),
             org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.$YangModuleInfoImpl
index 872cb52050706e17fc6381076409d6f0b677350b..98abb12dba47b8404d92cd21e9e210b5fbb57593 100644 (file)
@@ -48,7 +48,7 @@ public class MaintTest {
 
     @Test
     public void startNoConfigFileTest() throws Exception {
-        main.start(null, false, "3000", "2000", true);
+        main.start(null, false, false, "3000", "2000", true);
         ContentResponse response = client.GET("http://localhost:8181/restconf/config/ietf-network:networks/network/openroadm-topology");
         assertEquals("Response code should be 200", 200, response.getStatus());
     }
@@ -56,7 +56,7 @@ public class MaintTest {
     @Test
     public void startConfigFileTest() throws Exception {
         File configFile = new File("src/test/resources/config.json");
-        main.start(configFile.getAbsolutePath(), false, "3000", "2000", true);
+        main.start(configFile.getAbsolutePath(), false, false, "3000", "2000", true);
         ContentResponse response = client.GET("http://localhost:8888/restconfCustom/config/ietf-network:networks/network/openroadm-topology");
         assertEquals("Response code should be 200", 200, response.getStatus());
     }
index 8164f84030cef12498f39b018feda2a14475d413..c1436658fb98a7870cc6bb932de792cebb7fbf8e 100644 (file)
@@ -41,36 +41,8 @@ class TransportNbiNotificationstesting(unittest.TestCase):
             "node-id": "XPDR-A1",
             "service-format": "Ethernet",
             "clli": "SNJSCAMCJP8",
-            "tx-direction": {
-                "port": {
-                    "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
-                    "port-type": "router",
-                    "port-name": "Gigabit Ethernet_Tx.ge-5/0/0.0",
-                    "port-rack": "000000.00",
-                    "port-shelf": "00"
-                },
-                "lgx": {
-                    "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
-                    "lgx-port-name": "LGX Back.3",
-                    "lgx-port-rack": "000000.00",
-                    "lgx-port-shelf": "00"
-                }
-            },
-            "rx-direction": {
-                "port": {
-                    "port-device-name": "ROUTER_SNJSCAMCJP8_000000.00_00",
-                    "port-type": "router",
-                    "port-name": "Gigabit Ethernet_Rx.ge-5/0/0.0",
-                    "port-rack": "000000.00",
-                    "port-shelf": "00"
-                },
-                "lgx": {
-                    "lgx-device-name": "LGX Panel_SNJSCAMCJP8_000000.00_00",
-                    "lgx-port-name": "LGX Back.4",
-                    "lgx-port-rack": "000000.00",
-                    "lgx-port-shelf": "00"
-                }
-            },
+            "tx-direction": [{"index": 0}],
+            "rx-direction": [{"index": 0}],
             "optic-type": "gray"
         },
         "service-z-end": {
@@ -78,36 +50,8 @@ class TransportNbiNotificationstesting(unittest.TestCase):
             "node-id": "XPDR-C1",
             "service-format": "Ethernet",
             "clli": "SNJSCAMCJT4",
-            "tx-direction": {
-                "port": {
-                    "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
-                    "port-type": "router",
-                    "port-name": "Gigabit Ethernet_Tx.ge-1/0/0.0",
-                    "port-rack": "000000.00",
-                    "port-shelf": "00"
-                },
-                "lgx": {
-                    "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
-                    "lgx-port-name": "LGX Back.29",
-                    "lgx-port-rack": "000000.00",
-                    "lgx-port-shelf": "00"
-                }
-            },
-            "rx-direction": {
-                "port": {
-                    "port-device-name": "ROUTER_SNJSCAMCJT4_000000.00_00",
-                    "port-type": "router",
-                    "port-name": "Gigabit Ethernet_Rx.ge-1/0/0.0",
-                    "port-rack": "000000.00",
-                    "port-shelf": "00"
-                },
-                "lgx": {
-                    "lgx-device-name": "LGX Panel_SNJSCAMCJT4_000000.00_00",
-                    "lgx-port-name": "LGX Back.30",
-                    "lgx-port-rack": "000000.00",
-                    "lgx-port-shelf": "00"
-                }
-            },
+            "tx-direction": [{"index": 0}],
+            "rx-direction": [{"index": 0}],
             "optic-type": "gray"
         },
         "due-date": "2016-11-28T00:00:01Z",
diff --git a/tox.ini b/tox.ini
index 9ace40a82de857e53155c6ea7eb2d61badf100e2..d2936ac2b4d4324119a67dfc9a6748b815633468 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -2,7 +2,7 @@
 minversion = 3.7.0
 envlist = buildcontroller,testsPCE,
     sims121,build_karaf_tests121,tests121,
-    sims221,build_karaf_tests221,tests221,
+    sims221,build_karaf_tests221,tests221,tests_tapi,
     sims71,build_karaf_tests71,tests71,
     build_karaf_tests_hybrid,tests_hybrid,
     docs
@@ -144,7 +144,7 @@ commands =
   ./build_karaf_for_tests.sh
 
 [testenv:tests71]
-depends = buildcontroller,build_karaf_tests71,sims71
+depends = buildcontroller,build_karaf_tests71,sims71,tests_tapi
 whitelist_externals = launch_tests.sh
 passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION
 setenv =
@@ -168,7 +168,7 @@ commands =
   ./build_karaf_for_tests.sh
 
 [testenv:tests_hybrid]
-depends = buildcontroller,sims121,sims221,sims71,tests121,tests221,tests71
+depends = buildcontroller,build_karaf_tests_hybrid,sims121,sims221,sims71,tests121,tests221,tests71
 #the last dependency is to avoid temporarily concurrent ressources problem in parallel mode
 whitelist_externals = launch_tests.sh
 passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION
@@ -180,6 +180,22 @@ commands =
 #  nosetests --with-xunit transportpce_tests/hybrid/test01_device_change_notifications.py
   ./launch_tests.sh hybrid {posargs:}
 
+[testenv:tests_tapi]
+depends = buildcontroller,build_karaf_tests221,sims221
+whitelist_externals = launch_tests.sh
+passenv = LAUNCHER USE_LIGHTY OLM_TIMER1 OLM_TIMER2 USE_ODL_RESTCONF_VERSION
+setenv =
+#   USE_LIGHTY=True
+    USE_ODL_RESTCONF_VERSION=draft-bierman02
+    USE_ODL_ALT_KARAF_ENV=./karaf221.env
+    USE_ODL_ALT_KARAF_INSTALL_DIR=karaf221
+    INSTALL_TAPI=True
+    OLM_TIMER1=3000
+    OLM_TIMER2=2000
+
+commands =
+  ./launch_tests.sh tapi {posargs:}
+
 [testenv:nbinotifications]
 depends = buildcontroller,sims221
 whitelist_externals = launch_tests.sh
@@ -188,6 +204,7 @@ passenv = LAUNCHER USE_LIGHTY USE_ODL_RESTCONF_VERSION OLM_TIMER1 OLM_TIMER2
 setenv =
     OLM_TIMER1=3000
     OLM_TIMER2=2000
+    INSTALL_NBINOTIFICATIONS=True
 
 commands =
   ./dockercmd.sh run -d -p 2181:2181 -p 9092:9092 --env ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 --name tpce_kafka1 teivah/kafka:2.0.0