mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-29 15:06:26 +02:00
Added validation for deploy application ids
This commit is contained in:
116
tests/unit/utils/test_valid_deploy_id.py
Normal file
116
tests/unit/utils/test_valid_deploy_id.py
Normal file
@@ -0,0 +1,116 @@
|
||||
# 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()
|
Reference in New Issue
Block a user