Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impacted area based PR test. #15666

Open
wants to merge 25 commits into
base: master
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
e4fbed9
impacted are based PR test
yutongzhang-microsoft Sep 23, 2024
9b45596
Add three types of subtype topology
yutongzhang-microsoft Oct 25, 2024
0fe1a50
Merge branch 'sonic-net:master' into yutongzhang/pr_impacted_area
yutongzhang-microsoft Oct 25, 2024
a6971d3
Add the script to calculate instance number
yutongzhang-microsoft Oct 25, 2024
6a536b3
Merge branch 'sonic-net:master' into yutongzhang/pr_impacted_area
yutongzhang-microsoft Oct 31, 2024
c8df319
test new template
yutongzhang-microsoft Oct 31, 2024
e2a7b90
Add comments
yutongzhang-microsoft Oct 31, 2024
0c5a270
test
yutongzhang-microsoft Oct 31, 2024
48d07b6
test whole scope
yutongzhang-microsoft Oct 31, 2024
01d4f1d
comment out
yutongzhang-microsoft Oct 31, 2024
d6f0f1f
test script
yutongzhang-microsoft Nov 1, 2024
14f39fa
test
yutongzhang-microsoft Nov 1, 2024
7c1a565
test
yutongzhang-microsoft Nov 1, 2024
993510e
Merge branch 'sonic-net:master' into yutongzhang/pr_impacted_area
yutongzhang-microsoft Nov 20, 2024
4fd2f19
fix the logic -- get impacted area
yutongzhang-microsoft Nov 21, 2024
0013342
Use template
yutongzhang-microsoft Nov 21, 2024
ff96ff5
fix
yutongzhang-microsoft Nov 21, 2024
0c4818d
Modify as comment
yutongzhang-microsoft Dec 4, 2024
614b700
Merge branch 'master' into yutongzhang/pr_impacted_area
yutongzhang-microsoft Dec 4, 2024
7f54427
test access token
yutongzhang-microsoft Dec 6, 2024
91a8002
Merge remote-tracking branch 'origin/master'
yutongzhang-microsoft Dec 9, 2024
a28903f
Merge remote-tracking branch 'origin/master'
yutongzhang-microsoft Dec 9, 2024
fe511fe
modify
yutongzhang-microsoft Dec 9, 2024
dd02492
Merge remote-tracking branch 'origin/master'
yutongzhang-microsoft Dec 12, 2024
2e8d8c4
Using script instead of AzureCli
yutongzhang-microsoft Dec 12, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
impacted are based PR test
yutongzhang-microsoft committed Oct 24, 2024
commit e4fbed98cf16cdb08469914fde9473f3a0c6dc37
15 changes: 15 additions & 0 deletions .azure-pipelines/validate_diff_folders/constant.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Now, we only have below types of PR checker
# - dpu
# - dualtor-t0
# - multi-asic-t1-lag
# - t0
# - t0-2vlans
# - t0-sonic
# - t1- lag
PR_TOPOLOGY_TYPE = ["t0", "t0_2vlans", "t0_sonic", "t1", "multi_asic", "dpu", "dualtor"]

EXCLUDE_TEST_SCRIPTS = [
"test_posttest.py",
"test_pretest.py"
]

103 changes: 103 additions & 0 deletions .azure-pipelines/validate_diff_folders/get_test_scripts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
#!/usr/bin/env python3

"""
Scripts for getting test scripts in impacted area
Example:
python validate_diff_folders/get_test_scripts.py vrf,gnmi ../tests

It will get all test scripts in specific impacted area.
"""
import os
import sys
import re
import logging
import json
import argparse
from natsort import natsorted
from constant import PR_TOPOLOGY_TYPE, EXCLUDE_TEST_SCRIPTS


def topo_name_to_type(topo_name):
pattern = re.compile(r'^(wan|t0|t1|ptf|fullmesh|dualtor|t2|tgen|multidut-tgen|mgmttor|m0|mc0|mx|dpu|any|snappi|util)')
match = pattern.match(topo_name)
if match is None:
logging.warning("Unsupported testbed type - {}".format(topo_name))
return topo_name

topo_type = match.group()
if topo_type in ['mgmttor', 'm0', 'mc0', 'mx']:
# certain testbed types are in 't0' category with different names.
topo_type = 't0'
if topo_type in ['multidut-tgen']:
topo_type = 'tgen'
return topo_type


def collect_all_scripts(features, location):
'''
This function collects all test scripts under the impacted area
and distribute all test scripts to corresponding PR checkers
'''
# Recursively find all files starting with "test_" and ending with ".py"
# Note: The full path and name of files are stored in a list named "files"
files = []
for feature in features.split(","):
feature_path = os.path.join(location, feature)
for root, dirs, file in os.walk(feature_path):
for f in file:
if f.startswith("test_") and f.endswith(".py"):
files.append(os.path.join(root, f))
files = natsorted(files)

