mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-14 13:39:15 +03:00
nixosTest: remove hostname limitations
This commit is contained in:
parent
6d69171610
commit
d6e84a4574
3 changed files with 22 additions and 21 deletions
|
@ -130,6 +130,11 @@ starting them in parallel:
|
||||||
start_all()
|
start_all()
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If the hostname of a node contains characters that can't be used in a
|
||||||
|
Python variable name, those characters will be replaced with
|
||||||
|
underscores in the variable name, so `nodes.machine-a` will be exposed
|
||||||
|
to Python as `machine_a`.
|
||||||
|
|
||||||
## Machine objects {#ssec-machine-objects}
|
## Machine objects {#ssec-machine-objects}
|
||||||
|
|
||||||
The following methods are available on machine objects:
|
The following methods are available on machine objects:
|
||||||
|
|
|
@ -2,6 +2,7 @@ from contextlib import contextmanager
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Dict, Iterator, List, Union, Optional, Callable, ContextManager
|
from typing import Any, Dict, Iterator, List, Union, Optional, Callable, ContextManager
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
from test_driver.logger import rootlog
|
from test_driver.logger import rootlog
|
||||||
|
@ -28,6 +29,10 @@ def get_tmp_dir() -> Path:
|
||||||
return tmp_dir
|
return tmp_dir
|
||||||
|
|
||||||
|
|
||||||
|
def pythonize_name(name: str) -> str:
|
||||||
|
return re.sub(r"^[^A-z_]|[^A-z0-9_]", "_", name)
|
||||||
|
|
||||||
|
|
||||||
class Driver:
|
class Driver:
|
||||||
"""A handle to the driver that sets up the environment
|
"""A handle to the driver that sets up the environment
|
||||||
and runs the tests"""
|
and runs the tests"""
|
||||||
|
@ -113,7 +118,7 @@ class Driver:
|
||||||
polling_condition=self.polling_condition,
|
polling_condition=self.polling_condition,
|
||||||
Machine=Machine, # for typing
|
Machine=Machine, # for typing
|
||||||
)
|
)
|
||||||
machine_symbols = {m.name: m for m in self.machines}
|
machine_symbols = {pythonize_name(m.name): m for m in self.machines}
|
||||||
# If there's exactly one machine, make it available under the name
|
# If there's exactly one machine, make it available under the name
|
||||||
# "machine", even if it's not called that.
|
# "machine", even if it's not called that.
|
||||||
if len(self.machines) == 1:
|
if len(self.machines) == 1:
|
||||||
|
|
|
@ -21,29 +21,20 @@ let
|
||||||
in
|
in
|
||||||
nodesList ++ lib.optional (lib.length nodesList == 1 && !lib.elem "machine" nodesList) "machine";
|
nodesList ++ lib.optional (lib.length nodesList == 1 && !lib.elem "machine" nodesList) "machine";
|
||||||
|
|
||||||
# TODO: This is an implementation error and needs fixing
|
pythonizeName = name:
|
||||||
# the testing famework cannot legitimately restrict hostnames further
|
let
|
||||||
# beyond RFC1035
|
head = lib.substring 0 1 name;
|
||||||
invalidNodeNames = lib.filter
|
tail = lib.substring 1 (-1) name;
|
||||||
(node: builtins.match "^[A-z_]([A-z0-9_]+)?$" node == null)
|
in
|
||||||
nodeHostNames;
|
(if builtins.match "[A-z_]" head == null then "_" else head) +
|
||||||
|
lib.stringAsChars (c: if builtins.match "[A-z0-9_]" c == null then "_" else c) tail;
|
||||||
|
|
||||||
uniqueVlans = lib.unique (builtins.concatLists vlans);
|
uniqueVlans = lib.unique (builtins.concatLists vlans);
|
||||||
vlanNames = map (i: "vlan${toString i}: VLan;") uniqueVlans;
|
vlanNames = map (i: "vlan${toString i}: VLan;") uniqueVlans;
|
||||||
machineNames = map (name: "${name}: Machine;") nodeHostNames;
|
pythonizedNames = map pythonizeName nodeHostNames;
|
||||||
|
machineNames = map (name: "${name}: Machine;") pythonizedNames;
|
||||||
|
|
||||||
withChecks =
|
withChecks = lib.warnIf config.skipLint "Linting is disabled";
|
||||||
if lib.length invalidNodeNames > 0 then
|
|
||||||
throw ''
|
|
||||||
Cannot create machines out of (${lib.concatStringsSep ", " invalidNodeNames})!
|
|
||||||
All machines are referenced as python variables in the testing framework which will break the
|
|
||||||
script when special characters are used.
|
|
||||||
|
|
||||||
This is an IMPLEMENTATION ERROR and needs to be fixed. Meanwhile,
|
|
||||||
please stick to alphanumeric chars and underscores as separation.
|
|
||||||
''
|
|
||||||
else
|
|
||||||
lib.warnIf config.skipLint "Linting is disabled";
|
|
||||||
|
|
||||||
driver =
|
driver =
|
||||||
hostPkgs.runCommand "nixos-test-driver-${config.name}"
|
hostPkgs.runCommand "nixos-test-driver-${config.name}"
|
||||||
|
@ -87,7 +78,7 @@ let
|
||||||
${testDriver}/bin/generate-driver-symbols
|
${testDriver}/bin/generate-driver-symbols
|
||||||
${lib.optionalString (!config.skipLint) ''
|
${lib.optionalString (!config.skipLint) ''
|
||||||
PYFLAKES_BUILTINS="$(
|
PYFLAKES_BUILTINS="$(
|
||||||
echo -n ${lib.escapeShellArg (lib.concatStringsSep "," nodeHostNames)},
|
echo -n ${lib.escapeShellArg (lib.concatStringsSep "," pythonizedNames)},
|
||||||
< ${lib.escapeShellArg "driver-symbols"}
|
< ${lib.escapeShellArg "driver-symbols"}
|
||||||
)" ${hostPkgs.python3Packages.pyflakes}/bin/pyflakes $out/test-script
|
)" ${hostPkgs.python3Packages.pyflakes}/bin/pyflakes $out/test-script
|
||||||
''}
|
''}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue