diff mbox series

[ovs-dev,v4] multinode: Adding multinode ovn-ic test.

Message ID 20241022183342.105084-1-tiago.pires@luizalabs.com
State Changes Requested
Headers show
Series [ovs-dev,v4] multinode: Adding multinode ovn-ic test. | expand

Checks

Context Check Description
ovsrobot/apply-robot success apply and check: success
ovsrobot/github-robot-_Build_and_Test success github build: passed
ovsrobot/github-robot-_ovn-kubernetes success github build: passed

Commit Message

Tiago Pires Oct. 22, 2024, 6:33 p.m. UTC
This commit add a new ovn-ic test for the ovn-fake-multinode with 3 AZs
testing IPv4/IPv6 connectivity between them.

Signed-off-by: Tiago Pires <tiago.pires@luizalabs.com>
---
 tests/multinode-macros.at |  80 +++++++++++++++++++++
 tests/multinode.at        | 141 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 221 insertions(+)

Comments

Dumitru Ceara Dec. 6, 2024, 3:05 p.m. UTC | #1
On 10/22/24 8:33 PM, Tiago Pires via dev wrote:
> This commit add a new ovn-ic test for the ovn-fake-multinode with 3 AZs
> testing IPv4/IPv6 connectivity between them.
> 
> Signed-off-by: Tiago Pires <tiago.pires@luizalabs.com>
> ---

Hi Tiago,

Sorry for the delay in reviewing this.