# Open each file and search for regex pattern
pattern = re.compile(r"[^@]pytest\.mark\.topology\(([^\)]*)\)")

# Init the dict to record the mapping of topology type and test scripts
test_scripts_per_topology_type = {}
for topology_type in PR_TOPOLOGY_TYPE:
test_scripts_per_topology_type[topology_type] = []

for f in files:
# Remove prefix from file name:
filename = f[len(location) + 1:]
if filename in EXCLUDE_TEST_SCRIPTS:
continue

try:
with open(f, 'r') as file:
for line in file:
# Get topology type of script from mark `pytest.mark.topology`
match = pattern.search(line)
if match:
for topology in match.group(1).split(","):
topology_mark = topology.strip().strip('"').strip('\'')
if topology_mark == "any":
for key in test_scripts_per_topology_type:
if filename not in test_scripts_per_topology_type[key]:
test_scripts_per_topology_type[key].append(filename)
else:
topology_type = topo_name_to_type(topology_mark)
if topology_type in test_scripts_per_topology_type and filename not in test_scripts_per_topology_type[topology_type]:
test_scripts_per_topology_type[topology_type].append(filename)
except Exception as e:
logging.error('Failed to load file {}, error {}'.format(f, e))

test_scripts_per_topology_type = {k: v for k, v in test_scripts_per_topology_type.items() if test_scripts_per_topology_type[k]}

return test_scripts_per_topology_type


def main(features, location):
scripts_list = collect_all_scripts(features, location)
print(json.dumps(scripts_list))


if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("--features", help="Impacted area", type=str, default="")
parser.add_argument("--location", help="The location of folder `tests`", type=str, default="")
args = parser.parse_args()

features = args.features
location = args.location
main(features, location)
380 changes: 238 additions & 142 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -23,27 +23,27 @@ trigger: none
name: $(TeamProject)_$(Build.DefinitionName)_$(SourceBranchName)_$(Date:yyyyMMdd)$(Rev:.r)

stages:
- stage: Pre_test
jobs:
- job: static_analysis
displayName: "Static Analysis"
timeoutInMinutes: 10
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/pre-commit-check.yml

- job: validate_test_cases
displayName: "Validate Test Cases"
timeoutInMinutes: 20
continueOnError: false
pool: sonic-common
steps:
- template: .azure-pipelines/pytest-collect-only.yml
#- stage: Pre_test
# jobs:
# - job: static_analysis
# displayName: "Static Analysis"
# timeoutInMinutes: 10
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/pre-commit-check.yml
#
# - job: validate_test_cases
# displayName: "Validate Test Cases"
# timeoutInMinutes: 20
# continueOnError: false
# pool: sonic-common
# steps:
# - template: .azure-pipelines/pytest-collect-only.yml

- stage: Test
dependsOn: Pre_test
condition: and(succeeded(), in(dependencies.Pre_test.result, 'Succeeded'))
# dependsOn: Pre_test
# condition: and(succeeded(), in(dependencies.Pre_test.result, 'Succeeded'))
variables:
- group: SONiC-Elastictest
- name: inventory
@@ -57,146 +57,242 @@ stages:
value: $(Build.SourceBranchName)

jobs:
- job: t0_elastictest
displayName: "kvmtest-t0 by Elastictest"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t0
MIN_WORKER: $(T0_INSTANCE_NUM)
MAX_WORKER: $(T0_INSTANCE_NUM)
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)

- job: t0_2vlans_elastictest
displayName: "kvmtest-t0-2vlans by Elastictest"
- job: get_impacted_area
displayName: "Get impacted area"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t0
TEST_SET: t0-2vlans
MIN_WORKER: $(T0_2VLANS_INSTANCE_NUM)
MAX_WORKER: $(T0_2VLANS_INSTANCE_NUM)
DEPLOY_MG_EXTRA_PARAMS: "-e vlan_config=two_vlan_a"
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)

- job: t1_lag_elastictest
displayName: "kvmtest-t1-lag by Elastictest"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t1-lag
MIN_WORKER: $(T1_LAG_INSTANCE_NUM)
MAX_WORKER: $(T1_LAG_INSTANCE_NUM)
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)

