import os
import sys
import unittest

sys.path.insert(0, os.path.dirname(__file__))

import validation


class TestValidationHelpers(unittest.TestCase):
    def test_valid_domain_name(self):
        self.assertTrue(validation.is_valid_domain_name("example.com"))
        self.assertTrue(validation.is_valid_domain_name("sub.example.com"))

    def test_invalid_domain_name_blocks_traversal_like_values(self):
        for candidate in ("..", ".", "example", "example..com", "-bad.example", "bad-.example"):
            self.assertFalse(validation.is_valid_domain_name(candidate), candidate)

    def test_valid_origin_host(self):
        self.assertTrue(validation.is_valid_origin_host("example.com:4316"))
        self.assertTrue(validation.is_valid_origin_host("192.0.2.10:4316"))

    def test_invalid_origin_host(self):
        self.assertFalse(validation.is_valid_origin_host("../etc/passwd"))
        self.assertFalse(validation.is_valid_origin_host("bad host:4316"))

    def test_system_username_validation(self):
        self.assertTrue(validation.is_valid_system_username("web_user"))
        self.assertFalse(validation.is_valid_system_username("Root"))
        self.assertFalse(validation.is_valid_system_username("bad/user"))

    def test_db_identifier_validation(self):
        self.assertTrue(validation.is_valid_db_identifier("app_db_01"))
        self.assertFalse(validation.is_valid_db_identifier("app-db"))
        self.assertFalse(validation.is_valid_db_identifier("app db"))


if __name__ == "__main__":
    unittest.main()
