Commit d443b616 authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

OSM-E2E integration test:

- Adapted scenario for testing tagged and untagged connections
parent e9c06810
Loading
Loading
Loading
Loading
+62 −61
Original line number Diff line number Diff line
@@ -32,7 +32,7 @@ build osm_end2end:
    - changes:
      - src/common/**/*.py
      - proto/*.proto
      - src/tests/${TEST_NAME}/**/*.{py,in,sh,yml}
      - src/tests/${TEST_NAME}/**/*.{py,in,sh,yml,json,cfg}
      - src/tests/${TEST_NAME}/Dockerfile
      - .gitlab-ci.yml

@@ -184,84 +184,85 @@ end2end_test osm_end2end:
    - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server

    - |
      dump_router_configs() {
        local LABEL=$1
        echo "==== ${LABEL} ===="
        containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
        containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
        containerlab exec --name ${TEST_NAME} --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
      }

      ping_check() {
        local SRC=$1 DST_IP=$2 PATTERN=$3
        local OUTPUT
        OUTPUT=$(containerlab exec --name ${TEST_NAME} --label clab-node-name=${SRC} --cmd "ping -n -c3 ${DST_IP}" --format json)
        echo "$OUTPUT"
        if echo "$OUTPUT" | grep -E "$PATTERN" >/dev/null; then
          echo "PASSED ${SRC}->${DST_IP}
        else
          echo "FAILED ${SRC}->${DST_IP}
          echo "PASSED ${SRC}->${DST_IP}"
          return 0
        fi
        echo "$OUTPUT" | grep -E "$PATTERN"
        echo "FAILED ${SRC}->${DST_IP}"
        return 1
      }

    # Run end-to-end test: onboard scenario
    - >
      docker run -t --rm --name ${TEST_NAME} --network=host 
      --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh"
      --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
      $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-onboarding.sh

    # Dump configuration of the routers (after configure TFS service)
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
      assert_no_connectivity() {
        local SRC=$1 LOCAL_IP=$2 LOCAL_GW=$3 REMOTE_GW=$4 REMOTE_IP=$5
        ping_check "${SRC}" "${LOCAL_IP}" "3 packets transmitted, 3 received, 0% packet loss"
        ping_check "${SRC}" "${LOCAL_GW}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
        ping_check "${SRC}" "${REMOTE_GW}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
        ping_check "${SRC}" "${REMOTE_IP}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
      }

    # Run end-to-end test: test no connectivity with ping
    - ping_check "dc1" "172.16.1.10" "3 packets transmitted, 3 received, 0% packet loss"
    - ping_check "dc1" "172.16.1.1" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
    - ping_check "dc1" "172.16.3.1" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
    - ping_check "dc1" "172.16.3.10" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
      assert_connectivity() {
        local SRC=$1 LOCAL_IP=$2 LOCAL_GW=$3 REMOTE_GW=$4 REMOTE_IP=$5
        ping_check "${SRC}" "${LOCAL_IP}" "3 packets transmitted, 3 received, 0% packet loss"
        ping_check "${SRC}" "${LOCAL_GW}" "3 packets transmitted, 3 received, 0% packet loss"
        ping_check "${SRC}" "${REMOTE_GW}" "3 packets transmitted, 3 received, 0% packet loss"
        ping_check "${SRC}" "${REMOTE_IP}" "3 packets transmitted, 3 received, 0% packet loss"
      }

    # Run end-to-end test: configure OSM service
    - >
      docker run -t --rm --name ${TEST_NAME} --network=host
      --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh"
      --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
      $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-osm-service-create.sh
      run_osm_test() {
        local ACTION=$1 VARIANT=$2
        docker run -t --rm --name "${TEST_NAME}-${VARIANT}-${ACTION}" --network=host \
          --env OSM_SERVICE_VARIANT="${VARIANT}" \
          --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \
          --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \
          "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" "/var/teraflow/run-osm-service-${ACTION}.sh"
      }

    # Give time to routers for being configured and stabilized
    - sleep 60
      run_variant_cycle() {
        local VARIANT=$1 SRC=$2 LOCAL_IP=$3 LOCAL_GW=$4 REMOTE_GW=$5 REMOTE_IP=$6

    # Dump configuration of the routers (after configure OSM service)
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
        echo "==== Starting ${VARIANT} OSM service cycle ===="
        assert_no_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}"

    # Run end-to-end test: test connectivity with ping
    - ping_check "dc1" "172.16.1.10" "3 packets transmitted, 3 received, 0% packet loss"
    - ping_check "dc1" "172.16.1.1" "3 packets transmitted, 3 received, 0% packet loss"
    - ping_check "dc1" "172.16.3.1" "3 packets transmitted, 3 received, 0% packet loss"
    - ping_check "dc1" "172.16.3.10" "3 packets transmitted, 3 received, 0% packet loss"
        run_osm_test create "${VARIANT}"
        sleep 60
        dump_router_configs "after configuring ${VARIANT} OSM service"
        assert_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}"

    # Run end-to-end test: deconfigure OSM service
    - >
      docker run -t --rm --name ${TEST_NAME} --network=host 
      --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh"
      --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
      $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-osm-service-remove.sh
        run_osm_test remove "${VARIANT}"
        sleep 60
        dump_router_configs "after removing ${VARIANT} OSM service"
        assert_no_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}"
      }

    # Give time to routers for being configured and stabilized
    - sleep 60
      # Run end-to-end test: onboard scenario
      docker run -t --rm --name ${TEST_NAME}-onboarding --network=host \
        --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \
        --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \
        $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-onboarding.sh

    # Dump configuration of the routers (after deconfigure OSM service)
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
    - containerlab exec --name ${TEST_NAME} --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
      dump_router_configs "after onboarding scenario"

    # Run end-to-end test: test no connectivity with ping
    - ping_check "dc1" "172.16.1.10" "3 packets transmitted, 3 received, 0% packet loss"
    - ping_check "dc1" "172.16.1.1" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
    - ping_check "dc1" "172.16.3.1" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
    - ping_check "dc1" "172.16.3.10" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss"
      # Run end-to-end test: first untagged connectivity, then tagged connectivity
      run_variant_cycle "untagged" "dc1_untagged" "172.16.1.10" "172.16.1.1" "172.16.3.1" "172.16.3.10"
      run_variant_cycle "tagged" "dc3_tagged" "172.17.1.10" "172.17.1.1" "172.17.3.1" "172.17.3.10"

      # Run end-to-end test: cleanup scenario
    - >
      docker run -t --rm --name ${TEST_NAME} --network=host 
      --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh"
      --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
      docker run -t --rm --name ${TEST_NAME}-cleanup --network=host \
        --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \
        --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \
        $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-cleanup.sh

  after_script:
