Skip to content

Commit c24c2fe

Browse files
committed
Fix DNS UI forms to support Enter key submission and improve PDNS test framework
- Add @finish handler to DNS form components (AddDnsServer, DeleteDnsServer, CreateDnsZone, DeleteDnsZone, CreateDnsRecord) to enable Enter key form submission in addition to Ctrl+Enter - Change submit buttons from @click to htmlType='submit' for proper form submission handling - Improve PDNS test framework with polling mechanism to wait for PDNS readiness - Add pdns_unavailable flag to gracefully skip tests when PDNS is not reachable - Add setUp method to check PDNS availability before each test
1 parent 8f71ce6 commit c24c2fe

6 files changed

Lines changed: 49 additions & 16 deletions

File tree

test/integration/smoke/test_dns_framework_powerdns.py

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ def setUpClass(cls):
3434
"""
3535
super(TestCloudStackDNSFramework, cls).setUpClass()
3636
cls.api_client = cls.testClient.getApiClient()
37+
cls.pdns_unavailable = False
3738

3839
cls.logger = logging.getLogger("TestCloudStackDNSFramework")
3940
cls.stream_handler = logging.StreamHandler()
@@ -77,14 +78,41 @@ def setUpClass(cls):
7778
cls.tearDownClass()
7879
raise Exception(f"Failed to start PDNS:\n{result.stderr}")
7980

80-
# Allow PDNS to initialize
81-
time.sleep(15)
81+
# Wait for PDNS to be ready with polling
82+
cls.pdns_url = f"http://{cls.marvin_vm_ip}"
83+
cls.logger.info(f"PDNS endpoint: {cls.pdns_url}:8081")
84+
cls._wait_for_pdns_ready()
8285

83-
cls.logger.info("PDNS is up and running")
86+
@classmethod
87+
def _wait_for_pdns_ready(cls, timeout=30, interval=1):
88+
"""
89+
Poll PDNS API until it responds or timeout is reached.
90+
Logs a message and sets cls.pdns_unavailable if PDNS is not reachable.
91+
"""
92+
import urllib.request
93+
api_url = f"{cls.pdns_url}:8081/api/v1/servers"
94+
cls.logger.info(f"Waiting for PDNS to be ready at {api_url} (timeout: {timeout}s)")
95+
for _ in range(timeout // interval):
96+
try:
97+
req = urllib.request.Request(api_url)
98+
req.add_header("X-API-Key", "supersecretapikey")
99+
resp = urllib.request.urlopen(req, timeout=2)
100+
if resp.status == 200:
101+
cls.logger.info("PDNS is up and running")
102+
cls.pdns_unavailable = False
103+
return
104+
except Exception:
105+
pass
106+
time.sleep(interval)
107+
108+
cls.logger.warning("PDNS did not become ready within timeout; skipping tests")
109+
cls.pdns_unavailable = True
110+
111+
def setUp(self):
112+
if self.__class__.pdns_unavailable:
113+
import unittest
114+
raise unittest.SkipTest("PDNS is unavailable; skipping test")
84115

85-
# Construct PDNS URL once
86-
cls.pdns_url = f"http://{cls.marvin_vm_ip}"
87-
cls.logger.info(f"PDNS endpoint: {cls.pdns_url}")
88116

89117
@attr(tags=["advanced"], required_hardware="true")
90118
def test_01_list_dns_providers(self):

ui/src/views/network/dns/AddDnsServer.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
ref="formRef"
2323
:model="form"
2424
:rules="rules"
25-
layout="vertical">
25+
layout="vertical"
26+
@finish="handleSubmit">
2627

2728
<a-form-item name="name" ref="name">
2829
<template #label>
@@ -143,7 +144,7 @@
143144
<a-button
144145
type="primary"
145146
:loading="loading"
146-
@click="handleSubmit">
147+
htmlType="submit">
147148
{{ $t('label.ok') }}
148149
</a-button>
149150
</div>

ui/src/views/network/dns/CreateDnsRecord.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
ref="formRef"
2323
:model="form"
2424
:rules="rules"
25-
layout="vertical">
25+
layout="vertical"
26+
@finish="handleSubmit">
2627

2728
<a-form-item name="name" ref="name">
2829
<template #label>
@@ -89,7 +90,7 @@
8990
<a-button
9091
type="primary"
9192
:loading="loading"
92-
@click="handleSubmit">
93+
htmlType="submit">
9394
{{ $t('label.ok') }}
9495
</a-button>
9596
</div>

ui/src/views/network/dns/CreateDnsZone.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@
2222
ref="formRef"
2323
:model="form"
2424
:rules="rules"
25-
layout="vertical">
25+
layout="vertical"
26+
@finish="handleSubmit">
2627

2728
<a-form-item name="dnsserverid" ref="dnsserverid">
2829
<template #label>
@@ -81,7 +82,7 @@
8182
<a-button
8283
type="primary"
8384
:loading="loading"
84-
@click="handleSubmit">
85+
htmlType="submit">
8586
{{ $t('label.ok') }}
8687
</a-button>
8788
</div>

ui/src/views/network/dns/DeleteDnsServer.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@
5050
ref="formRef"
5151
:model="form"
5252
:rules="rules"
53-
layout="vertical">
53+
layout="vertical"
54+
@finish="handleSubmit">
5455

5556
<a-form-item name="name" ref="name">
5657
<a-input
@@ -82,7 +83,7 @@
8283
danger
8384
:disabled="form.name !== resource.name"
8485
:loading="loading"
85-
@click="handleSubmit">
86+
htmlType="submit">
8687
{{ $t('label.delete') }}
8788
</a-button>
8889
</div>

ui/src/views/network/dns/DeleteDnsZone.vue

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@
3434
ref="formRef"
3535
:model="form"
3636
:rules="rules"
37-
layout="vertical">
37+
layout="vertical"
38+
@finish="handleSubmit">
3839

3940
<a-form-item name="name" ref="name">
4041
<a-input
@@ -59,7 +60,7 @@
5960
danger
6061
:disabled="form.name !== resource.name"
6162
:loading="loading"
62-
@click="handleSubmit">
63+
htmlType="submit">
6364
{{ $t('label.delete') }}
6465
</a-button>
6566
</div>

0 commit comments

Comments
 (0)