>  tests/multinode-macros.at |  80 +++++++++++++++++++++
>  tests/multinode.at        | 141 ++++++++++++++++++++++++++++++++++++++
>  2 files changed, 221 insertions(+)
> 
> diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at
> index 5b171885e..cafb9d967 100644
> --- a/tests/multinode-macros.at
> +++ b/tests/multinode-macros.at
> @@ -54,6 +54,7 @@ m_central_as () {
>  }
>  
>  check_fake_multinode_setup() {
> +    skip_fake_node_multi_az_setup
>      check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
>      AT_CHECK([m_as ovn-chassis-1 ovn-appctl -t ovn-controller version], [0], [ignore])
>      AT_CHECK([m_as ovn-chassis-2 ovn-appctl -t ovn-controller version], [0], [ignore])
> @@ -189,4 +190,83 @@ m_wait_for_ports_up() {
>      fi
>  }
>  
> +skip_fake_node_multi_az_setup() {
> +    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> +    if [[ $? == 0 ]] ; then
> +        AT_CHECK([exit 77])

It took me some searching but I guess this is because of:
https://www.gnu.org/software/autoconf/manual/autoconf-2.66/html_node/Writing-Testsuites.html

"
— Macro: AT_SKIP_IF (shell-condition)

Determine whether the test should be skipped because it requires
features that are unsupported on the machine under test. shell-condition
is a shell expression such as a test command. Tests before AT_SKIP_IF
will be executed and may still cause the test group to fail. You can
instantiate this macro many times from within the same test group.

You should use this macro only for very simple skip conditions. If the
shell-condition could emit any kind of output you should instead use
AT_CHECK like

AT_CHECK([if shell-condition; then exit 77; fi])

so that such output is properly recorded in the testsuite.log file."

> +    fi
> +}
> +
> +check_fake_node_multi_az_setup() {
> +    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> +    if [[ $? != 0 ]] ; then
> +        AT_CHECK([exit 77])
> +    fi
> +
> +    # Check if the fake multinode setup is using SSL, it will
> +    # skip if it is enabled. The cleanup will break the setup,
> +    # so it is recommended to use without SSL in order to
> +    # test the OVN IC with fake multinode setup.
> +    m_as ovn-chassis-1 ovs-vsctl list open | grep "ssl:"
> +    if [[ $? == 0 ]] ; then
> +        AT_CHECK([exit 77])
> +    fi
> +}
> +
> +check_fake_multinode_setup_by_az() {
> +    check_fake_node_multi_az_setup
> +
> +    m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
> +    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
> +    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync

Should we prepend these 3 commands with "check "?

> +
> +    for c in $1
> +    do
> +        m_as $c ovn-appctl -t ovn-controller version
> +    done
> +}
> +
> +cleanup_multinode_resources_by_az() {
> +    check_fake_node_multi_az_setup
> +    m_as ovn-central-az1-1 rm -f /etc/ovn/ovnnb_db.db
> +    m_as ovn-central-az1-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> +    m_as ovn-central-az2-1 rm -f /etc/ovn/ovnnb_db.db
> +    m_as ovn-central-az2-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> +    m_as ovn-central-az3-1 rm -f /etc/ovn/ovnnb_db.db
> +    m_as ovn-central-az3-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> +    check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
> +    check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
> +    check m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> +
> +    for c in $1
> +    do
> +        m_as $c ovs-vsctl del-br br-int
> +        m_as $c ip --all netns delete

Maybe also prepend check here?

> +    done
> +}
> +
> +configure_multinode_az() {
> +    # Configure OVN IC by AZ
> +    check m_as ovn-central-az1-1 ovn-nbctl set-connection ptcp:6641
> +    check m_as ovn-central-az1-1 ovn-sbctl set-connection ptcp:6642
> +    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . name=ovn-central-az1-1
> +    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> +                            options:ic-route-learn=true
> +    check m_as ovn-central-az2-1 ovn-nbctl set-connection ptcp:6641
> +    check m_as ovn-central-az2-1 ovn-sbctl set-connection ptcp:6642
> +    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . name=ovn-central-az2-1
> +    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> +                            options:ic-route-learn=true
> +    check m_as ovn-central-az3-1 ovn-nbctl set-connection ptcp:6641
> +    check m_as ovn-central-az3-1 ovn-sbctl set-connection ptcp:6642
> +    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . name=ovn-central-az3-1
> +    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> +                            options:ic-route-learn=true
> +
> +    # Configure OVN IC Gateway
> +    check m_as ovn-gw-1 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> +    check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> +    check m_as ovn-gw-3 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> +}
> +
>  OVS_END_SHELL_HELPERS
> diff --git a/tests/multinode.at b/tests/multinode.at
> index 408e1118d..c43255c89 100644
> --- a/tests/multinode.at
> +++ b/tests/multinode.at
> @@ -1591,3 +1591,144 @@ AT_CHECK([cat ch1_eth2.tcpdump], [0], [dnl
>  ])
>  
>  AT_CLEANUP
> +
> +AT_SETUP([ovn multinode - ovn-ic - inter-AZ IPv4/IPv6])

This test gets skipped in CI:

ovn multinode - ovn-ic - inter-AZ IPv4/IPv6     skipped
(multinode-macros.at:239)

> +
> +# Check that ovn-fake-multinode setup is up and running - requires additional nodes
> +check_fake_multinode_setup_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
> +
> +# Delete the multinode NB and OVS resources before starting the test.
> +cleanup_multinode_resources_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
> +
> +# Configure OVN IC by AZ
> +configure_multinode_az
> +
> +# Test Inter-AZ routing
> +
> +# Create the Transit Switch
> +m_as ovn-central-az1-1 ovn-ic-nbctl ts-add ts-1
> +
> +# AZ1 - Create one logical switch with one port
> +check m_as ovn-central-az1-1 ovn-nbctl ls-add sw1-az1
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-port1
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-port1 "40:54:00:00:01:01 10.0.1.3 2001::3"
> +
> +# AZ1 - Create a logical router and attach the logical switch
> +check m_as ovn-central-az1-1 ovn-nbctl lr-add lr1
> +check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-sw1-az1 00:00:00:00:ff:01 10.0.1.1/24 2001::1/64
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-lr1
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-type sw1-az1-lr1 router
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-lr1 router
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-options sw1-az1-lr1 router-port=lr1-sw1-az1
> +
> +# AZ1 - Create the LRP, LSP and interconnect to the Transit Switch
> +check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-ts-1 00:00:00:00:00:01 169.254.251.1/24 fe80:10::1/64
> +check m_as ovn-central-az1-1 ovn-nbctl lrp-set-gateway-chassis lr1-ts-1 ovn-gw-1
> +check m_as ovn-central-az1-1 ovn-nbctl lsp-add ts-1 lr1-lsp1 -- \
> +    lsp-set-addresses lr1-lsp1 router -- \
> +    lsp-set-type lr1-lsp1 router -- \
> +    lsp-set-options lr1-lsp1 router-port=lr1-ts-1
> +
> +m_as ovn-chassis-1 ip link del sw1-az1-p1-p
> +m_as ovn-chassis-1 /data/create_fake_vm.sh sw1-az1-port1 sw1-az1-p1 40:54:00:00:01:01 1342 10.0.1.3 24 10.0.1.1 2001::3/64 2001::1
> +
> +# AZ2 - Create one logical switch with one port
> +check m_as ovn-central-az2-1 ovn-nbctl ls-add sw1-az2
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-port1
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-port1 "40:54:00:00:02:01 10.0.2.3 2002::3"
> +
> +# AZ2 - Create a logical router and attach the logical switch
> +check m_as ovn-central-az2-1 ovn-nbctl lr-add lr2
> +check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-sw1-az2 00:00:00:00:ff:02 10.0.2.1/24 2002::1/64
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-lr2
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-type sw1-az2-lr2 router
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-lr2 router
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-options sw1-az2-lr2 router-port=lr2-sw1-az2
> +
> +# AZ2 - Create the LRP, LSP and interconnect to the Transit Switch
> +check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-ts-1 00:00:00:00:00:02 169.254.251.2/24 fe80:10::2/64
> +check m_as ovn-central-az2-1 ovn-nbctl lrp-set-gateway-chassis lr2-ts-1 ovn-gw-2
> +check m_as ovn-central-az2-1 ovn-nbctl lsp-add ts-1 lr2-lsp1 -- \
> +    lsp-set-addresses lr2-lsp1 router -- \
> +    lsp-set-type lr2-lsp1 router -- \
> +    lsp-set-options lr2-lsp1 router-port=lr2-ts-1
> +
> +m_as ovn-chassis-2 ip link del sw1-az2-p1-p
> +m_as ovn-chassis-2 /data/create_fake_vm.sh sw1-az2-port1 sw1-az2-p1 40:54:00:00:02:01 1342 10.0.2.3 24 10.0.2.1 2002::3/64 2002::1
> +
> +# AZ3 - Create one logical switch with one port
> +check m_as ovn-central-az3-1 ovn-nbctl ls-add sw1-az3
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-port1
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-port1 "40:54:00:00:03:01 10.0.3.3 2003::3"
> +
> +# AZ3 - Create a logical router and attach the logical switch
> +check m_as ovn-central-az3-1 ovn-nbctl lr-add lr3
> +check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-sw1-az3 00:00:00:00:ff:03 10.0.3.1/24 2003::1/64
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-lr3
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-type sw1-az3-lr3 router
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-lr3 router
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-options sw1-az3-lr3 router-port=lr3-sw1-az3
> +
> +# AZ3 - Create the LRP, LSP and interconnect to the Transit Switch
> +check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-ts-1 00:00:00:00:00:03 169.254.251.3/24 fe80:10::3/64
> +check m_as ovn-central-az3-1 ovn-nbctl lrp-set-gateway-chassis lr3-ts-1 ovn-gw-3
> +check m_as ovn-central-az3-1 ovn-nbctl lsp-add ts-1 lr3-lsp1 -- \
> +    lsp-set-addresses lr3-lsp1 router -- \
> +    lsp-set-type lr3-lsp1 router -- \
> +    lsp-set-options lr3-lsp1 router-port=lr3-ts-1
> +
> +m_as ovn-chassis-1 ip link del sw1-az3-p1-p
> +m_as ovn-chassis-3 /data/create_fake_vm.sh sw1-az3-port1 sw1-az3-p1 40:54:00:00:03:01 1342 10.0.3.3 24 10.0.3.1 2003::3/64 2003::1
> +
> +# Test routes from lr2 and lr3 were learned to lr1
> +AT_CHECK([m_as ovn-central-az1-1 ovn-nbctl lr-route-list lr1 |
> +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> +10.0.2.0/24 169.254.251.2
> +10.0.3.0/24 169.254.251.3
> +2002::/64 fe80:10::2
> +2003::/64 fe80:10::3
> +])
> +
> +# Test routes from lr1 and lr3 were learned to lr2
> +AT_CHECK([m_as ovn-central-az2-1 ovn-nbctl lr-route-list lr2 |
> +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> +10.0.1.0/24 169.254.251.1
> +10.0.3.0/24 169.254.251.3
> +2001::/64 fe80:10::1
> +2003::/64 fe80:10::3
> +])
> +
> +# Test routes from lr1 and lr2 were learned to lr3
> +AT_CHECK([m_as ovn-central-az3-1 ovn-nbctl lr-route-list lr3 |
> +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> +10.0.1.0/24 169.254.251.1
> +10.0.2.0/24 169.254.251.2
> +2001::/64 fe80:10::1
> +2002::/64 fe80:10::2
> +])
> +
> +# Ping IPv4 test Inter-AZ - AZ1 vs AZ2
> +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.2.3 | FORMAT_PING], \
> +[0], [dnl
> +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> +])
> +
> +# Ping IPv4 test Inter-AZ - AZ1 vs AZ3
> +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.3.3 | FORMAT_PING], \
> +[0], [dnl
> +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> +])
> +
> +# Ping IPv6 test Inter-AZ - AZ1 vs AZ2
> +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2002::3 | FORMAT_PING], \
> +[0], [dnl
> +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> +])
> +
> +# Ping IPv6 test Inter-AZ - AZ1 vs AZ3
> +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2003::3 | FORMAT_PING], \
> +[0], [dnl
> +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> +])
> +
> +AT_CLEANUP

