mirror of
https://github.com/retspen/webvirtcloud
synced 2026-11-08 11:16:47 +00:00
The first page of the create wizard built the next page's URL from a reversed ".../x86_64/pc/" by replacing "x86_64" with the chosen architecture and then the first "pc" with the machine type. An architecture containing "pc" got the machine type inside its name: ppc64le with pseries went to /instances/create/1/ppseries64le/pc/, so VMs could not be created on PowerPC hosts. The URL is now reversed with the placeholders __arch__ and __machine__, which the script replaces with the URL-encoded values. The test renders the page, runs the script with node and fails on the previous template for ppc64le.
36 lines
1.7 KiB
Python
36 lines
1.7 KiB
Python
"""The create wizard's first page sends the browser to the next page for the
|
|
chosen architecture and machine type; the URL is built from placeholders."""
|
|
|
|
import re
|
|
import subprocess
|
|
import shutil
|
|
import unittest
|
|
|
|
from computes.models import Compute
|
|
from django.contrib.auth import get_user_model
|
|
from django.template.loader import render_to_string
|
|
from django.test import RequestFactory, TestCase
|
|
|
|
|
|
class CreateWizardUrlTests(TestCase):
|
|
def render_script(self):
|
|
compute = Compute.objects.create(name="cw", hostname="10.0.0.6", login="u", password="p", type=1)
|
|
request = RequestFactory().get("/")
|
|
request.user = get_user_model().objects.create_superuser("cw-admin", "cw@example.com", "pw")
|
|
page = render_to_string("create_instance_w1.html", {"compute": compute}, request=request)
|
|
# the statement that builds the URL from arch and machine
|
|
return re.search(r"\burl = (.*?);", page, re.S).group(1)
|
|
|
|
@unittest.skipUnless(shutil.which("node"), "node is not installed")
|
|
def test_arch_and_machine_names_land_in_their_segments(self):
|
|
script = self.render_script()
|
|
cases = {
|
|
("x86_64", "q35"): "x86_64/q35/",
|
|
("ppc64le", "pseries"): "ppc64le/pseries/", # contains "pc"
|
|
("aarch64", "virt"): "aarch64/virt/",
|
|
}
|
|
for (arch, machine), tail in cases.items():
|
|
js = "const arch = %r, machine = %r; console.log(%s);" % (arch, machine, script)
|
|
out = subprocess.run(["node", "-e", js], capture_output=True, text=True, timeout=30)
|
|
with self.subTest(arch=arch):
|
|
self.assertTrue(out.stdout.strip().endswith(f"/{tail}"), out.stdout + out.stderr)
|