mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-07-17 22:14:25 +02:00
117 lines
4.2 KiB
Python
117 lines
4.2 KiB
Python
# File: tests/unit/utils/test_valid_deploy_id.py
|
|
import os
|
|
import tempfile
|
|
import unittest
|
|
import yaml
|
|
from utils.valid_deploy_id import ValidDeployId
|
|
|
|
class TestValidDeployId(unittest.TestCase):
|
|
def setUp(self):
|
|
# Create a temporary directory for roles
|
|
self.temp_dir = tempfile.TemporaryDirectory()
|
|
self.roles_dir = os.path.join(self.temp_dir.name, 'roles')
|
|
os.makedirs(self.roles_dir)
|
|
|
|
# Create a dummy role with application_id 'app1'
|
|
role_path = os.path.join(self.roles_dir, 'role1', 'vars')
|
|
os.makedirs(role_path)
|
|
with open(os.path.join(role_path, 'main.yml'), 'w', encoding='utf-8') as f:
|
|
yaml.safe_dump({'application_id': 'app1'}, f)
|
|
|
|
# Initialize validator with our temp roles_dir
|
|
self.validator = ValidDeployId(roles_dir=self.roles_dir)
|
|
|
|
def tearDown(self):
|
|
self.temp_dir.cleanup()
|
|
|
|
def _write_ini_inventory(self, content):
|
|
fd, path = tempfile.mkstemp(suffix='.ini')
|
|
os.close(fd)
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|
f.write(content)
|
|
return path
|
|
|
|
def _write_yaml_inventory(self, data):
|
|
fd, path = tempfile.mkstemp(suffix='.yml')
|
|
os.close(fd)
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|
yaml.safe_dump(data, f)
|
|
return path
|
|
|
|
def test_valid_in_roles_and_ini_inventory(self):
|
|
# Inventory contains app1 as a host
|
|
ini_content = """
|
|
[servers]
|
|
app1,otherhost
|
|
"""
|
|
inv = self._write_ini_inventory(ini_content)
|
|
result = self.validator.validate(inv, ['app1'])
|
|
self.assertEqual(result, {}, "app1 should be valid when in roles and ini inventory")
|
|
|
|
def test_missing_in_roles(self):
|
|
# Inventory contains app2 but roles only have app1
|
|
ini_content = """
|
|
[servers]
|
|
app2
|
|
"""
|
|
inv = self._write_ini_inventory(ini_content)
|
|
result = self.validator.validate(inv, ['app2'])
|
|
# app2 not in roles, but in inventory
|
|
expected = {'app2': {'in_roles': False, 'in_inventory': True}}
|
|
self.assertEqual(result, expected)
|
|
|
|
def test_missing_in_inventory_ini(self):
|
|
# Roles have app1 but inventory does not mention it
|
|
ini_content = """
|
|
[servers]
|
|
otherhost
|
|
"""
|
|
inv = self._write_ini_inventory(ini_content)
|
|
result = self.validator.validate(inv, ['app1'])
|
|
expected = {'app1': {'in_roles': True, 'in_inventory': False}}
|
|
self.assertEqual(result, expected)
|
|
|
|
def test_missing_both_ini(self):
|
|
# Neither roles nor inventory have appX
|
|
ini_content = """
|
|
[servers]
|
|
otherhost
|
|
"""
|
|
inv = self._write_ini_inventory(ini_content)
|
|
result = self.validator.validate(inv, ['appX'])
|
|
expected = {'appX': {'in_roles': False, 'in_inventory': False}}
|
|
self.assertEqual(result, expected)
|
|
|
|
def test_valid_in_roles_and_yaml_inventory(self):
|
|
# YAML inventory with app1 as a dict key
|
|
data = {'app1': {'hosts': ['app1']}, 'group': {'app1': {}}}
|
|
inv = self._write_yaml_inventory(data)
|
|
result = self.validator.validate(inv, ['app1'])
|
|
self.assertEqual(result, {}, "app1 should be valid in roles and yaml inventory")
|
|
|
|
def test_missing_in_roles_yaml(self):
|
|
# YAML inventory has app2 key but roles only have app1
|
|
data = {'app2': {}}
|
|
inv = self._write_yaml_inventory(data)
|
|
result = self.validator.validate(inv, ['app2'])
|
|
expected = {'app2': {'in_roles': False, 'in_inventory': True}}
|
|
self.assertEqual(result, expected)
|
|
|
|
def test_missing_in_inventory_yaml(self):
|
|
# Roles have app1 but YAML inventory has no app1
|
|
data = {'group': {'other': {}}}
|
|
inv = self._write_yaml_inventory(data)
|
|
result = self.validator.validate(inv, ['app1'])
|
|
expected = {'app1': {'in_roles': True, 'in_inventory': False}}
|
|
self.assertEqual(result, expected)
|
|
|
|
def test_missing_both_yaml(self):
|
|
data = {}
|
|
inv = self._write_yaml_inventory(data)
|
|
result = self.validator.validate(inv, ['unknown'])
|
|
expected = {'unknown': {'in_roles': False, 'in_inventory': False}}
|
|
self.assertEqual(result, expected)
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|