def test_multiple_cpu_flags(self): with session.begin(): system = data_setup.create_system() system.cpu = Cpu(flags=['flag1', 'flag2']) another_system = data_setup.create_system() another_system.cpu = Cpu(flags=['flag3']) b = self.browser perform_search(b, [('CPU/Flags', 'is', 'flag1'), ('CPU/Flags', 'is', 'flag2')]) check_system_search_results(b, present=[system], absent=[another_system])
def test_systems_by_cpu_core_count(self): for _ in range(3): data_setup.create_system(arch=u'i386').cpu = Cpu(cores=39) for _ in range(3): data_setup.create_system(arch=u'i386').cpu = Cpu(cores=41) data_setup.create_system(arch=u'i386', memory=None) # un-inventoried session.flush() system_counts = dict( ((arch, cpu_cores), count) for arch, cpu_cores, count in self.execute_reporting_query( 'system-count-by-arch-cpu-cores')) self.assert_(system_counts[('i386', None)] >= 1, system_counts) self.assert_(system_counts[('i386', 39)] >= 3, system_counts) self.assert_(system_counts[('i386', 41)] >= 3, system_counts)
def test_system_details_includes_cpus(self): with session.begin(): cpu = Cpu(cores=5, family=6, model=7, model_name='Intel', flags=['beer', 'frob'], processors=6, sockets=2, speed=24, stepping=2, vendor='Transmeta') session.add(cpu) self.system.cpu = cpu response = requests.get(get_server_base() + 'systems/%s' % self.system.fqdn) json = response.json() self.assertEqual([u'beer', u'frob'], json['cpu_flags']) self.assertEqual(5, json['cpu_cores']) self.assertEqual(6, json['cpu_family']) self.assertEqual(7, json['cpu_model']) self.assertEqual(u'Intel', json['cpu_model_name']) self.assertEqual(True, json['cpu_hyper']) self.assertEqual(6, json['cpu_processors']) self.assertEqual(2, json['cpu_sockets']) self.assertEqual(24, json['cpu_speed']) self.assertEqual(2, json['cpu_stepping']) self.assertEqual('Transmeta', json['cpu_vendor'])
def test_predefined_host_filter(self): with session.begin(): matching = data_setup.create_system() matching.cpu = Cpu(family=6, model=47, model_name=u'Intel') nonmatching = data_setup.create_system() out = run_client( ['bkr', 'list-systems', '--host-filter', 'INTEL__WESTMERE']) returned_systems = out.splitlines() self.assertIn(matching.fqdn, returned_systems) self.assertNotIn(nonmatching.fqdn, returned_systems)
def test_cpu_speed_is_decimal(self): system = data_setup.create_system( fqdn=u'cpu-speed-decimal.test-rdf.invalid') system.cpu = Cpu(speed=2666.67) session.flush() graph = self.describe(system) speed_literal = graph.value( subject=URIRef(get_server_base() + 'view/cpu-speed-decimal.test-rdf.invalid#system'), predicate=INV.cpuSpeed, any=False) self.assertEqual(speed_literal.datatype, URIRef('http://www.w3.org/2001/XMLSchema#decimal'))
def test_systems_by_cpu_type(self): vendor = u'AcmeCorp' common_cpu_family = 1 common_cpu_stepping = 2 rare_cpu_family = 3 rare_cpu_stepping = 4 for _ in range(2): data_setup.create_system().cpu = Cpu(vendor=vendor, model=1, family=rare_cpu_family, stepping=rare_cpu_stepping) for _ in range(20): data_setup.create_system().cpu = Cpu(vendor=vendor, model=1, family=common_cpu_family, stepping=common_cpu_stepping) data_setup.create_system(status=SystemStatus.removed).cpu = \ Cpu(vendor=vendor) data_setup.create_system().cpu = None # un-inventoried session.flush() rows = list(self.execute_reporting_query('system-count-by-cpu')) # un-inventoried systems should show up at the top self.assertEquals(rows[0].cpu_vendor, None) self.assertEquals(rows[0].cpu_model, None) self.assertEquals(rows[0].cpu_family, None) self.assertEquals(rows[0].cpu_stepping, None) self.assert_(rows[0].system_count >= 1, rows[0]) # check for fake CPUs created above vendor_rows = [row for row in rows if row.cpu_vendor == vendor] self.assertEquals(len(vendor_rows), 2, vendor_rows) self.assertEquals(vendor_rows[0].cpu_model, 1) self.assertEquals(vendor_rows[0].cpu_family, common_cpu_family) self.assertEquals(vendor_rows[0].cpu_stepping, common_cpu_stepping) self.assertEquals(vendor_rows[0].system_count, 20) self.assertEquals(vendor_rows[1].cpu_model, 1) self.assertEquals(vendor_rows[1].cpu_family, rare_cpu_family) self.assertEquals(vendor_rows[1].cpu_stepping, rare_cpu_stepping) self.assertEquals(vendor_rows[1].system_count, 2)
def test_cpu_flags(self): excluded = data_setup.create_system() excluded.cpu = Cpu(processors=1, flags=[u'ssse3', 'pae']) included = data_setup.create_system() included.cpu = Cpu(processors=1, flags=[u'ssse3', 'vmx']) self.check_filter(""" <hostRequires> <cpu><flag value="vmx" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><flag op="!=" value="pae" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><flag op="like" value="%vmx%" /></cpu> </hostRequires> """, present=[included], absent=[excluded])
def setUpClass(cls): with session.begin(): # ensure we have lots of systems for cores in [1, 2, 3]: for vendor, model, status, type, user in zip( [u'Acer', u'Dell', u'HP'], [u'slow model', u'fast model', u'big model'], [u'Automated', u'Manual', u'Removed'], [u'Machine', u'Prototype'], [data_setup.create_user() for _ in range(3)]): system = data_setup.create_system(vendor=vendor, model=model, status=status, type=type) system.user = data_setup.create_user() system.cpu = Cpu(cores=cores)
def test_multiple_xml_filters(self): with session.begin(): module_key = Key.by_name(u'MODULE') matching = data_setup.create_system() matching.cpu = Cpu(family=6, model=47, model_name=u'Intel') matching.key_values_string.append( Key_Value_String(module_key, u'cciss')) nonmatching = data_setup.create_system() out = run_client([ 'bkr', 'list-systems', '--xml-filter', '<not><lender value="shark"/></not>', '--xml-filter', '<key_value key="MODULE" value="cciss"/>', '--host-filter', 'INTEL__WESTMERE' ]) returned_systems = out.splitlines() self.assertIn(matching.fqdn, returned_systems) self.assertNotIn(nonmatching.fqdn, returned_systems)
def setUpClass(cls): with session.begin(): # ensure we have lots of systems for cores in [1, 2, 3]: for vendor, model, status, type, reserved_since, user in zip( [u'Acer', u'Dell', u'HP'], [u'slow model', u'fast model', u'big model'], [u'Automated', u'Manual', u'Removed'], [u'Machine', u'Prototype'], [ datetime.datetime(2012, 10, 31, 23, 0, 0), datetime.datetime(2015, 1, 1, 6, 0, 0), datetime.datetime(2020, 1, 6, 10, 0, 0), ], [data_setup.create_user() for _ in range(3)]): system = data_setup.create_system(vendor=vendor, model=model, status=status, type=type) system.cpu = Cpu(cores=cores) system.user = user system.lab_controller = data_setup.create_labcontroller() data_setup.create_manual_reservation(system, reserved_since, user=user)
def setUpClass(cls): cls.system_one_details = { 'fqdn': u'a1', 'type': u'Machine', 'arch': u'i386', 'status': u'Automated', 'owner': data_setup.create_user(), } cls.system_one = data_setup.create_system(**cls.system_one_details) cls.system_one.loaned = data_setup.create_user() cls.system_one.numa = Numa(nodes=2) cls.system_one.key_values_string.append( Key_Value_String(Key.by_name(u'CPUMODEL'), 'foocodename')) cls.system_one.key_values_string.append( Key_Value_String(Key.by_name(u'HVM'), '1')) cls.system_one.cpu = Cpu(flags=['flag1', 'flag2']) cls.system_one.key_values_int.append( Key_Value_Int(Key.by_name(u'DISKSPACE'), '1024')) cls.system_one.key_values_int.append( Key_Value_Int(Key.by_name(u'MEMORY'), '4096')) cls.system_two_details = { 'fqdn': u'a2', 'type': u'Prototype', 'arch': u'x86_64', 'status': u'Manual', 'owner': data_setup.create_user(), } cls.system_two = data_setup.create_system(**cls.system_two_details) cls.system_two.key_values_int.append( Key_Value_Int(Key.by_name(u'DISKSPACE'), '900')) cls.system_two.key_values_string.append( Key_Value_String(Key.by_name(u'HVM'), '1')) device_class = DeviceClass.lazy_create(device_class='class_type') device1 = Device.lazy_create(vendor_id='0000', device_id='0000', subsys_vendor_id='2223', subsys_device_id='2224', bus='0000', driver='0000', device_class_id=device_class.id, description='blah') cls.system_two.devices.append(device1) cls.system_three_details = { 'fqdn': u'a3', 'type': u'Laptop', 'arch': u'ia64', 'status': u'Automated', 'owner': data_setup.create_user(), } cls.system_three = data_setup.create_system(**cls.system_three_details) cls.system_three.numa = Numa(nodes=1) device2 = Device.lazy_create(vendor_id='0000', device_id='0000', subsys_vendor_id='1111', subsys_device_id='1112', bus='0000', driver='0000', device_class_id=device_class.id, description='blah') cls.system_three.devices.append(device2) cls.system_four_details = { 'status': u'Removed', } cls.system_four = data_setup.create_system(**cls.system_four_details) cls.system_four.key_values_string.append( Key_Value_String(Key.by_name(u'CPUMODEL'), 'foocodename'))
def test_cpu(self): excluded = data_setup.create_system() excluded.cpu = Cpu(processors=1, cores=1, family=21, model=2, sockets=1, speed=1400.0, stepping=0, vendor=u'AuthenticAMD', model_name=u'AMD Opteron(tm) Processor 6386 SE ') included = data_setup.create_system() included.cpu = Cpu(processors=4, cores=2, family=10, model=4, sockets=2, speed=2000.0, stepping=1, vendor=u'GenuineIntel', model_name=u'Intel(R) Xeon(R) CPU E5-4650 0 @ 2.70GHz') self.check_filter(""" <hostRequires> <and> <cpu_count op="=" value="4" /> </and> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><processors op="=" value="4" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <and> <cpu><processors op=">" value="2" /></cpu> <cpu><processors op="<" value="5" /></cpu> </and> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <and> <cpu_count op=">" value="2" /> <cpu_count op="<" value="5" /> </and> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><cores op=">" value="1" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><family op="=" value="10" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><model op="=" value="4" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><sockets op=">=" value="2" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><speed op=">=" value="1500.0" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><stepping op=">=" value="1" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><vendor op="like" value="%Intel" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><model_name op="like" value="%Xeon%" /></cpu> </hostRequires> """, present=[included], absent=[excluded]) self.check_filter(""" <hostRequires> <cpu><hyper value="true" /></cpu> </hostRequires> """, present=[included], absent=[excluded])