+22 −8
Original line number Diff line number Diff line
@@ -56,23 +56,37 @@ docker exec -it clab-osm_end2end-r3 Cli

## Configure ContainerLab clients
```bash
docker exec -it clab-osm_end2end-dc1 bash
docker exec -it clab-osm_end2end-dc1_untagged bash
    ip link set address 00:c1:ab:00:01:0b dev eth1
    ip link set eth1 up
    ip address add 172.16.1.10/24 dev eth1
    ip route add 172.16.3.0/24 via 172.16.1.1
    ping 172.16.3.10

docker exec -it clab-osm_end2end-dc2_untagged bash
    ip link set address 00:c1:ab:00:02:0b dev eth1
    ip link set eth1 up
    ip address add 172.16.3.10/24 dev eth1
    ip route add 172.16.1.0/24 via 172.16.3.1
    ping 172.16.1.10

docker exec -it clab-osm_end2end-dc3_tagged bash
    ip link set address 00:c1:ab:00:01:0a dev eth1
    ip link set eth1 up
    ip link add link eth1 name eth1.125 type vlan id 125
    ip address add 172.16.1.10/24 dev eth1.125
    ip address add 172.17.1.10/24 dev eth1.125
    ip link set eth1.125 up
    ip route add 172.16.2.0/24 via 172.16.1.1
    ping 172.16.2.10
    ip route add 172.17.3.0/24 via 172.17.1.1
    ping 172.17.3.10

docker exec -it clab-osm_end2end-dc2 bash
docker exec -it clab-osm_end2end-dc4_tagged bash
    ip link set address 00:c1:ab:00:02:0a dev eth1
    ip link set eth1 up
    ip link add link eth1 name eth1.125 type vlan id 125
    ip address add 172.16.2.10/24 dev eth1.125
    ip address add 172.17.3.10/24 dev eth1.125
    ip link set eth1.125 up
    ip route add 172.16.1.0/24 via 172.16.2.1
    ping 172.16.1.10
    ip route add 172.17.1.0/24 via 172.17.3.1
    ping 172.17.1.10
```

