Skip to content

Commit e20b957

Browse files
committed
test(robot): enable running robot test on storage-network pipeline, add 2nd nad for testing rwx volumes, and add rwx volume endpoint network test cases
Signed-off-by: Yang Chiu <yang.chiu@suse.com>
1 parent 0630044 commit e20b957

22 files changed

Lines changed: 392 additions & 41 deletions

e2e/keywords/common.resource

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,11 @@ Enable v2 data engine and add block disks
8282

8383
Init worker node variables
8484
${worker_nodes}= get_worker_nodes
85-
Set Test Variable ${NODE_0} ${worker_nodes[0]}
86-
Set Test Variable ${NODE_1} ${worker_nodes[1]}
87-
Set Test Variable ${NODE_2} ${worker_nodes[2]}
85+
Run Keyword And Ignore Error Set Test Variable ${NODE_0} ${worker_nodes[0]}
86+
Run Keyword And Ignore Error Set Test Variable ${NODE_1} ${worker_nodes[1]}
87+
Run Keyword And Ignore Error Set Test Variable ${NODE_2} ${worker_nodes[2]}
8888

8989
Set up test environment
90-
init_k8s_api_client
9190
setup_control_plane_network_latency
9291
set_backupstore
9392
Init worker node variables

e2e/keywords/longhorn.resource

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,9 @@ Upgrade Longhorn to custom version should fail
149149
Fail Upgrading Longhorn succeed
150150
END
151151

152+
Enable Storage Network
153+
enable_storage_network_setting
154+
152155
Check Longhorn node ${type} state on power off node is ${expect_state}
153156
${status} = get_longhorn_node_condition_status ${last_volume_node} ${type}
154157
Should Be Equal ${status} ${expect_state}

e2e/keywords/setting.resource

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,7 @@ Update Setting To Valid Value And Verify
2222
update_setting ${setting_key} ${setting_value}
2323
${value} = get_setting ${setting_key}
2424
Should Be Equal ${value} ${expected_value}
25+
26+
Setting ${setting_key} should be ${setting_value}
27+
${current_value} = get_setting ${setting_key}
28+
Should Be Equal ${current_value} ${setting_value}

e2e/libs/keywords/common_keywords.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,6 @@
1515
class common_keywords:
1616

1717
def __init__(self):
18-
pass
19-
20-
def init_k8s_api_client(self):
2118
init_k8s_api_client()
2219

2320
def generate_name_with_suffix(self, kind, suffix):

e2e/libs/keywords/k8s_keywords.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def wait_for_all_pods_evicted(self, node_name):
8484
wait_all_pods_evicted(node_name)
8585

8686
def uncordon_all_nodes(self):
87-
nodes = Node.list_node_names_by_role("worker")
87+
nodes = Node().list_node_names_by_role("worker")
8888

8989
for node_name in nodes:
9090
uncordon_node(node_name)

e2e/libs/keywords/longhorn_deploy_keywords.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,6 @@ def install_longhorn_system(self, custom_cmd="", install_stable_version=False):
1717

1818
def upgrade_longhorn(self, upgrade_to_transient_version=False, timeout=600, wait_when_fail=True):
1919
return self.longhorn.upgrade(upgrade_to_transient_version, timeout, wait_when_fail)
20+
21+
def enable_storage_network_setting(self):
22+
self.longhorn.enable_storage_network_setting()

e2e/libs/longhorn_deploy/base.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,13 @@ def setup_longhorn_ui_nodeport(self):
9292
logging(f"Setting up Longhorn UI nodeport failed")
9393
time.sleep(self.retry_count)
9494
assert False, "Setting up Longhorn UI nodeport failed"
95+
96+
def enable_storage_network_setting(self):
97+
command = "./pipelines/utilities/storage_network.sh"
98+
process = subprocess.Popen([command, "enable_storage_network_setting"],
99+
shell=False)
100+
process.wait()
101+
if process.returncode != 0:
102+
logging(f"Enabling storage network setting failed")
103+
time.sleep(self.retry_count)
104+
assert False, "Enabling storage network setting failed"

