def test_always_query(self): host_a = scheduler_models.Host(id=2) self.assertEqual(host_a.hostname, 'host2') self._do_query('UPDATE afe_hosts SET hostname="host2-updated" ' 'WHERE id=2') host_b = scheduler_models.Host(id=2, always_query=True) self.assertTrue(host_a is host_b, 'Cached instance not returned.') self.assertEqual(host_a.hostname, 'host2-updated', 'Database was not re-queried') # If either of these are called, a query was made when it shouldn't be. host_a._compare_fields_in_row = lambda _: self.fail('eek! a query!') host_a._update_fields_from_row = host_a._compare_fields_in_row host_c = scheduler_models.Host(id=2, always_query=False) self.assertTrue(host_a is host_c, 'Cached instance not returned')
def test_cmp_for_sort(self): expected_order = [ 'alice', 'Host1', 'host2', 'host3', 'host09', 'HOST010', 'host10', 'host11', 'yolkfolk'] hostname_idx = list(scheduler_models.Host._fields).index('hostname') row = [None] * len(scheduler_models.Host._fields) hosts = [] for hostname in expected_order: row[hostname_idx] = hostname hosts.append(scheduler_models.Host(row=row, new_record=True)) host1 = hosts[expected_order.index('Host1')] host010 = hosts[expected_order.index('HOST010')] host10 = hosts[expected_order.index('host10')] host3 = hosts[expected_order.index('host3')] alice = hosts[expected_order.index('alice')] self.assertEqual(0, scheduler_models.Host.cmp_for_sort(host10, host10)) self.assertEqual(1, scheduler_models.Host.cmp_for_sort(host10, host010)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host010, host10)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host1, host10)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host1, host010)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host3, host10)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host3, host010)) self.assertEqual(1, scheduler_models.Host.cmp_for_sort(host3, host1)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(host1, host3)) self.assertEqual(-1, scheduler_models.Host.cmp_for_sort(alice, host3)) self.assertEqual(1, scheduler_models.Host.cmp_for_sort(host3, alice)) self.assertEqual(0, scheduler_models.Host.cmp_for_sort(alice, alice)) hosts.sort(cmp=scheduler_models.Host.cmp_for_sort) self.assertEqual(expected_order, [h.hostname for h in hosts]) hosts.reverse() hosts.sort(cmp=scheduler_models.Host.cmp_for_sort) self.assertEqual(expected_order, [h.hostname for h in hosts])
def test_delete(self): host = scheduler_models.Host(id=3) host.delete() host = self.assertRaises(scheduler_models.DBError, scheduler_models.Host, id=3, always_query=False) host = self.assertRaises(scheduler_models.DBError, scheduler_models.Host, id=3, always_query=True)
def test_compare_fields_in_row(self): host = scheduler_models.Host(id=1) fields = list(host._fields) row_data = [getattr(host, fieldname) for fieldname in fields] self.assertEqual({}, host._compare_fields_in_row(row_data)) row_data[fields.index('hostname')] = 'spam' self.assertEqual({'hostname': ('host1', 'spam')}, host._compare_fields_in_row(row_data)) row_data[fields.index('id')] = 23 self.assertEqual({'hostname': ('host1', 'spam'), 'id': (1, 23)}, host._compare_fields_in_row(row_data))