## Install gNMIc
+29 −9
Original line number Diff line number Diff line
@@ -53,30 +53,50 @@ topology:
      mgmt-ipv4: 172.20.20.103
      startup-config: r3-startup.cfg

    dc1:
    dc1_untagged:
      kind: linux
      mgmt-ipv4: 172.20.20.201
      exec:
        - ip link set address 00:c1:ab:00:01:0a dev eth1
        - ip link set eth1 up
        - ip link add link eth1 name eth1.125 type vlan id 125
        - ip address add 172.16.1.10/24 dev eth1.125
        - ip link set eth1.125 up
        - ip address add 172.16.1.10/24 dev eth1
        - ip route add 172.16.3.0/24 via 172.16.1.1

    dc2:
    dc2_untagged:
      kind: linux
      mgmt-ipv4: 172.20.20.202
      exec:
        - ip link set address 00:c1:ab:00:02:0a dev eth1
        - ip link set eth1 up
        - ip address add 172.16.3.10/24 dev eth1
        - ip route add 172.16.1.0/24 via 172.16.3.1

    dc3_tagged:
      kind: linux
      mgmt-ipv4: 172.20.20.203
      exec:
        - ip link set address 00:c1:ab:00:03:0a dev eth1
        - ip link set eth1 up
        - ip link add link eth1 name eth1.125 type vlan id 125
        - ip address add 172.16.3.10/24 dev eth1.125
        - ip address add 172.17.1.10/24 dev eth1.125
        - ip link set eth1.125 up
        - ip route add 172.16.1.0/24 via 172.16.3.1
        - ip route add 172.17.3.0/24 via 172.17.1.1

    dc4_tagged:
      kind: linux
      mgmt-ipv4: 172.20.20.204
      exec:
        - ip link set address 00:c1:ab:00:04:0a dev eth1
        - ip link set eth1 up
        - ip link add link eth1 name eth1.125 type vlan id 125
        - ip address add 172.17.3.10/24 dev eth1.125
        - ip link set eth1.125 up
        - ip route add 172.17.1.0/24 via 172.17.3.1

  links:
    - endpoints: ["r1:eth2", "r2:eth1"]
    - endpoints: ["r2:eth3", "r3:eth2"]
    - endpoints: ["r1:eth10", "dc1:eth1"]
    - endpoints: ["r3:eth10", "dc2:eth1"]
    - endpoints: ["r1:eth10", "dc1_untagged:eth1"]
    - endpoints: ["r3:eth10", "dc2_untagged:eth1"]
    - endpoints: ["r1:eth11", "dc3_tagged:eth1"]
    - endpoints: ["r3:eth11", "dc4_tagged:eth1"]
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ interface Ethernet2
!
interface Ethernet10
!
interface Ethernet11
!
interface Management0
   ip address 172.20.20.101/24
!
+2 −0
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ interface Ethernet2
!
interface Ethernet10
!
interface Ethernet11
!
interface Management0
   ip address 172.20.20.103/24
!
Loading