-
Notifications
You must be signed in to change notification settings - Fork 0
test: add hive_lib, unit and smoke tests #6
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: feature/ubuntu24-bootstrap
Are you sure you want to change the base?
Changes from all commits
ffca66d
351d30e
5217e56
7b81cbe
0b62039
31d9ff6
f829299
c9cf37b
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| [project] | ||
| name = "build-hive" | ||
| version = "0.0.1" | ||
| requires-python = ">=3.11" | ||
| dependencies = [] | ||
|
|
||
| [tool.pytest.ini_options] | ||
| addopts = "-q --disable-warnings" | ||
| pythonpath = ["scripts/bootstrap/ubuntu24"] |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,73 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| #!/usr/bin/env python3 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """Hive shared utilities for unit testing and logic reuse. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Includes role suggestion logic and message signing/validation helpers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| from collections import Counter | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| import json, hmac, hashlib | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MAGIC = "BUILD/HELLO/v1" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def suggest_cloudstack_role(peers, vnf_available=False): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """Suggest a role based on current peers. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers: list of dicts with 'role' or nested identity role | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| vnf_available: bool indicating if a VNF broker is reachable | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Returns dict: {role, packages, config, reason} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| """ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| roles = Counter((p.get('role') or (p.get('identity') or {}).get('role') or 'unknown') for p in peers) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if roles.get('management-server', 0) == 0: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'role': 'management-server', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'packages': ['mysql-server','nfs-kernel-server','openjdk-17-jdk','git'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'config': {'db': 'mysql', 'nfs': True}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'reason': 'First management server needed' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if roles.get('cloudstack-builder', 0) < 2: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'role': 'cloudstack-builder', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'packages': ['openjdk-17-jdk','maven','git','build-essential'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'config': {'build_threads': 8}, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'reason': 'Increase build capacity' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| } | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| if roles.get('kvm-hypervisor', 0) == 0: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| return { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'role': 'kvm-hypervisor', | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'packages': ['qemu-kvm','libvirt-daemon-system','bridge-utils'], | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 'packages': ['qemu-kvm','libvirt-daemon-system','bridge-utils'], | |
| 'packages': ['qemu-kvm', 'libvirt-daemon-system', 'bridge-utils'], |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing spaces after commas in list literal. Per PEP 8, add spaces after commas: ['python3-requests', 'docker.io'].
| 'packages': ['python3-requests','docker.io'], | |
| 'packages': ['python3-requests', 'docker.io'], |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing spaces after commas in list literal. Per PEP 8, add spaces after commas: ['mysql-server', 'nfs-kernel-server', 'openjdk-17-jdk', 'git'].
| 'packages': ['mysql-server','nfs-kernel-server','openjdk-17-jdk','git'], | |
| 'config': {'db': 'mysql', 'nfs': True}, | |
| 'reason': 'First management server needed' | |
| } | |
| if roles.get('cloudstack-builder', 0) < 2: | |
| return { | |
| 'role': 'cloudstack-builder', | |
| 'packages': ['openjdk-17-jdk','maven','git','build-essential'], | |
| 'config': {'build_threads': 8}, | |
| 'reason': 'Increase build capacity' | |
| } | |
| if roles.get('kvm-hypervisor', 0) == 0: | |
| return { | |
| 'role': 'kvm-hypervisor', | |
| 'packages': ['qemu-kvm','libvirt-daemon-system','bridge-utils'], | |
| 'config': {'virt_network': 'default'}, | |
| 'reason': 'Provide hypervisor for functional tests' | |
| } | |
| if vnf_available and roles.get('vnf-tester', 0) == 0: | |
| return { | |
| 'role': 'vnf-tester', | |
| 'packages': ['python3-requests','docker.io'], | |
| 'config': {'broker_port': 8443}, | |
| 'reason': 'Validate VNF broker operations' | |
| } | |
| return { | |
| 'role': 'test-runner', | |
| 'packages': ['python3-pytest','curl','git'], | |
| 'packages': ['mysql-server', 'nfs-kernel-server', 'openjdk-17-jdk', 'git'], | |
| 'config': {'db': 'mysql', 'nfs': True}, | |
| 'reason': 'First management server needed' | |
| } | |
| if roles.get('cloudstack-builder', 0) < 2: | |
| return { | |
| 'role': 'cloudstack-builder', | |
| 'packages': ['openjdk-17-jdk', 'maven', 'git', 'build-essential'], | |
| 'config': {'build_threads': 8}, | |
| 'reason': 'Increase build capacity' | |
| } | |
| if roles.get('kvm-hypervisor', 0) == 0: | |
| return { | |
| 'role': 'kvm-hypervisor', | |
| 'packages': ['qemu-kvm', 'libvirt-daemon-system', 'bridge-utils'], | |
| 'config': {'virt_network': 'default'}, | |
| 'reason': 'Provide hypervisor for functional tests' | |
| } | |
| if vnf_available and roles.get('vnf-tester', 0) == 0: | |
| return { | |
| 'role': 'vnf-tester', | |
| 'packages': ['python3-requests', 'docker.io'], | |
| 'config': {'broker_port': 8443}, | |
| 'reason': 'Validate VNF broker operations' | |
| } | |
| return { | |
| 'role': 'test-runner', | |
| 'packages': ['python3-pytest', 'curl', 'git'], |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing spaces after commas in list literal. Per PEP 8, add spaces after commas: ['python3-pytest', 'curl', 'git'].
| 'packages': ['python3-pytest','curl','git'], | |
| 'packages': ['python3-pytest', 'curl', 'git'], |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing space after comma in tuple literal. Per PEP 8, add space after comma: separators=(',', ':').
| raw = json.dumps(pl, separators=(',',':')).encode('utf-8') | |
| raw = json.dumps(pl, separators=(', ', ':')).encode('utf-8') |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,5 @@ | ||
| #!/usr/bin/env bash | ||
| set -euo pipefail | ||
| python3 -m pip install --upgrade pip >/dev/null 2>&1 || true | ||
| python3 -m pip install pytest >/dev/null 2>&1 || true | ||
| pytest -q |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1 @@ | ||
| # tests package |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| import subprocess, sys | ||
|
|
||
|
|
||
| def run(cmd): | ||
| return subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True) | ||
|
|
||
|
|
||
| def test_py_compile_scripts(): | ||
| for path in [ | ||
| 'scripts/bootstrap/ubuntu24/peer_agent.py', | ||
| 'scripts/bootstrap/ubuntu24/advisor.py', | ||
| 'scripts/bootstrap/ubuntu24/message_bridge.py', | ||
| ]: | ||
| r = run([sys.executable, '-m', 'py_compile', path]) | ||
| assert r.returncode == 0, f"py_compile failed for {path}: {r.stderr}" | ||
|
|
||
|
|
||
| def test_advisor_help_exits_zero(): | ||
| r = run([sys.executable, 'scripts/bootstrap/ubuntu24/advisor.py', '--help']) | ||
| assert r.returncode == 0 | ||
| assert 'usage' in (r.stdout + r.stderr).lower() | ||
|
|
||
|
|
||
| def test_message_bridge_runs(): | ||
| r = run([sys.executable, 'scripts/bootstrap/ubuntu24/message_bridge.py', 'identity_assigned', '{"hostname":"x","role":"y"}']) | ||
| assert r.returncode == 0 |
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,42 @@ | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| from scripts.bootstrap.ubuntu24.hive_lib import suggest_cloudstack_role | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def test_first_management_server(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers = [] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| advice = suggest_cloudstack_role(peers) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert advice['role'] == 'management-server' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert 'mysql-server' in advice['packages'] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def test_second_role_cloudstack_builder_needed(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers = [ {'role': 'management-server'} ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| advice = suggest_cloudstack_role(peers) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert advice['role'] == 'cloudstack-builder' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert 'maven' in advice['packages'] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def test_hypervisor_after_two_builders(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'} ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| advice = suggest_cloudstack_role(peers) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert advice['role'] == 'kvm-hypervisor' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| assert 'qemu-kvm' in advice['packages'] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| def test_vnf_tester_when_broker_available(): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'} ] | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'} ] | |
| peers = [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'}] |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent spacing in list literal. Remove spaces after [ and before ] for consistency with PEP 8: [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}].
| peers = [ {'role': 'management-server'} ] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'cloudstack-builder' | |
| assert 'maven' in advice['packages'] | |
| def test_hypervisor_after_two_builders(): | |
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'} ] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'kvm-hypervisor' | |
| assert 'qemu-kvm' in advice['packages'] | |
| def test_vnf_tester_when_broker_available(): | |
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'} ] | |
| peers = [{'role': 'management-server'}] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'cloudstack-builder' | |
| assert 'maven' in advice['packages'] | |
| def test_hypervisor_after_two_builders(): | |
| peers = [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'kvm-hypervisor' | |
| assert 'qemu-kvm' in advice['packages'] | |
| def test_vnf_tester_when_broker_available(): | |
| peers = [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'}] |
Copilot
AI
Nov 8, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Inconsistent spacing in list literals. Lines 12, 19, and 26 have spaces after [ and before ] (e.g., [ {...} ]), while line 5 uses no spaces ([]). For consistency with PEP 8 and the multi-line list at lines 33-39, remove the extra spaces: [{'role': 'management-server'}].
| peers = [ {'role': 'management-server'} ] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'cloudstack-builder' | |
| assert 'maven' in advice['packages'] | |
| def test_hypervisor_after_two_builders(): | |
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'} ] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'kvm-hypervisor' | |
| assert 'qemu-kvm' in advice['packages'] | |
| def test_vnf_tester_when_broker_available(): | |
| peers = [ {'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'} ] | |
| peers = [{'role': 'management-server'}] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'cloudstack-builder' | |
| assert 'maven' in advice['packages'] | |
| def test_hypervisor_after_two_builders(): | |
| peers = [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}] | |
| advice = suggest_cloudstack_role(peers) | |
| assert advice['role'] == 'kvm-hypervisor' | |
| assert 'qemu-kvm' in advice['packages'] | |
| def test_vnf_tester_when_broker_available(): | |
| peers = [{'role': 'management-server'}, {'role': 'cloudstack-builder'}, {'role': 'cloudstack-builder'}, {'role': 'kvm-hypervisor'}] |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| from scripts.bootstrap.ubuntu24.hive_lib import sign, valid, MAGIC | ||
| import json | ||
|
|
||
| SECRET = b'supersecret' | ||
|
|
||
|
|
||
| def make_payload(): | ||
| return {'kind': 'HELLO', 'node_id': 'x', 'hostname': 'h', 'primary_ip': '1.2.3.4', 'candidate_ip': None, 'ts': '2025-01-01T00:00:00Z'} | ||
|
|
||
|
|
||
| def test_sign_and_valid_roundtrip(): | ||
| pl = make_payload() | ||
| raw = json.dumps(pl, separators=(',',':')).encode('utf-8') | ||
|
||
| sig = sign(raw, SECRET) | ||
| envelope = {'magic': MAGIC, 'payload': pl, 'sig': sig} | ||
| assert valid(envelope, SECRET) is True | ||
|
|
||
|
|
||
| def test_invalid_magic(): | ||
| pl = make_payload() | ||
| raw = json.dumps(pl, separators=(',',':')).encode('utf-8') | ||
|
||
| sig = sign(raw, SECRET) | ||
| envelope = {'magic': 'WRONG', 'payload': pl, 'sig': sig} | ||
| assert valid(envelope, SECRET) is False | ||
|
|
||
|
|
||
| def test_tampered_payload(): | ||
| pl = make_payload() | ||
| raw = json.dumps(pl, separators=(',',':')).encode('utf-8') | ||
|
||
| sig = sign(raw, SECRET) | ||
| pl['hostname'] = 'evil' | ||
| envelope = {'magic': MAGIC, 'payload': pl, 'sig': sig} | ||
| assert valid(envelope, SECRET) is False | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing spaces after commas in list literal. Per PEP 8, add spaces after commas:
['openjdk-17-jdk', 'maven', 'git', 'build-essential'].