<!--
  ~ Copyright 2016-present Open Networking Laboratory
  ~
  ~ Licensed under the Apache License, Version 2.0 (the "License");
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->
<scenario name="meta-apps"
          description="Openflow provider activate/deactivate test">


    <!-- Check initial state of openflow apps -->
    <group name="MetaAppInitialVerification">
        <sequential var="${OC#}" starts="MetaAppTest.FindOpenflowInitial-${#}" ends="MetaAppTest.CheckLldpProviderInitial-${#-1}">
            <step name="MetaAppTest.FindOpenflowInitial-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.openflow openflowAppInitial" />
            <step name="MetaAppTest.CheckOpenflowInitial-${#}" requires="MetaAppTest.FindOpenflowInitial-${#}"
                  exec="test '${openflowAppInitialState}' == 'active'"/>

            <step name="MetaAppTest.FindOpenflowBaseInitial-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.openflow-base openflowBaseInitial" />
            <step name="MetaAppTest.CheckOpenflowBaseInitial-${#}" requires="MetaAppTest.FindOpenflowBaseInitial-${#}"
                  exec="test '${openflowBaseInitialState}' == 'active'"/>

            <step name="MetaAppTest.FindHostProviderInitial-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.hostprovider hostProviderInitial" />
            <step name="MetaAppTest.CheckHostProviderInitial-${#}" requires="MetaAppTest.FindHostProviderInitial-${#}"
                  exec="test '${hostProviderInitialState}' == 'active'"/>

            <step name="MetaAppTest.FindLldpProviderInitial-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.lldpprovider lldpProviderInitial" />
            <step name="MetaAppTest.CheckLldpProviderInitial-${#}" requires="MetaAppTest.FindLldpProviderInitial-${#}"
                  exec="test '${lldpProviderInitialState}' == 'active'"/>
        </sequential>
    </group>

    <!-- Deactivate openflow meta app -->
    <step name="MetaAppTest.DeactivateOpenflowMetaApp" requires="MetaAppInitialVerification"
          exec="onos ${OCI} onos:app deactivate org.onosproject.openflow"/>

    <!-- Check that openflow apps are no longer active -->
    <group name="MetaAppInactive" requires="MetaAppTest.DeactivateOpenflowMetaApp,MetaAppInitialVerification">
        <sequential var="${OC#}" starts="MetaAppTest.FindOpenflowInactive-${#}" ends="MetaAppTest.CheckLldpProviderInactive-${#-1}">
            <step name="MetaAppTest.FindOpenflowInactive-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.openflow openflowAppInactive" />
            <step name="MetaAppTest.CheckOpenflowInactive-${#}" requires="^"
                  exec="test '${openflowAppInactiveState}' == 'inactive'"/>

            <step name="MetaAppTest.FindOpenflowBaseInactive-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.openflow-base openflowBaseInactive" />
            <step name="MetaAppTest.CheckOpenflowBaseInactive-${#}" requires="^"
                  exec="test '${openflowBaseInactiveState}' == 'inactive'"/>

            <step name="MetaAppTest.FindHostProviderInactive-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.hostprovider hostProviderInactive" />
            <step name="MetaAppTest.CheckHostProviderInactive-${#}" requires="^"
                  exec="test '${hostProviderInactiveState}' == 'inactive'"/>

            <step name="MetaAppTest.FindLldpProviderInactive-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.lldpprovider lldpProviderInactive" />
            <step name="MetaAppTest.CheckLldpProviderInactive-${#}" requires="^"
                  exec="test '${lldpProviderInactiveState}' == 'inactive'"/>
        </sequential>
    </group>

    <!-- Reactivate openflow meta app -->
    <step name="MetaAppTest.ReactivateOpenflowMetaApp" requires="MetaAppInactive"
          exec="onos ${OCI} onos:app activate org.onosproject.openflow"/>

    <!-- Check that openflow apps are now active again -->
    <group name="MetaAppReactivated" requires="MetaAppTest.ReactivateOpenflowMetaApp,MetaAppInactive,MetaAppInitialVerification">
        <sequential var="${OC#}" starts="MetaAppTest.FindOpenflowReactivated-${#}" ends="MetaAppTest.CheckLldpProviderRectivated-${#-1}">
            <step name="MetaAppTest.FindOpenflowReactivated-${#}"
                  exec="onos-find-app ${OC#} org.onosproject.openflow openflowAppReactivated" />
            <step name="MetaAppTest.CheckOpenflowReactivated-${#}" requires="^"
                  exec="test '${openflowAppReactivatedState}' == 'active'"/>

            <step name="MetaAppTest.FindOpenflowBaseReactivated-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.openflow-base openflowBaseReactivated" />
            <step name="MetaAppTest.CheckOpenflowBaseReactivated-${#}" requires="^"
                  exec="test '${openflowBaseReactivatedState}' == 'active'"/>

            <step name="MetaAppTest.FindHostProviderReactivated-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.hostprovider hostProviderReactivated" />
            <step name="MetaAppTest.CheckHostProviderReactivated-${#}" requires="^"
                  exec="test '${hostProviderReactivatedState}' == 'active'"/>

            <step name="MetaAppTest.FindLldpProviderReactivated-${#}" requires="^"
                  exec="onos-find-app ${OC#} org.onosproject.lldpprovider lldpProviderReactivated" />
            <step name="MetaAppTest.CheckLldpProviderReactivated-${#}" requires="^"
                  exec="test '${lldpProviderReactivatedState}' == 'active'"/>
        </sequential>
    </group>

</scenario>