- job: dualtor_elastictest
displayName: "kvmtest-dualtor-t0 by Elastictest"
timeoutInMinutes: 240
continueOnError: false
continueOnError: true
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: dualtor
MIN_WORKER: $(T0_DUALTOR_INSTANCE_NUM)
MAX_WORKER: $(T0_DUALTOR_INSTANCE_NUM)
COMMON_EXTRA_PARAMS: "--disable_loganalyzer "
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
- script: |
# Check if azure cli is installed. If not, try to install it
if ! command -v az; then
echo "Azure CLI is not installed. Trying to install it..."
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
else
echo "Azure CLI is already installed"
fi
- job: multi_asic_elastictest
displayName: "kvmtest-multi-asic-t1-lag by Elastictest"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t1-8-lag
TEST_SET: multi-asic-t1-lag
MIN_WORKER: $(MULTI_ASIC_INSTANCE_NUM)
MAX_WORKER: $(MULTI_ASIC_INSTANCE_NUM)
NUM_ASIC: 4
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
sudo apt-get update && sudo apt-get install -y jq
displayName: "Install azure-cli"
- job: sonic_t0_elastictest
displayName: "kvmtest-t0-sonic by Elastictest"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t0-64-32
MIN_WORKER: $(T0_SONIC_INSTANCE_NUM)
MAX_WORKER: $(T0_SONIC_INSTANCE_NUM)
TEST_SET: t0-sonic
COMMON_EXTRA_PARAMS: "--neighbor_type=sonic "
VM_TYPE: vsonic
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
- task: AzureCLI@2
inputs:
azureSubscription: "SONiC-Automation"
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
set -x
DIFF_FOLDERS=$(git diff HEAD^ HEAD --name-only | xargs -n1 dirname | sort -u | tr '\n' ' ')
echo -n "##vso[task.setvariable variable=DIFF_FOLDERS]$DIFF_FOLDERS"
displayName: "Get diff folders"

- job: dpu_elastictest
displayName: "kvmtest-dpu by Elastictest"
timeoutInMinutes: 240
continueOnError: false
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: dpu
MIN_WORKER: $(T0_SONIC_INSTANCE_NUM)
MAX_WORKER: $(T0_SONIC_INSTANCE_NUM)
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
- task: AzureCLI@2
inputs:
azureSubscription: "SONiC-Automation"
scriptType: 'bash'
scriptLocation: 'inlineScript'
inlineScript: |
set -x
- job: onboarding_elastictest_t0
displayName: "onboarding t0 testcases by Elastictest - optional"
timeoutInMinutes: 240
continueOnError: true
pool: sonic-ubuntu-1c
steps:
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t0
STOP_ON_FAILURE: "False"
RETRY_TIMES: 0
MIN_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM)
MAX_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM)
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
TEST_SET: onboarding_t0
pip install PyYAML
pip install natsort
FINAL_FEATURES=""
echo "$(DIFF_FOLDERS)"
IFS=' ' read -ra FEATURES_LIST <<< "$(DIFF_FOLDERS)"
for FEATURE in "${FEATURES_LIST[@]}"
do
if [[ "$FEATURE" == *tests* ]] && [[ "$FEATURE" != *tests/common* ]];then
if [[ -z "$FINAL_FEATURES" ]];then
FINAL_FEATURES="${FEATURE#tests/}"
else
FINAL_FEATURES="$FINAL_FEATURES,${FEATURE#tests/}"
fi
fi
done
if [ -z "$FINAL_FEATURES" ]; then
TEST_SCRIPTS=$(python ./.azure-pipelines/validate_diff_folders/get_test_scripts.py --features "" --location tests)
else
TEST_SCRIPTS=$(python ./.azure-pipelines/validate_diff_folders/get_test_scripts.py --features ${FINAL_FEATURES} --location tests)
fi
PR_CHECKERS=$(echo "${TEST_SCRIPTS}" | jq -c 'keys')
- job: onboarding_elastictest_t1
displayName: "onboarding t1 testcases by Elastictest - optional"
echo "##vso[task.setvariable variable=PR_CHECKERS;isOutput=true]$PR_CHECKERS"
echo "##vso[task.setvariable variable=TEST_SCRIPTS;isOutput=true]$TEST_SCRIPTS"
name: SetVariableTask
displayName: "Get impacted area"

- job: t0_elastictest_on_needed
displayName: "kvmtest-t0-on-needed by Elastictest"
dependsOn: get_impacted_area
condition: or(contains(dependencies.get_impacted_area.outputs['SetVariableTask.PR_CHECKERS'], 't0'), eq(dependencies.get_impacted_area.outputs['SetVariableTask.PR_CHECKERS'], ''))
yutongzhang-microsoft marked this conversation as resolved.
Show resolved Hide resolved
variables:
TEST_SCRIPTS: $[ dependencies.get_impacted_area.outputs['SetVariableTask.TEST_SCRIPTS'] ]
timeoutInMinutes: 240
continueOnError: true
pool: sonic-ubuntu-1c
steps:
- script: |
set -x
sudo apt-get update && sudo apt-get install -y jq
T0_SCRIPTS=$(echo '$(TEST_SCRIPTS)' | jq -r -c '.t0')
SCRIPTS=$(echo "$T0_SCRIPTS" | jq -r '. | join(",")')
echo -n "##vso[task.setvariable variable=SCRIPTS]$SCRIPTS"
displayName: "Get t0 test scripts"
- template: .azure-pipelines/run-test-elastictest-template.yml
parameters:
TOPOLOGY: t1-lag
STOP_ON_FAILURE: "False"
RETRY_TIMES: 0
MIN_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM)
MAX_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM)
TOPOLOGY: t0
SCRIPTS: $(SCRIPTS)
MIN_WORKER: $(IMPACTED_AREA_BASED_T0)
MAX_WORKER: $(IMPACTED_AREA_BASED_T0)
KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
MGMT_BRANCH: $(BUILD_BRANCH)
TEST_SET: onboarding_t1

