def test_set_field_defaults(self):
        """
        Test that `set_field_defaults` sets port to `MYSQL_SERVER_DEFAULT_PORT` if not specified.

        The `set_field_defaults` method is called when a MySQLServer is first created.
        """
        default_mysql_server = MySQLServerFactory()
        self.assertEqual(default_mysql_server.port, MYSQL_SERVER_DEFAULT_PORT)
        custom_mysql_server = MySQLServerFactory(port=1234)
        self.assertEqual(custom_mysql_server.port, 1234)
 def setUp(self):
     self.mysql_server = MySQLServerFactory()
class MySQLServerTest(TestCase):
    """
    Test cases for the MySQLServer model.
    """
    def setUp(self):
        self.mysql_server = MySQLServerFactory()

    def test_default_settings_name(self):
        """
        Test that MySQLServer defines `DEFAULT_SETTINGS_NAME` field with appropriate value.
        """
        try:
            default_settings_name = MySQLServer.DEFAULT_SETTINGS_NAME
        except AttributeError:
            self.fail('MySQLServer must define `DEFAULT_SETTINGS_NAME` field.')
        else:
            self.assertEqual(default_settings_name,
                             'DEFAULT_INSTANCE_MYSQL_URL')

    def test_protocol(self):
        """
        Test that `protocol` property returns correct value.
        """
        self.assertEqual(self.mysql_server.protocol, 'mysql')

    @ddt.data(
        (None, 'user', 'pass', 'mysql://*****:*****@mysql-server'),
        (None, 'user', None, 'mysql://user@mysql-server'),
        (None, None, 'pass', 'mysql://mysql-server'),
        (None, None, None, 'mysql://mysql-server'),
        (1234, 'user', 'pass', 'mysql://*****:*****@mysql-server:1234'),
        (1234, 'user', None, 'mysql://user@mysql-server:1234'),
        (1234, None, 'pass', 'mysql://mysql-server:1234'),
        (1234, None, None, 'mysql://mysql-server:1234'),
    )
    @ddt.unpack
    def test_url(self, port, username, password, expected_url):
        """
        Test that `url` property returns correct URL.
        """
        self.mysql_server.hostname = 'mysql-server'
        if port:
            self.mysql_server.port = port
        if username:
            self.mysql_server.username = username
        if password:
            self.mysql_server.password = password
        self.mysql_server.save()
        self.assertEqual(self.mysql_server.url, expected_url)

    @ddt.data(
        (None, 'user', 'pass', True),
        (None, 'user', 'word', False),
        (None, 'name', 'pass', False),
        (None, 'name', 'word', False),
        (1234, 'user', 'pass', True),
        (1234, 'user', 'word', False),
        (1234, 'name', 'pass', False),
        (1234, 'name', 'word', False),
        (5678, 'user', 'pass', False),
        (5678, 'user', 'word', False),
        (5678, 'name', 'pass', False),
        (5678, 'name', 'word', False),
    )
    @ddt.unpack
    def test_settings_match(self, port, username, password, expected_result):
        """
        Test that `settings_match` method correctly reports whether settings of a MySQL server
        match the settings passed to the method.
        """
        # If caller does not specify `port`, `settings_match` should compare
        # port of MySQL server to `MYSQL_SERVER_DEFAULT_PORT`,
        # so only set port on MySQL server if it is not `None`.
        if port:
            self.mysql_server.port = 1234
        self.mysql_server.username = '******'
        self.mysql_server.password = '******'
        self.mysql_server.save()
        self.assertEqual(
            self.mysql_server.settings_match(username, password, port),
            expected_result)

    def test_set_field_defaults(self):
        """
        Test that `set_field_defaults` sets port to `MYSQL_SERVER_DEFAULT_PORT` if not specified.

        The `set_field_defaults` method is called when a MySQLServer is first created.
        """
        default_mysql_server = MySQLServerFactory()
        self.assertEqual(default_mysql_server.port, MYSQL_SERVER_DEFAULT_PORT)
        custom_mysql_server = MySQLServerFactory(port=1234)
        self.assertEqual(custom_mysql_server.port, 1234)
 def setUp(self):
     self.mysql_server = MySQLServerFactory()
class MySQLServerTest(TestCase):
    """
    Test cases for the MySQLServer model.
    """
    def setUp(self):
        self.mysql_server = MySQLServerFactory()

    def test_default_settings_name(self):
        """
        Test that MySQLServer defines `DEFAULT_SETTINGS_NAME` field with appropriate value.
        """
        try:
            default_settings_name = MySQLServer.DEFAULT_SETTINGS_NAME
        except AttributeError:
            self.fail('MySQLServer must define `DEFAULT_SETTINGS_NAME` field.')
        else:
            self.assertEqual(default_settings_name, 'DEFAULT_INSTANCE_MYSQL_URL')

    def test_protocol(self):
        """
        Test that `protocol` property returns correct value.
        """
        self.assertEqual(self.mysql_server.protocol, 'mysql')

    @ddt.data(
        (None, 'user', 'pass', 'mysql://*****:*****@mysql-server'),
        (None, 'user', None, 'mysql://user@mysql-server'),
        (None, None, 'pass', 'mysql://mysql-server'),
        (None, None, None, 'mysql://mysql-server'),
        (1234, 'user', 'pass', 'mysql://*****:*****@mysql-server:1234'),
        (1234, 'user', None, 'mysql://user@mysql-server:1234'),
        (1234, None, 'pass', 'mysql://mysql-server:1234'),
        (1234, None, None, 'mysql://mysql-server:1234'),
    )
    @ddt.unpack
    def test_url(self, port, username, password, expected_url):
        """
        Test that `url` property returns correct URL.
        """
        self.mysql_server.hostname = 'mysql-server'
        if port:
            self.mysql_server.port = port
        if username:
            self.mysql_server.username = username
        if password:
            self.mysql_server.password = password
        self.mysql_server.save()
        self.assertEqual(self.mysql_server.url, expected_url)

    @ddt.data(
        (None, 'user', 'pass', True),
        (None, 'user', 'word', False),
        (None, 'name', 'pass', False),
        (None, 'name', 'word', False),
        (1234, 'user', 'pass', True),
        (1234, 'user', 'word', False),
        (1234, 'name', 'pass', False),
        (1234, 'name', 'word', False),
        (5678, 'user', 'pass', False),
        (5678, 'user', 'word', False),
        (5678, 'name', 'pass', False),
        (5678, 'name', 'word', False),
    )
    @ddt.unpack
    def test_settings_match(self, port, username, password, expected_result):
        """
        Test that `settings_match` method correctly reports whether settings of a MySQL server
        match the settings passed to the method.
        """
        # If caller does not specify `port`, `settings_match` should compare
        # port of MySQL server to `MYSQL_SERVER_DEFAULT_PORT`,
        # so only set port on MySQL server if it is not `None`.
        if port:
            self.mysql_server.port = 1234
        self.mysql_server.username = '******'
        self.mysql_server.password = '******'
        self.mysql_server.save()
        self.assertEqual(self.mysql_server.settings_match(username, password, port), expected_result)

    def test_set_field_defaults(self):
        """
        Test that `set_field_defaults` sets port to `MYSQL_SERVER_DEFAULT_PORT` if not specified.

        The `set_field_defaults` method is called when a MySQLServer is first created.
        """
        default_mysql_server = MySQLServerFactory()
        self.assertEqual(default_mysql_server.port, MYSQL_SERVER_DEFAULT_PORT)
        custom_mysql_server = MySQLServerFactory(port=1234)
        self.assertEqual(custom_mysql_server.port, 1234)