e2e/libs/longhorn_deploy/longhorn_deploy.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,7 @@ def upgrade(self, upgrade_to_transient_version, timeout, wait_when_fail):
6868
time.sleep(60)
6969
logging(f"Upgraded Longhorn")
7070
return upgraded
71+
72+
def enable_storage_network_setting(self):
73+
logging(f"Enabling storage network setting")
74+
self.longhorn.enable_storage_network_setting()

e2e/libs/network/network.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def get_control_plane_node_network_latency_in_ms():
2626
def setup_control_plane_network_latency():
2727
latency_in_ms = get_control_plane_node_network_latency_in_ms()
2828
if latency_in_ms != 0:
29-
control_plane_nodes = Node.list_node_names_by_role("control-plane")
29+
control_plane_nodes = Node().list_node_names_by_role("control-plane")
3030
for control_plane_node in control_plane_nodes:
3131
cmd = f"tc qdisc replace dev eth0 root netem delay {latency_in_ms}ms"
3232
res = NodeExec(control_plane_node).issue_cmd(cmd)
@@ -38,7 +38,7 @@ def setup_control_plane_network_latency():
3838
def cleanup_control_plane_network_latency():
3939
latency_in_ms = get_control_plane_node_network_latency_in_ms()
4040
if latency_in_ms != 0:
41-
control_plane_nodes = Node.list_node_names_by_role("control-plane")
41+
control_plane_nodes = Node().list_node_names_by_role("control-plane")
4242
for control_plane_node in control_plane_nodes:
4343
cmd = "tc qdisc del dev eth0 root"
4444
res = NodeExec(control_plane_node).issue_cmd(cmd)

e2e/libs/node/node.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,13 @@ class Node:
1919
DEFAULT_DISK_PATH = "/var/lib/longhorn/"
2020
DEFAULT_VOLUME_PATH = "/dev/longhorn/"
2121

22+
all_nodes = None
23+
control_plane_nodes = None
24+
worker_nodes = None
25+
2226
def __init__(self):
27+
if not Node.all_nodes:
28+
self.init_node_list()
2329
self.retry_count, self.retry_interval = get_retry_count_and_interval()
2430

2531
def mount_disk(self, disk_name, node_name):
@@ -162,13 +168,21 @@ def list_node_names_by_role(self, role="all"):
162168
if role not in ["all", "control-plane", "worker"]:
163169
raise ValueError("Role must be one of 'all', 'master' or 'worker'")
164170

171+
if role == "all":
172+
return Node.all_nodes
173+
elif role == "control-plane":
174+
return Node.control_plane_nodes
175+
elif role == "worker":
176+
return Node.worker_nodes
177+
178+
def init_node_list(self):
179+
165180
def filter_nodes(nodes, condition):
166181
return [node.metadata.name for node in nodes if condition(node)]
167182

168183
core_api = client.CoreV1Api()
169184
nodes = core_api.list_node().items
170-
171-
all_nodes = sorted(filter_nodes(nodes, lambda node: True))
185+
Node.all_nodes = sorted(filter_nodes(nodes, lambda node: True))
172186

173187
control_plane_labels = {
174188
"node-role.kubernetes.io/master": ["true"],
@@ -180,16 +194,14 @@ def filter_nodes(nodes, condition):
180194
label in node.metadata.labels and node.metadata.labels[label] in values
181195
for label, values in control_plane_labels.items()
182196
)
183-
control_plane_nodes = sorted(filter_nodes(nodes, condition))
197+
Node.control_plane_nodes = sorted(filter_nodes(nodes, condition))
184198

185-
worker_nodes = sorted([node for node in all_nodes if node not in control_plane_nodes])
199+
def has_no_schedule_taint(node):
200+
if not node.spec.taints:
201+
return False
202+
return any(taint.effect == "NoSchedule" for taint in node.spec.taints)
186203

187-
if role == "all":
188-
return all_nodes
189-
elif role == "control-plane":
190-
return control_plane_nodes
191-
elif role == "worker":
192-
return worker_nodes
204+
Node.worker_nodes = sorted([node.metadata.name for node in nodes if not has_no_schedule_taint(node)])
193205

194206
def set_node(self, node_name: str, allowScheduling: bool, evictionRequested: bool) -> object:
195207
for _ in range(self.retry_count):

0 commit comments

Comments
 (0)