# - job: t0_elastictest
# displayName: "kvmtest-t0 by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t0
# MIN_WORKER: $(T0_INSTANCE_NUM)
# MAX_WORKER: $(T0_INSTANCE_NUM)
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: t0_2vlans_elastictest
# displayName: "kvmtest-t0-2vlans by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t0
# TEST_SET: t0-2vlans
# MIN_WORKER: $(T0_2VLANS_INSTANCE_NUM)
# MAX_WORKER: $(T0_2VLANS_INSTANCE_NUM)
# DEPLOY_MG_EXTRA_PARAMS: "-e vlan_config=two_vlan_a"
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: t1_lag_elastictest
# displayName: "kvmtest-t1-lag by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t1-lag
# MIN_WORKER: $(T1_LAG_INSTANCE_NUM)
# MAX_WORKER: $(T1_LAG_INSTANCE_NUM)
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: dualtor_elastictest
# displayName: "kvmtest-dualtor-t0 by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: dualtor
# MIN_WORKER: $(T0_DUALTOR_INSTANCE_NUM)
# MAX_WORKER: $(T0_DUALTOR_INSTANCE_NUM)
# COMMON_EXTRA_PARAMS: "--disable_loganalyzer "
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: multi_asic_elastictest
# displayName: "kvmtest-multi-asic-t1-lag by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t1-8-lag
# TEST_SET: multi-asic-t1-lag
# MIN_WORKER: $(MULTI_ASIC_INSTANCE_NUM)
# MAX_WORKER: $(MULTI_ASIC_INSTANCE_NUM)
# NUM_ASIC: 4
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: sonic_t0_elastictest
# displayName: "kvmtest-t0-sonic by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t0-64-32
# MIN_WORKER: $(T0_SONIC_INSTANCE_NUM)
# MAX_WORKER: $(T0_SONIC_INSTANCE_NUM)
# TEST_SET: t0-sonic
# COMMON_EXTRA_PARAMS: "--neighbor_type=sonic "
# VM_TYPE: vsonic
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: dpu_elastictest
# displayName: "kvmtest-dpu by Elastictest"
# timeoutInMinutes: 240
# continueOnError: false
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: dpu
# MIN_WORKER: $(T0_SONIC_INSTANCE_NUM)
# MAX_WORKER: $(T0_SONIC_INSTANCE_NUM)
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
#
# - job: onboarding_elastictest_t0
# displayName: "onboarding t0 testcases by Elastictest - optional"
# timeoutInMinutes: 240
# continueOnError: true
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t0
# STOP_ON_FAILURE: "False"
# RETRY_TIMES: 0
# MIN_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM)
# MAX_WORKER: $(T0_ONBOARDING_SONIC_INSTANCE_NUM)
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
# TEST_SET: onboarding_t0
#
# - job: onboarding_elastictest_t1
# displayName: "onboarding t1 testcases by Elastictest - optional"
# timeoutInMinutes: 240
# continueOnError: true
# pool: sonic-ubuntu-1c
# steps:
# - template: .azure-pipelines/run-test-elastictest-template.yml
# parameters:
# TOPOLOGY: t1-lag
# STOP_ON_FAILURE: "False"
# RETRY_TIMES: 0
# MIN_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM)
# MAX_WORKER: $(T1_LAG_ONBOARDING_INSTANCE_NUM)
# KVM_IMAGE_BRANCH: $(BUILD_BRANCH)
# MGMT_BRANCH: $(BUILD_BRANCH)
# TEST_SET: onboarding_t1
#
# - job: onboarding_elastictest_dualtor
# displayName: "onboarding dualtor testcases by Elastictest - optional"
# timeoutInMinutes: 240
1 change: 1 addition & 0 deletions tests/macsec/test_deployment.py
Original file line number Diff line number Diff line change
@@ -6,6 +6,7 @@
from .macsec_helper import check_appl_db
logger = logging.getLogger(__name__)


pytestmark = [
pytest.mark.macsec_required,
pytest.mark.topology("t0", "t2"),