computer-playbook/tests/unit/utils/test_valid_deploy_id.py

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()