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