Skip to content

Commit bd0db68

Browse files
committed
Test github actions
Signed-off-by: Venkat Kunaparaju <vkunaparaju@nvidia.com>
1 parent 15596e2 commit bd0db68

11 files changed

Lines changed: 854 additions & 0 deletions
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Pre-created secondary NetworkAttachmentDefinition for the preset-nad
2+
# workflow. Mirrors what manifests/secondary-nad.yaml.j2 would emit with the
3+
# default subnet/MTU/topology, so the framework's _setup_secondary_nad detects
4+
# this NAD as already-present and skips its own create step.
5+
apiVersion: k8s.cni.cncf.io/v1
6+
kind: NetworkAttachmentDefinition
7+
metadata:
8+
name: preset-nad
9+
namespace: default
10+
labels:
11+
tft-tests: "secondary-nad"
12+
spec:
13+
config: '{
14+
"cniVersion": "0.4.0",
15+
"name": "preset-nad",
16+
"netAttachDefName": "default/preset-nad",
17+
"Role": "secondary",
18+
"topology": "layer3",
19+
"subnets": "10.193.0.0/16/26",
20+
"mtu": 1500,
21+
"type": "ovn-k8s-cni-overlay",
22+
"logFile": "/var/log/ovn-kubernetes/flowtest.log",
23+
"logLevel": "5",
24+
"logfile-maxsize": 100,
25+
"logfile-maxbackups": 5,
26+
"logfile-maxage": 5
27+
}'
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
# Run test cases 1-28 with iperf-tcp, and http-curl.
2+
3+
tft:
4+
- name: "kind-full-suite"
5+
namespace: "default"
6+
test_cases: "1-28"
7+
duration: 5
8+
pre_provision: true
9+
connections:
10+
- name: "iperf-tcp"
11+
type: "iperf-tcp"
12+
instances: 1
13+
reverse: false
14+
server:
15+
- name: "dpu-sim-host-worker"
16+
persistent: false
17+
sriov: false
18+
client:
19+
- name: "dpu-sim-host-worker2"
20+
sriov: false
21+
- name: "http-curl"
22+
type: "http"
23+
instances: 1
24+
reverse: false
25+
server:
26+
- name: "dpu-sim-host-worker"
27+
persistent: false
28+
sriov: false
29+
client:
30+
- name: "dpu-sim-host-worker2"
31+
sriov: false
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Test pre_provision=false with iperf-tcp across a diverse subset of test cases.
2+
3+
tft:
4+
- name: "kind-named-selection"
5+
namespace: "default"
6+
test_cases:
7+
- POD_TO_POD_SAME_NODE
8+
- POD_TO_POD_DIFF_NODE
9+
- POD_TO_CLUSTER_IP_TO_POD_SAME_NODE
10+
- POD_TO_NODE_PORT_TO_POD_SAME_NODE
11+
- HOST_TO_HOST_SAME_NODE
12+
- HOST_TO_HOST_DIFF_NODE
13+
- HOST_TO_CLUSTER_IP_TO_POD_SAME_NODE
14+
- HOST_TO_NODE_PORT_TO_POD_SAME_NODE
15+
- POD_TO_EXTERNAL
16+
- POD_TO_POD_2ND_INTERFACE_SAME_NODE
17+
- POD_TO_POD_ANP_ALLOW
18+
- POD_TO_POD_NP_DENY
19+
duration: 5
20+
pre_provision: false
21+
connections:
22+
- name: "iperf-tcp"
23+
type: "iperf-tcp"
24+
instances: 1
25+
reverse: false
26+
server:
27+
- name: "dpu-sim-host-worker"
28+
persistent: false
29+
sriov: false
30+
client:
31+
- name: "dpu-sim-host-worker2"
32+
sriov: false
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Test specifying an existing secondary network NAD
2+
3+
tft:
4+
- name: "kind-preset-nad"
5+
namespace: "default"
6+
test_cases:
7+
- POD_TO_POD_2ND_INTERFACE_SAME_NODE
8+
- POD_TO_POD_2ND_INTERFACE_DIFF_NODE
9+
duration: 5
10+
pre_provision: true
11+
connections:
12+
- name: "iperf-tcp"
13+
type: "iperf-tcp"
14+
instances: 1
15+
reverse: false
16+
secondary_network_nad: "preset-nad"
17+
server:
18+
- name: "dpu-sim-host-worker"
19+
persistent: false
20+
sriov: false
21+
client:
22+
- name: "dpu-sim-host-worker2"
23+
sriov: false
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Validates per-pod CPU/memory requests+limits, a persistent server pod, the
2+
# reverse direction codepath, and a plugin scoped to a subset of test cases.
3+
4+
tft:
5+
- name: "kind-resource-limits"
6+
namespace: "default"
7+
test_cases: "1-12"
8+
duration: 5
9+
pre_provision: true
10+
connections:
11+
- name: "iperf-tcp"
12+
type: "iperf-tcp"
13+
instances: 1
14+
reverse: true
15+
cpu_request: "10m"
16+
cpu_limit: "500m"
17+
mem_request: "50Mi"
18+
mem_limit: "200Mi"
19+
server:
20+
- name: "dpu-sim-host-worker"
21+
persistent: true
22+
sriov: false
23+
client:
24+
- name: "dpu-sim-host-worker2"
25+
sriov: false
26+
plugins:
27+
- name: measure_cpu
28+
test_cases:
29+
- POD_TO_POD_SAME_NODE
30+
- POD_TO_POD_DIFF_NODE
31+
- POD_TO_HOST_SAME_NODE
32+
- POD_TO_HOST_DIFF_NODE
33+
- POD_TO_CLUSTER_IP_TO_POD_SAME_NODE
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# Test sriov=true with iperf-tcp
2+
3+
tft:
4+
- name: "kind-sriov-offload"
5+
namespace: "default"
6+
test_cases: "1-12"
7+
duration: 5
8+
pre_provision: true
9+
connections:
10+
- name: "iperf-tcp"
11+
type: "iperf-tcp"
12+
instances: 1
13+
reverse: false
14+
server:
15+
- name: "dpu-sim-host-worker"
16+
persistent: false
17+
sriov: true
18+
default_network: "default/ovn-primary"
19+
client:
20+
- name: "dpu-sim-host-worker2"
21+
sriov: true
22+
default_network: "default/ovn-primary"
23+
resource_name: "dpusim.io/vf"
Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
name: Kind TFT Full Suite
2+
3+
on:
4+
pull_request:
5+
push:
6+
branches:
7+
- main
8+
9+
concurrency:
10+
group: kind-tft-full-suite-${{ github.ref }}
11+
cancel-in-progress: true
12+
13+
jobs:
14+
kind-tft-full-suite:
15+
runs-on: ubuntu-latest
16+
timeout-minutes: 180
17+
steps:
18+
- name: Checkout ovn-k8s-traffic-flow-tests
19+
uses: actions/checkout@v4
20+
21+
- name: Checkout dpu-simulator
22+
uses: actions/checkout@v4
23+
with:
24+
repository: ovn-kubernetes/dpu-simulator
25+
ref: main
26+
path: dpu-simulator
27+
28+
- name: Checkout OVN-Kubernetes (master)
29+
uses: actions/checkout@v4
30+
with:
31+
repository: ovn-org/ovn-kubernetes
32+
ref: master
33+
path: dpu-simulator/ovn-kubernetes
34+
35+
- name: Set up Go
36+
uses: actions/setup-go@v5
37+
with:
38+
go-version-file: dpu-simulator/go.mod
39+
cache: true
40+
41+
- name: Install libvirt development headers
42+
run: sudo apt-get update && sudo apt-get install -y libvirt-dev
43+
44+
- name: Ensure podman is available
45+
# External test cases (POD_TO_EXTERNAL, HOST_TO_EXTERNAL) launch a
46+
# podman container on the runner. Pre-installed on ubuntu-24.04 today,
47+
# but install on-demand if a future image drops it.
48+
run: |
49+
if ! command -v podman >/dev/null 2>&1; then
50+
sudo apt-get install -y podman
51+
fi
52+
podman --version
53+
54+
- name: Install Helm
55+
uses: azure/setup-helm@v4
56+
57+
- name: Set up Python for traffic flow tests
58+
uses: actions/setup-python@v5
59+
with:
60+
python-version: "3.12"
61+
62+
- name: Install kind
63+
run: |
64+
KIND_VERSION=v0.31.0
65+
curl -fsSLo /tmp/kind-linux-amd64 "https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-amd64"
66+
curl -fsSLo /tmp/kind-linux-amd64.sha256sum "https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-amd64.sha256sum"
67+
(cd /tmp && sha256sum -c kind-linux-amd64.sha256sum)
68+
chmod +x /tmp/kind-linux-amd64
69+
sudo mv /tmp/kind-linux-amd64 /usr/local/bin/kind
70+
71+
- name: Build dpu-sim
72+
working-directory: dpu-simulator
73+
run: make build
74+
75+
- name: Disable containerd image store
76+
# Workaround for https://github.com/kubernetes-sigs/kind/issues/3795
77+
run: |
78+
sudo mkdir -p /etc/docker
79+
[ -s "/etc/docker/daemon.json" ] && {
80+
cat "/etc/docker/daemon.json" | jq '. + {"features":{"containerd-snapshotter": false}}' | sudo tee /etc/docker/daemon.$$
81+
} || {
82+
echo '{"features":{"containerd-snapshotter": false}}' | sudo tee /etc/docker/daemon.$$
83+
}
84+
sudo mv -f /etc/docker/daemon.$$ /etc/docker/daemon.json
85+
sudo systemctl restart docker
86+
87+
- name: Deploy KIND cluster (OVN-Kubernetes from source)
88+
working-directory: dpu-simulator
89+
run: ./bin/dpu-sim --config config-kind.yaml
90+
91+
- name: Verify clusters are ready
92+
working-directory: dpu-simulator
93+
run: |
94+
kubectl wait --for=condition=Ready nodes --all \
95+
--kubeconfig kubeconfig/dpu-sim-host.kubeconfig --timeout=25m
96+
97+
- name: TFT Python venv
98+
working-directory: dpu-simulator
99+
run: ./bin/dpu-sim tft venv --config config-kind.yaml --tft-repo-path "$GITHUB_WORKSPACE"
100+
101+
- name: Run traffic flow tests
102+
working-directory: dpu-simulator
103+
run: |
104+
./bin/dpu-sim tft run \
105+
--config config-kind.yaml \
106+
--tft-repo-path "$GITHUB_WORKSPACE" \
107+
--tft-config "$GITHUB_WORKSPACE/.github/tft-configs/full-suite.yaml" \
108+
--check
109+
110+
- name: Export kind logs on failure
111+
if: failure()
112+
run: |
113+
kind export logs /tmp/kind-logs --name dpu-sim-host 2>/dev/null || true
114+
kind export logs /tmp/kind-logs --name dpu-sim-dpu 2>/dev/null || true
115+
116+
- name: Upload kind logs on failure
117+
if: failure()
118+
uses: actions/upload-artifact@v4
119+
with:
120+
name: kind-tft-full-suite-kind-logs
121+
path: /tmp/kind-logs
122+
if-no-files-found: ignore
123+
124+
- name: Upload TFT results on failure
125+
if: failure()
126+
uses: actions/upload-artifact@v4
127+
with:
128+
name: kind-tft-full-suite-ft-logs
129+
path: ft-logs
130+
if-no-files-found: ignore
131+
132+
- name: Cleanup
133+
if: always()
134+
working-directory: dpu-simulator
135+
run: ./bin/dpu-sim --config config-kind.yaml --cleanup || true

0 commit comments

Comments
 (0)