Regards,
Dumitru
Tiago Pires Jan. 16, 2025, 8:10 p.m. UTC | #2
Hi,

Sorry for the late reply.

On Fri, Dec 6, 2024 at 12:05 PM Dumitru Ceara <dceara@redhat.com> wrote:
>
> On 10/22/24 8:33 PM, Tiago Pires via dev wrote:
> > This commit add a new ovn-ic test for the ovn-fake-multinode with 3 AZs
> > testing IPv4/IPv6 connectivity between them.
> >
> > Signed-off-by: Tiago Pires <tiago.pires@luizalabs.com>
> > ---
>
> Hi Tiago,
>
> Sorry for the delay in reviewing this.
>
> >  tests/multinode-macros.at |  80 +++++++++++++++++++++
> >  tests/multinode.at        | 141 ++++++++++++++++++++++++++++++++++++++
> >  2 files changed, 221 insertions(+)
> >
> > diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at
> > index 5b171885e..cafb9d967 100644
> > --- a/tests/multinode-macros.at
> > +++ b/tests/multinode-macros.at
> > @@ -54,6 +54,7 @@ m_central_as () {
> >  }
> >
> >  check_fake_multinode_setup() {
> > +    skip_fake_node_multi_az_setup
> >      check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
> >      AT_CHECK([m_as ovn-chassis-1 ovn-appctl -t ovn-controller version], [0], [ignore])
> >      AT_CHECK([m_as ovn-chassis-2 ovn-appctl -t ovn-controller version], [0], [ignore])
> > @@ -189,4 +190,83 @@ m_wait_for_ports_up() {
> >      fi
> >  }
> >
> > +skip_fake_node_multi_az_setup() {
> > +    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> > +    if [[ $? == 0 ]] ; then
> > +        AT_CHECK([exit 77])
>
> It took me some searching but I guess this is because of:
> https://www.gnu.org/software/autoconf/manual/autoconf-2.66/html_node/Writing-Testsuites.html
>
> "
> — Macro: AT_SKIP_IF (shell-condition)
>
> Determine whether the test should be skipped because it requires
> features that are unsupported on the machine under test. shell-condition
> is a shell expression such as a test command. Tests before AT_SKIP_IF
> will be executed and may still cause the test group to fail. You can
> instantiate this macro many times from within the same test group.
>
> You should use this macro only for very simple skip conditions. If the
> shell-condition could emit any kind of output you should instead use
> AT_CHECK like
>
> AT_CHECK([if shell-condition; then exit 77; fi])
>
> so that such output is properly recorded in the testsuite.log file."
>
> > +    fi
> > +}
> > +
> > +check_fake_node_multi_az_setup() {
> > +    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> > +    if [[ $? != 0 ]] ; then
> > +        AT_CHECK([exit 77])
> > +    fi
> > +
> > +    # Check if the fake multinode setup is using SSL, it will
> > +    # skip if it is enabled. The cleanup will break the setup,
> > +    # so it is recommended to use without SSL in order to
> > +    # test the OVN IC with fake multinode setup.
> > +    m_as ovn-chassis-1 ovs-vsctl list open | grep "ssl:"
> > +    if [[ $? == 0 ]] ; then
> > +        AT_CHECK([exit 77])
> > +    fi
> > +}
> > +
> > +check_fake_multinode_setup_by_az() {
> > +    check_fake_node_multi_az_setup
> > +
> > +    m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
> > +    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
> > +    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
>
> Should we prepend these 3 commands with "check "?
>
I will propose a new version and fix it!
> > +
> > +    for c in $1
> > +    do
> > +        m_as $c ovn-appctl -t ovn-controller version
> > +    done
> > +}
> > +
> > +cleanup_multinode_resources_by_az() {
> > +    check_fake_node_multi_az_setup
> > +    m_as ovn-central-az1-1 rm -f /etc/ovn/ovnnb_db.db
> > +    m_as ovn-central-az1-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> > +    m_as ovn-central-az2-1 rm -f /etc/ovn/ovnnb_db.db
> > +    m_as ovn-central-az2-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> > +    m_as ovn-central-az3-1 rm -f /etc/ovn/ovnnb_db.db
> > +    m_as ovn-central-az3-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
> > +    check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
> > +    check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
> > +    check m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
> > +
> > +    for c in $1
> > +    do
> > +        m_as $c ovs-vsctl del-br br-int
> > +        m_as $c ip --all netns delete
>
> Maybe also prepend check here?
>
I will propose a new version and fix it!
> > +    done
> > +}
> > +
> > +configure_multinode_az() {
> > +    # Configure OVN IC by AZ
> > +    check m_as ovn-central-az1-1 ovn-nbctl set-connection ptcp:6641
> > +    check m_as ovn-central-az1-1 ovn-sbctl set-connection ptcp:6642
> > +    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . name=ovn-central-az1-1
> > +    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> > +                            options:ic-route-learn=true
> > +    check m_as ovn-central-az2-1 ovn-nbctl set-connection ptcp:6641
> > +    check m_as ovn-central-az2-1 ovn-sbctl set-connection ptcp:6642
> > +    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . name=ovn-central-az2-1
> > +    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> > +                            options:ic-route-learn=true
> > +    check m_as ovn-central-az3-1 ovn-nbctl set-connection ptcp:6641
> > +    check m_as ovn-central-az3-1 ovn-sbctl set-connection ptcp:6642
> > +    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . name=ovn-central-az3-1
> > +    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
> > +                            options:ic-route-learn=true
> > +
> > +    # Configure OVN IC Gateway
> > +    check m_as ovn-gw-1 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> > +    check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> > +    check m_as ovn-gw-3 ovs-vsctl set open . external-ids:ovn-is-interconn=true
> > +}
> > +
> >  OVS_END_SHELL_HELPERS
> > diff --git a/tests/multinode.at b/tests/multinode.at
> > index 408e1118d..c43255c89 100644
> > --- a/tests/multinode.at
> > +++ b/tests/multinode.at
> > @@ -1591,3 +1591,144 @@ AT_CHECK([cat ch1_eth2.tcpdump], [0], [dnl
> >  ])
> >
> >  AT_CLEANUP
> > +
> > +AT_SETUP([ovn multinode - ovn-ic - inter-AZ IPv4/IPv6])
>
> This test gets skipped in CI:
>
> ovn multinode - ovn-ic - inter-AZ IPv4/IPv6     skipped
> (multinode-macros.at:239)
>
That is intentional, the CI will need to create the ovn-ic setup,
maybe we can add it to the CI.
> > +
> > +# Check that ovn-fake-multinode setup is up and running - requires additional nodes
> > +check_fake_multinode_setup_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
> > +
> > +# Delete the multinode NB and OVS resources before starting the test.
> > +cleanup_multinode_resources_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
> > +
> > +# Configure OVN IC by AZ
> > +configure_multinode_az
> > +
> > +# Test Inter-AZ routing
> > +
> > +# Create the Transit Switch
> > +m_as ovn-central-az1-1 ovn-ic-nbctl ts-add ts-1
> > +
> > +# AZ1 - Create one logical switch with one port
> > +check m_as ovn-central-az1-1 ovn-nbctl ls-add sw1-az1
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-port1
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-port1 "40:54:00:00:01:01 10.0.1.3 2001::3"
> > +
> > +# AZ1 - Create a logical router and attach the logical switch
> > +check m_as ovn-central-az1-1 ovn-nbctl lr-add lr1
> > +check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-sw1-az1 00:00:00:00:ff:01 10.0.1.1/24 2001::1/64
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-lr1
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-type sw1-az1-lr1 router
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-lr1 router
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-set-options sw1-az1-lr1 router-port=lr1-sw1-az1
> > +
> > +# AZ1 - Create the LRP, LSP and interconnect to the Transit Switch
> > +check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-ts-1 00:00:00:00:00:01 169.254.251.1/24 fe80:10::1/64
> > +check m_as ovn-central-az1-1 ovn-nbctl lrp-set-gateway-chassis lr1-ts-1 ovn-gw-1
> > +check m_as ovn-central-az1-1 ovn-nbctl lsp-add ts-1 lr1-lsp1 -- \
> > +    lsp-set-addresses lr1-lsp1 router -- \
> > +    lsp-set-type lr1-lsp1 router -- \
> > +    lsp-set-options lr1-lsp1 router-port=lr1-ts-1
> > +
> > +m_as ovn-chassis-1 ip link del sw1-az1-p1-p
> > +m_as ovn-chassis-1 /data/create_fake_vm.sh sw1-az1-port1 sw1-az1-p1 40:54:00:00:01:01 1342 10.0.1.3 24 10.0.1.1 2001::3/64 2001::1
> > +
> > +# AZ2 - Create one logical switch with one port
> > +check m_as ovn-central-az2-1 ovn-nbctl ls-add sw1-az2
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-port1
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-port1 "40:54:00:00:02:01 10.0.2.3 2002::3"
> > +
> > +# AZ2 - Create a logical router and attach the logical switch
> > +check m_as ovn-central-az2-1 ovn-nbctl lr-add lr2
> > +check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-sw1-az2 00:00:00:00:ff:02 10.0.2.1/24 2002::1/64
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-lr2
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-type sw1-az2-lr2 router
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-lr2 router
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-set-options sw1-az2-lr2 router-port=lr2-sw1-az2
> > +
> > +# AZ2 - Create the LRP, LSP and interconnect to the Transit Switch
> > +check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-ts-1 00:00:00:00:00:02 169.254.251.2/24 fe80:10::2/64
> > +check m_as ovn-central-az2-1 ovn-nbctl lrp-set-gateway-chassis lr2-ts-1 ovn-gw-2
> > +check m_as ovn-central-az2-1 ovn-nbctl lsp-add ts-1 lr2-lsp1 -- \
> > +    lsp-set-addresses lr2-lsp1 router -- \
> > +    lsp-set-type lr2-lsp1 router -- \
> > +    lsp-set-options lr2-lsp1 router-port=lr2-ts-1
> > +
> > +m_as ovn-chassis-2 ip link del sw1-az2-p1-p
> > +m_as ovn-chassis-2 /data/create_fake_vm.sh sw1-az2-port1 sw1-az2-p1 40:54:00:00:02:01 1342 10.0.2.3 24 10.0.2.1 2002::3/64 2002::1
> > +
> > +# AZ3 - Create one logical switch with one port
> > +check m_as ovn-central-az3-1 ovn-nbctl ls-add sw1-az3
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-port1
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-port1 "40:54:00:00:03:01 10.0.3.3 2003::3"
> > +
> > +# AZ3 - Create a logical router and attach the logical switch
> > +check m_as ovn-central-az3-1 ovn-nbctl lr-add lr3
> > +check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-sw1-az3 00:00:00:00:ff:03 10.0.3.1/24 2003::1/64
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-lr3
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-type sw1-az3-lr3 router
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-lr3 router
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-set-options sw1-az3-lr3 router-port=lr3-sw1-az3
> > +
> > +# AZ3 - Create the LRP, LSP and interconnect to the Transit Switch
> > +check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-ts-1 00:00:00:00:00:03 169.254.251.3/24 fe80:10::3/64
> > +check m_as ovn-central-az3-1 ovn-nbctl lrp-set-gateway-chassis lr3-ts-1 ovn-gw-3
> > +check m_as ovn-central-az3-1 ovn-nbctl lsp-add ts-1 lr3-lsp1 -- \
> > +    lsp-set-addresses lr3-lsp1 router -- \
> > +    lsp-set-type lr3-lsp1 router -- \
> > +    lsp-set-options lr3-lsp1 router-port=lr3-ts-1
> > +
> > +m_as ovn-chassis-1 ip link del sw1-az3-p1-p
> > +m_as ovn-chassis-3 /data/create_fake_vm.sh sw1-az3-port1 sw1-az3-p1 40:54:00:00:03:01 1342 10.0.3.3 24 10.0.3.1 2003::3/64 2003::1
> > +
> > +# Test routes from lr2 and lr3 were learned to lr1
> > +AT_CHECK([m_as ovn-central-az1-1 ovn-nbctl lr-route-list lr1 |
> > +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> > +10.0.2.0/24 169.254.251.2
> > +10.0.3.0/24 169.254.251.3
> > +2002::/64 fe80:10::2
> > +2003::/64 fe80:10::3
> > +])
> > +
> > +# Test routes from lr1 and lr3 were learned to lr2
> > +AT_CHECK([m_as ovn-central-az2-1 ovn-nbctl lr-route-list lr2 |
> > +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> > +10.0.1.0/24 169.254.251.1
> > +10.0.3.0/24 169.254.251.3
> > +2001::/64 fe80:10::1
> > +2003::/64 fe80:10::3
> > +])
> > +
> > +# Test routes from lr1 and lr2 were learned to lr3
> > +AT_CHECK([m_as ovn-central-az3-1 ovn-nbctl lr-route-list lr3 |
> > +             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
> > +10.0.1.0/24 169.254.251.1
> > +10.0.2.0/24 169.254.251.2
> > +2001::/64 fe80:10::1
> > +2002::/64 fe80:10::2
> > +])
> > +
> > +# Ping IPv4 test Inter-AZ - AZ1 vs AZ2
> > +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.2.3 | FORMAT_PING], \
> > +[0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +# Ping IPv4 test Inter-AZ - AZ1 vs AZ3
> > +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.3.3 | FORMAT_PING], \
> > +[0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +# Ping IPv6 test Inter-AZ - AZ1 vs AZ2
> > +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2002::3 | FORMAT_PING], \
> > +[0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +# Ping IPv6 test Inter-AZ - AZ1 vs AZ3
> > +M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2003::3 | FORMAT_PING], \
> > +[0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +AT_CLEANUP
>
> Regards,
> Dumitru
>
diff mbox series

Patch

diff --git a/tests/multinode-macros.at b/tests/multinode-macros.at
index 5b171885e..cafb9d967 100644
--- a/tests/multinode-macros.at
+++ b/tests/multinode-macros.at
@@ -54,6 +54,7 @@  m_central_as () {
 }
 
 check_fake_multinode_setup() {
+    skip_fake_node_multi_az_setup
     check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
     AT_CHECK([m_as ovn-chassis-1 ovn-appctl -t ovn-controller version], [0], [ignore])
     AT_CHECK([m_as ovn-chassis-2 ovn-appctl -t ovn-controller version], [0], [ignore])
@@ -189,4 +190,83 @@  m_wait_for_ports_up() {
     fi
 }
 
+skip_fake_node_multi_az_setup() {
+    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
+    if [[ $? == 0 ]] ; then
+        AT_CHECK([exit 77])
+    fi
+}
+
+check_fake_node_multi_az_setup() {
+    m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
+    if [[ $? != 0 ]] ; then
+        AT_CHECK([exit 77])
+    fi
+
+    # Check if the fake multinode setup is using SSL, it will
+    # skip if it is enabled. The cleanup will break the setup,
+    # so it is recommended to use without SSL in order to
+    # test the OVN IC with fake multinode setup.
+    m_as ovn-chassis-1 ovs-vsctl list open | grep "ssl:"
+    if [[ $? == 0 ]] ; then
+        AT_CHECK([exit 77])
+    fi
+}
+
+check_fake_multinode_setup_by_az() {
+    check_fake_node_multi_az_setup
+
+    m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
+    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
+    m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
+
+    for c in $1
+    do
+        m_as $c ovn-appctl -t ovn-controller version
+    done
+}
+
+cleanup_multinode_resources_by_az() {
+    check_fake_node_multi_az_setup
+    m_as ovn-central-az1-1 rm -f /etc/ovn/ovnnb_db.db
+    m_as ovn-central-az1-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
+    m_as ovn-central-az2-1 rm -f /etc/ovn/ovnnb_db.db
+    m_as ovn-central-az2-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
+    m_as ovn-central-az3-1 rm -f /etc/ovn/ovnnb_db.db
+    m_as ovn-central-az3-1 /usr/share/ovn/scripts/ovn-ctl restart_northd
+    check m_as ovn-central-az1-1 ovn-nbctl --wait=sb sync
+    check m_as ovn-central-az2-1 ovn-nbctl --wait=sb sync
+    check m_as ovn-central-az3-1 ovn-nbctl --wait=sb sync
+
+    for c in $1
+    do
+        m_as $c ovs-vsctl del-br br-int
+        m_as $c ip --all netns delete
+    done
+}
+
+configure_multinode_az() {
+    # Configure OVN IC by AZ
+    check m_as ovn-central-az1-1 ovn-nbctl set-connection ptcp:6641
+    check m_as ovn-central-az1-1 ovn-sbctl set-connection ptcp:6642
+    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . name=ovn-central-az1-1
+    check m_as ovn-central-az1-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
+                            options:ic-route-learn=true
+    check m_as ovn-central-az2-1 ovn-nbctl set-connection ptcp:6641
+    check m_as ovn-central-az2-1 ovn-sbctl set-connection ptcp:6642
+    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . name=ovn-central-az2-1
+    check m_as ovn-central-az2-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
+                            options:ic-route-learn=true
+    check m_as ovn-central-az3-1 ovn-nbctl set-connection ptcp:6641
+    check m_as ovn-central-az3-1 ovn-sbctl set-connection ptcp:6642
+    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . name=ovn-central-az3-1
+    check m_as ovn-central-az3-1 ovn-nbctl set NB_Global . options:ic-route-adv=true \
+                            options:ic-route-learn=true
+
+    # Configure OVN IC Gateway
+    check m_as ovn-gw-1 ovs-vsctl set open . external-ids:ovn-is-interconn=true
+    check m_as ovn-gw-2 ovs-vsctl set open . external-ids:ovn-is-interconn=true
+    check m_as ovn-gw-3 ovs-vsctl set open . external-ids:ovn-is-interconn=true
+}
+
 OVS_END_SHELL_HELPERS
diff --git a/tests/multinode.at b/tests/multinode.at
index 408e1118d..c43255c89 100644
--- a/tests/multinode.at
+++ b/tests/multinode.at
@@ -1591,3 +1591,144 @@  AT_CHECK([cat ch1_eth2.tcpdump], [0], [dnl
 ])
 
 AT_CLEANUP
+
+AT_SETUP([ovn multinode - ovn-ic - inter-AZ IPv4/IPv6])
+
+# Check that ovn-fake-multinode setup is up and running - requires additional nodes
+check_fake_multinode_setup_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
+
+# Delete the multinode NB and OVS resources before starting the test.
+cleanup_multinode_resources_by_az 'ovn-chassis-1 ovn-chassis-2 ovn-chassis-3 ovn-gw-1 ovn-gw-2 ovn-gw-3'
+
+# Configure OVN IC by AZ
+configure_multinode_az
+
+# Test Inter-AZ routing
+
+# Create the Transit Switch
+m_as ovn-central-az1-1 ovn-ic-nbctl ts-add ts-1
+
+# AZ1 - Create one logical switch with one port
+check m_as ovn-central-az1-1 ovn-nbctl ls-add sw1-az1
+check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-port1
+check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-port1 "40:54:00:00:01:01 10.0.1.3 2001::3"
+
+# AZ1 - Create a logical router and attach the logical switch
+check m_as ovn-central-az1-1 ovn-nbctl lr-add lr1
+check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-sw1-az1 00:00:00:00:ff:01 10.0.1.1/24 2001::1/64
+check m_as ovn-central-az1-1 ovn-nbctl lsp-add sw1-az1 sw1-az1-lr1
+check m_as ovn-central-az1-1 ovn-nbctl lsp-set-type sw1-az1-lr1 router
+check m_as ovn-central-az1-1 ovn-nbctl lsp-set-addresses sw1-az1-lr1 router
+check m_as ovn-central-az1-1 ovn-nbctl lsp-set-options sw1-az1-lr1 router-port=lr1-sw1-az1
+
+# AZ1 - Create the LRP, LSP and interconnect to the Transit Switch
+check m_as ovn-central-az1-1 ovn-nbctl lrp-add lr1 lr1-ts-1 00:00:00:00:00:01 169.254.251.1/24 fe80:10::1/64
+check m_as ovn-central-az1-1 ovn-nbctl lrp-set-gateway-chassis lr1-ts-1 ovn-gw-1
+check m_as ovn-central-az1-1 ovn-nbctl lsp-add ts-1 lr1-lsp1 -- \
+    lsp-set-addresses lr1-lsp1 router -- \
+    lsp-set-type lr1-lsp1 router -- \
+    lsp-set-options lr1-lsp1 router-port=lr1-ts-1
+
+m_as ovn-chassis-1 ip link del sw1-az1-p1-p
+m_as ovn-chassis-1 /data/create_fake_vm.sh sw1-az1-port1 sw1-az1-p1 40:54:00:00:01:01 1342 10.0.1.3 24 10.0.1.1 2001::3/64 2001::1
+
+# AZ2 - Create one logical switch with one port
+check m_as ovn-central-az2-1 ovn-nbctl ls-add sw1-az2
+check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-port1
+check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-port1 "40:54:00:00:02:01 10.0.2.3 2002::3"
+
+# AZ2 - Create a logical router and attach the logical switch
+check m_as ovn-central-az2-1 ovn-nbctl lr-add lr2
+check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-sw1-az2 00:00:00:00:ff:02 10.0.2.1/24 2002::1/64
+check m_as ovn-central-az2-1 ovn-nbctl lsp-add sw1-az2 sw1-az2-lr2
+check m_as ovn-central-az2-1 ovn-nbctl lsp-set-type sw1-az2-lr2 router
+check m_as ovn-central-az2-1 ovn-nbctl lsp-set-addresses sw1-az2-lr2 router
+check m_as ovn-central-az2-1 ovn-nbctl lsp-set-options sw1-az2-lr2 router-port=lr2-sw1-az2
+
+# AZ2 - Create the LRP, LSP and interconnect to the Transit Switch
+check m_as ovn-central-az2-1 ovn-nbctl lrp-add lr2 lr2-ts-1 00:00:00:00:00:02 169.254.251.2/24 fe80:10::2/64
+check m_as ovn-central-az2-1 ovn-nbctl lrp-set-gateway-chassis lr2-ts-1 ovn-gw-2
+check m_as ovn-central-az2-1 ovn-nbctl lsp-add ts-1 lr2-lsp1 -- \
+    lsp-set-addresses lr2-lsp1 router -- \
+    lsp-set-type lr2-lsp1 router -- \
+    lsp-set-options lr2-lsp1 router-port=lr2-ts-1
+
+m_as ovn-chassis-2 ip link del sw1-az2-p1-p
+m_as ovn-chassis-2 /data/create_fake_vm.sh sw1-az2-port1 sw1-az2-p1 40:54:00:00:02:01 1342 10.0.2.3 24 10.0.2.1 2002::3/64 2002::1
+
+# AZ3 - Create one logical switch with one port
+check m_as ovn-central-az3-1 ovn-nbctl ls-add sw1-az3
+check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-port1
+check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-port1 "40:54:00:00:03:01 10.0.3.3 2003::3"
+
+# AZ3 - Create a logical router and attach the logical switch
+check m_as ovn-central-az3-1 ovn-nbctl lr-add lr3
+check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-sw1-az3 00:00:00:00:ff:03 10.0.3.1/24 2003::1/64
+check m_as ovn-central-az3-1 ovn-nbctl lsp-add sw1-az3 sw1-az3-lr3
+check m_as ovn-central-az3-1 ovn-nbctl lsp-set-type sw1-az3-lr3 router
+check m_as ovn-central-az3-1 ovn-nbctl lsp-set-addresses sw1-az3-lr3 router
+check m_as ovn-central-az3-1 ovn-nbctl lsp-set-options sw1-az3-lr3 router-port=lr3-sw1-az3
+
+# AZ3 - Create the LRP, LSP and interconnect to the Transit Switch
+check m_as ovn-central-az3-1 ovn-nbctl lrp-add lr3 lr3-ts-1 00:00:00:00:00:03 169.254.251.3/24 fe80:10::3/64
+check m_as ovn-central-az3-1 ovn-nbctl lrp-set-gateway-chassis lr3-ts-1 ovn-gw-3
+check m_as ovn-central-az3-1 ovn-nbctl lsp-add ts-1 lr3-lsp1 -- \
+    lsp-set-addresses lr3-lsp1 router -- \
+    lsp-set-type lr3-lsp1 router -- \
+    lsp-set-options lr3-lsp1 router-port=lr3-ts-1
+
+m_as ovn-chassis-1 ip link del sw1-az3-p1-p
+m_as ovn-chassis-3 /data/create_fake_vm.sh sw1-az3-port1 sw1-az3-p1 40:54:00:00:03:01 1342 10.0.3.3 24 10.0.3.1 2003::3/64 2003::1
+
+# Test routes from lr2 and lr3 were learned to lr1
+AT_CHECK([m_as ovn-central-az1-1 ovn-nbctl lr-route-list lr1 |
+             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
+10.0.2.0/24 169.254.251.2
+10.0.3.0/24 169.254.251.3
+2002::/64 fe80:10::2
+2003::/64 fe80:10::3
+])
+
+# Test routes from lr1 and lr3 were learned to lr2
+AT_CHECK([m_as ovn-central-az2-1 ovn-nbctl lr-route-list lr2 |
+             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
+10.0.1.0/24 169.254.251.1
+10.0.3.0/24 169.254.251.3
+2001::/64 fe80:10::1
+2003::/64 fe80:10::3
+])
+
+# Test routes from lr1 and lr2 were learned to lr3
+AT_CHECK([m_as ovn-central-az3-1 ovn-nbctl lr-route-list lr3 |
+             grep learned | awk '{print $1, $2}' | sort], [0], [dnl
+10.0.1.0/24 169.254.251.1
+10.0.2.0/24 169.254.251.2
+2001::/64 fe80:10::1
+2002::/64 fe80:10::2
+])
+
+# Ping IPv4 test Inter-AZ - AZ1 vs AZ2
+M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.2.3 | FORMAT_PING], \
+[0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+# Ping IPv4 test Inter-AZ - AZ1 vs AZ3
+M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping -q -c 3 -i 0.3 -w 2 10.0.3.3 | FORMAT_PING], \
+[0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+# Ping IPv6 test Inter-AZ - AZ1 vs AZ2
+M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2002::3 | FORMAT_PING], \
+[0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+# Ping IPv6 test Inter-AZ - AZ1 vs AZ3
+M_NS_CHECK_EXEC([ovn-chassis-1], [sw1-az1-p1], [ping6 -q -c 3 -i 0.3 -w 2 2003::3 | FORMAT_PING], \
+[0], [dnl
+3 packets transmitted, 3 received, 0% packet loss, time 0ms
+])
+
+AT_CLEANUP