Example #1
0
    def test_pick_name_duplicate_inst(self):
        """test pick_name function when there is a duplicate."""

        expected_hostname = None

        fake_service = 'mongodb'
        fake_service_type = 'masterful'
        fake_instance_id = 'i-test'

        fake_db = self.mox.CreateMockAnything()

        fake_db.servers = self.mox.CreateMockAnything()
        fake_registrar = registrar.Registrar()

        self.mox.StubOutWithMock(aerostat, 'get_hostname')
        aerostat.get_hostname(fake_db, fake_instance_id).AndReturn(
                'mongodb-master')
        self.mox.StubOutWithMock(fake_registrar, 'check_dup')
        fake_registrar.check_dup(fake_db, fake_instance_id).AndReturn(True)

        self.mox.ReplayAll()

        test_hostname = fake_registrar.pick_name(
                fake_db, fake_service,
                fake_service_type, fake_instance_id)

        self.assertEqual(test_hostname, expected_hostname)
Example #2
0
    def test_get_hostname(self):
        """Test get_hostname function."""

        expected_output = 'some-service-0'

        fake_row = {'hostname': 'some-service-0', 'instance_id': 'test-inst-id'}
        fake_db = self.mox.CreateMockAnything()
        fake_db.servers = self.mox.CreateMockAnything()
        fake_db.servers.find_one({'instance_id': 'test-inst-id'}).AndReturn(
                fake_row)

        self.mox.ReplayAll()


        self.assertEqual(expected_output,
                aerostat.get_hostname(fake_db, 'test-inst-id'))
Example #3
0
    def test_pick_name_duplicate_inst_no_host(self):
        """test pick_name when there is a duplicate, but no hostname."""

        # This tests the case where a master name swap is underway.
        # the <service>-master hostname is removed from the former instance.
        # then added to the new master. Meanwhile, the old master needs
        # to have a name picked. So we ignore the fact that its instance_id
        # is already in the database as long as it has no hostname.

        # Replace fallen master.
        expected_hostname1 = 'mongodb-master'
        # You were master, replace gap in slave names.
        expected_hostname2 = 'mongodb-slave-1'

        fake_service = 'mongodb'
        fake_service_type = 'masterful'
        fake_instance_id1 = 'i-test'
        fake_instance_id2 = 'i-test2'

        # Missing Master
        fake_row1 = {'hostname': '', 'ip': '12.123.234.3',
                'service': 'mongodb', 'service_type': 'masterful',
                'instance_id': 'i-test'}

        # Missing Slave
        fake_row2 = [
                fake_row1,
                {'hostname': 'mongodb-master', 'ip': '12.1.1.2',
                 'service': 'mongodb', 'service_type': 'masterful',
                 'instance_id': 'i-test2'}]

        fake_db = self.mox.CreateMockAnything()

        fake_db.servers = self.mox.CreateMockAnything()
        fake_db.servers.find(
                {'service': fake_service}).AndReturn([fake_row1])
        fake_db.servers.find(
                {'service': fake_service}).AndReturn(fake_row2)

        fake_registrar = registrar.Registrar()

        self.mox.StubOutWithMock(aerostat, 'get_hostname')
        aerostat.get_hostname(fake_db, fake_instance_id1).AndReturn(
                '')
        aerostat.get_hostname(fake_db, fake_instance_id2).AndReturn(
                '')

        self.mox.StubOutWithMock(fake_registrar, 'check_dup')
        fake_registrar.check_dup(fake_db, fake_instance_id1).AndReturn(True)
        fake_registrar.check_dup(fake_db, fake_instance_id2).AndReturn(True)

        # Called for Slave.
        self.mox.StubOutWithMock(aerostat, 'hostname_exists')
        aerostat.hostname_exists(
                fake_db, 'mongodb-master').AndReturn(True)

        self.mox.StubOutWithMock(fake_registrar, 'hostname_instance_exists')
        fake_registrar.hostname_instance_exists(
                fake_db, 'mongodb-master').AndReturn(True)

        self.mox.StubOutWithMock(fake_registrar, 'get_smallest_gap')
        fake_registrar.get_smallest_gap(fake_db, fake_service).AndReturn(expected_hostname2)

        self.mox.ReplayAll()

        test_hostname1 = fake_registrar.pick_name(
                fake_db, fake_service,
                fake_service_type, fake_instance_id1)

        test_hostname2 = fake_registrar.pick_name(
                fake_db, fake_service,
                fake_service_type, fake_instance_id2)

        self.assertEqual(test_hostname1, expected_hostname1)
        self.assertEqual(test_hostname2, expected_hostname2)
Example #4
0
    def test_pick_name_duplicate_inst_no_host(self):
        """test pick_name when there is a duplicate, but no hostname."""

        # This tests the case where a master name swap is underway.
        # the <service>-master hostname is removed from the former instance.
        # then added to the new master. Meanwhile, the old master needs
        # to have a name picked. So we ignore the fact that its instance_id
        # is already in the database as long as it has no hostname.

        # Replace fallen master.
        expected_hostname1 = "mongodb-master"
        # You were master, replace gap in slave names.
        expected_hostname2 = "mongodb-slave-1"

        fake_service = "mongodb"
        fake_service_type = "masterful"
        fake_instance_id1 = "i-test"
        fake_instance_id2 = "i-test2"

        # Missing Master
        fake_row1 = {
            "hostname": "",
            "ip": "12.123.234.3",
            "service": "mongodb",
            "service_type": "masterful",
            "instance_id": "i-test",
        }

        # Missing Slave
        fake_row2 = [
            fake_row1,
            {
                "hostname": "mongodb-master",
                "ip": "12.1.1.2",
                "service": "mongodb",
                "service_type": "masterful",
                "instance_id": "i-test2",
            },
        ]

        fake_db = self.mox.CreateMockAnything()

        fake_db.servers = self.mox.CreateMockAnything()
        fake_db.servers.find({"service": fake_service}).AndReturn([fake_row1])
        fake_db.servers.find({"service": fake_service}).AndReturn(fake_row2)

        fake_registrar = registrar.Registrar()

        self.mox.StubOutWithMock(aerostat, "get_hostname")
        aerostat.get_hostname(fake_db, fake_instance_id1).AndReturn("")
        aerostat.get_hostname(fake_db, fake_instance_id2).AndReturn("")

        self.mox.StubOutWithMock(fake_registrar, "check_dup")
        fake_registrar.check_dup(fake_db, fake_instance_id1).AndReturn(True)
        fake_registrar.check_dup(fake_db, fake_instance_id2).AndReturn(True)

        # Called for Slave.
        self.mox.StubOutWithMock(aerostat, "hostname_exists")
        aerostat.hostname_exists(fake_db, "mongodb-master").AndReturn(True)

        self.mox.StubOutWithMock(fake_registrar, "hostname_instance_exists")
        fake_registrar.hostname_instance_exists(fake_db, "mongodb-master").AndReturn(True)

        self.mox.StubOutWithMock(fake_registrar, "get_smallest_gap")
        fake_registrar.get_smallest_gap(fake_db, fake_service).AndReturn(expected_hostname2)

        self.mox.ReplayAll()

        test_hostname1 = fake_registrar.pick_name(fake_db, fake_service, fake_service_type, fake_instance_id1)

        test_hostname2 = fake_registrar.pick_name(fake_db, fake_service, fake_service_type, fake_instance_id2)

        self.assertEqual(test_hostname1, expected_hostname1)
        self.assertEqual(test_hostname2, expected_hostname2)