def test_ip_addresses(self): data = { "system_ip_addresses": ["127.0.0.1", "127.0.0.2"], "management_ip_addresses": ["127.0.0.3", "127.0.0.4"], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") system_addresses = list(device.ipaddress_set.filter(is_management=False).order_by("number")) management_addresses = list(device.ipaddress_set.filter(is_management=True).order_by("number")) self.assertEqual(len(system_addresses), 2) self.assertEqual(len(management_addresses), 2) self.assertEqual(system_addresses[0].is_management, False) self.assertEqual(management_addresses[0].is_management, True) self.assertEqual(system_addresses[0].address, "127.0.0.1") self.assertEqual(management_addresses[0].address, "127.0.0.3") data = {"system_ip_addresses": ["127.0.0.1"], "management_ip_addresses": ["127.0.0.2", "127.0.0.3"]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") system_addresses = list(device.ipaddress_set.filter(is_management=False).order_by("number")) management_addresses = list(device.ipaddress_set.filter(is_management=True).order_by("number")) self.assertEqual(len(system_addresses), 1) self.assertEqual(len(management_addresses), 2) address = IPAddress.objects.get(address="127.0.0.4") self.assertEqual(address.device, None)
def test_processors(self): data = { 'processors': [ { 'model_name': 'CPU Xeon 2533MHz, 4-core', 'family': 'Xeon', 'cores': '4', 'speed': '2533', }, { 'model_name': 'CPU Xeon 2533MHz, 4-core', 'family': 'Xeon', 'speed': '2533', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') processors = list(device.processor_set.order_by('index')) self.assertEqual(processors[0].model.name, 'CPU Xeon 2533MHz, 4-core') self.assertEqual(processors[0].model.type, ComponentType.processor) self.assertEqual(processors[0].cores, 4) self.assertEqual(processors[0].speed, 2533) self.assertEqual(len(processors), 2)
def test_disk_exports_and_shares(self): data = { 'disk_exports': [ { 'serial_number': "deadbeefcafe1234", 'size': '2048', 'label': 'pr0n', }, ], 'disk_shares': [ { 'serial_number': "deadbeefcafe1234", 'server': { 'device': { 'serial_number': '123456789', }, }, }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') export = device.diskshare_set.get() mount = device.disksharemount_set.get() self.assertEqual(export.label, "pr0n") self.assertEqual(export.size, 2048) self.assertEqual(export.wwn, "deadbeefcafe1234") self.assertEqual(mount.share, export) self.assertEqual(mount.server, device)
def test_device_with_asset_ip_addresses(self): asset = DCAssetFactory() data = { 'system_ip_addresses': [ '127.0.0.1', '127.0.0.2', ], 'management_ip_addresses': [ '127.0.0.3', '127.0.0.4', ], 'asset': asset, } warnings = [] set_device_data(self.device, data, warnings=warnings) self.device.save() device = Device.objects.get(sn='123456789') self.assertEqual( device.ipaddress_set.filter(is_management=False).count(), 2, ) self.assertEqual( device.ipaddress_set.filter(is_management=True).count(), 0, ) self.assertEqual( warnings, [ 'Management IP addresses (127.0.0.3, 127.0.0.4) have been ' 'ignored. To change them, please use the Assets module.', ], )
def test_mac_addresses(self): data = { 'mac_addresses': [ 'deadbeefcaf0', 'deadbeefcaf1', 'deadbeefcaf2', ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') ethernets = list(device.ethernet_set.order_by('label', 'mac')) self.assertEqual(len(ethernets), 3) self.assertEqual(ethernets[2].mac, 'DEADBEEFCAF2') data = { 'mac_addresses': [ 'deadbeefcaf0', 'deadbeefcaf1', ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') ethernets = list(device.ethernet_set.order_by('label', 'mac')) self.assertEqual(len(ethernets), 2) self.assertEqual(ethernets[1].mac, 'DEADBEEFCAF1')
def test_connections(self): model = DeviceModel.objects.create(type=DeviceType.rack_server, name="DevModel F1") master_device = Device.objects.create(model=model, sn="sn_1", name="dev1.dc1") connected_device_1 = Device.objects.create(model=model, sn="sn_2", name="dev2.dc1") Ethernet.objects.create(mac="112233AABBDD", device=connected_device_1) connected_device_2 = Device.objects.create(model=model, sn="sn_3", name="dev3.dc1") Ethernet.objects.create(mac="112233AABBEE", device=connected_device_2) data = { "connections": [ {"connected_device_mac_addresses": "112233AABBDD", "connection_type": "network"}, { "connected_device_mac_addresses": "112233AABBEE", "connection_type": "network", "details": {"outbound_port": "eth1", "inbound_port": "gr2"}, }, ] } set_device_data(master_device, data) master_device.save() device = Device.objects.get(sn="sn_1") connections = device.outbound_connections.all() self.assertEqual(connections[0].inbound.id, connected_device_1.id) self.assertEqual(connections[1].inbound.id, connected_device_2.id) self.assertEqual(connections[1].networkconnection.outbound_port, "eth1") self.assertEqual(connections[1].networkconnection.inbound_port, "gr2")
def test_basic_data_with_asset(self): asset = DCAssetFactory() asset.model.category.is_blade = False asset.model.category.save() data = { "serial_number": "aaa123456789", "hostname": "mervin", "data_center": "chicago", "barcode": "00000", "rack": "i31", "chassis_position": "4", "management": "10.10.10.2", "asset": asset, } warnings = [] set_device_data(self.device, data, warnings=warnings) self.device.save() device = Device.objects.get(sn="aaa123456789") self.assertIsNone(device.dc) self.assertIsNone(device.rack) self.assertIsNone(device.chassis_position) self.assertIsNone(device.management) self.assertEqual( warnings, [ "You can not set data for `chassis_position` here - skipped. " "Use assets module.", "You can not set data for `data_center` here - skipped. " "Use assets module.", "You can not set data for `rack` here - skipped. " "Use assets module.", "Management IP address (10.10.10.2) has been ignored. To " "change them, please use the Assets module.", ], )
def test_basic_data_with_asset(self): asset = DCAssetFactory() asset.model.category.is_blade = False asset.model.category.save() data = { 'serial_number': 'aaa123456789', 'hostname': 'mervin', 'data_center': 'chicago', 'barcode': '00000', 'rack': 'i31', 'chassis_position': '4', 'management': '10.10.10.2', 'asset': asset, } warnings = [] set_device_data(self.device, data, warnings=warnings) self.device.save() device = Device.objects.get(sn='aaa123456789') self.assertIsNone(device.dc) self.assertIsNone(device.rack) self.assertIsNone(device.chassis_position) self.assertIsNone(device.management) self.assertEqual(warnings, [ 'You can not set data for `chassis_position` here - skipped. ' 'Use assets module.', 'You can not set data for `data_center` here - skipped. ' 'Use assets module.', 'You can not set data for `rack` here - skipped. ' 'Use assets module.', 'Management IP address (10.10.10.2) has been ignored. To ' 'change them, please use the Assets module.', ])
def test_fc(self): data = {"fibrechannel_cards": [{"physical_id": "deadbeefcafe", "label": "ziew", "model_name": "FC-1000"}]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") fc = device.fibrechannel_set.get() self.assertEqual(fc.physical_id, "deadbeefcafe") self.assertEqual(fc.label, "ziew") self.assertEqual(fc.model.name, "FC-1000") self.assertEqual(fc.model.type, ComponentType.fibre)
def test_connections(self): model = DeviceModel.objects.create( type=DeviceType.rack_server, name="DevModel F1" ) master_device = Device.objects.create( model=model, sn='sn_1', name='dev1.dc1' ) connected_device_1 = Device.objects.create( model=model, sn='sn_2', name='dev2.dc1' ) Ethernet.objects.create(mac='112233AABBDD', device=connected_device_1) connected_device_2 = Device.objects.create( model=model, sn='sn_3', name='dev3.dc1' ) Ethernet.objects.create(mac='112233AABBEE', device=connected_device_2) data = { 'connections': [ { 'connected_device_mac_addresses': '112233AABBDD', 'connection_type': 'network' }, { 'connected_device_mac_addresses': '112233AABBEE', 'connection_type': 'network', 'details': { 'outbound_port': 'eth1', 'inbound_port': 'gr2' } } ] } set_device_data(master_device, data) master_device.save() device = Device.objects.get(sn='sn_1') connections = device.outbound_connections.all() self.assertEqual(connections[0].inbound.id, connected_device_1.id) self.assertEqual(connections[1].inbound.id, connected_device_2.id) self.assertEqual( connections[1].networkconnection.outbound_port, "eth1" ) self.assertEqual( connections[1].networkconnection.inbound_port, "gr2" )
def test_model_name(self): data = {"type": "blade_server", "model_name": "ziew-Y"} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") self.assertEqual(device.model.name, "ziew-Y") self.assertEqual(device.model.type, DeviceType.blade_server) data = {"type": "rack_server", "model_name": "ziew-X"} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") self.assertEqual(device.model.name, "ziew-X") self.assertEqual(device.model.type, DeviceType.rack_server)
def test_mac_addresses(self): data = {"mac_addresses": ["deadbeefcaf0", "deadbeefcaf1", "deadbeefcaf2"]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") ethernets = list(device.ethernet_set.order_by("label", "mac")) self.assertEqual(len(ethernets), 3) self.assertEqual(ethernets[2].mac, "DEADBEEFCAF2") data = {"mac_addresses": ["deadbeefcaf0", "deadbeefcaf1"]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") ethernets = list(device.ethernet_set.order_by("label", "mac")) self.assertEqual(len(ethernets), 2) self.assertEqual(ethernets[1].mac, "DEADBEEFCAF1")
def test_ip_addresses(self): data = { 'system_ip_addresses': [ '127.0.0.1', '127.0.0.2', ], 'management_ip_addresses': [ '127.0.0.3', '127.0.0.4', ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') system_addresses = list( device.ipaddress_set.filter(is_management=False).order_by('number') ) management_addresses = list( device.ipaddress_set.filter(is_management=True).order_by('number') ) self.assertEqual(len(system_addresses), 2) self.assertEqual(len(management_addresses), 2) self.assertEqual(system_addresses[0].is_management, False) self.assertEqual(management_addresses[0].is_management, True) self.assertEqual(system_addresses[0].address, '127.0.0.1') self.assertEqual(management_addresses[0].address, '127.0.0.3') data = { 'system_ip_addresses': [ '127.0.0.1', ], 'management_ip_addresses': [ '127.0.0.2', '127.0.0.3', ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') system_addresses = list( device.ipaddress_set.filter(is_management=False).order_by('number') ) management_addresses = list( device.ipaddress_set.filter(is_management=True).order_by('number') ) self.assertEqual(len(system_addresses), 1) self.assertEqual(len(management_addresses), 2) address = IPAddress.objects.get(address='127.0.0.4') self.assertEqual(address.device, None)
def test_processors(self): data = { "processors": [ {"model_name": "CPU Xeon 2533MHz, 4-core", "family": "Xeon", "cores": "4", "speed": "2533"}, {"model_name": "CPU Xeon 2533MHz, 4-core", "family": "Xeon", "speed": "2533"}, ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") processors = list(device.processor_set.order_by("index")) self.assertEqual(processors[0].model.name, "CPU Xeon 2533MHz, 4-core") self.assertEqual(processors[0].model.type, ComponentType.processor) self.assertEqual(processors[0].cores, 4) self.assertEqual(processors[0].speed, 2533) self.assertEqual(len(processors), 2)
def test_memory(self): data = {"memory": [{"size": "128"}, {"size": "128"}, {"size": "128"}, {"size": "128"}]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") memory = list(device.memory_set.order_by("index")) self.assertEqual(memory[0].size, 128) self.assertEqual(memory[0].index, 0) self.assertEqual(len(memory), 4) data = {"memory": [{"size": "256"}, {"size": "256"}]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") memory = list(device.memory_set.order_by("index")) self.assertEqual(memory[0].size, 256) self.assertEqual(memory[0].index, 0) self.assertEqual(len(memory), 2)
def test_disk_exports_and_shares(self): data = { "disk_exports": [{"serial_number": "deadbeefcafe1234", "size": "2048", "label": "pr0n"}], "disk_shares": [ {"serial_number": "deadbeefcafe1234", "server": {"device": {"serial_number": "123456789"}}} ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") export = device.diskshare_set.get() mount = device.disksharemount_set.get() self.assertEqual(export.label, "pr0n") self.assertEqual(export.size, 2048) self.assertEqual(export.wwn, "deadbeefcafe1234") self.assertEqual(mount.share, export) self.assertEqual(mount.server, device)
def test_fc(self): data = { 'fibrechannel_cards': [ { 'physical_id': "deadbeefcafe", 'label': "ziew", 'model_name': "FC-1000", }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') fc = device.fibrechannel_set.get() self.assertEqual(fc.physical_id, "deadbeefcafe") self.assertEqual(fc.label, "ziew") self.assertEqual(fc.model.name, "FC-1000") self.assertEqual(fc.model.type, ComponentType.fibre)
def test_basic_data(self): data = { 'serial_number': 'aaa123456789', 'hostname': 'mervin', 'data_center': 'chicago', 'barcode': '00000', 'rack': 'i31', 'chassis_position': '4', } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='aaa123456789') self.assertEqual(device.sn, 'aaa123456789') self.assertEqual(device.name, 'mervin') self.assertEqual(device.dc, 'chicago') self.assertEqual(device.barcode, '00000') self.assertEqual(device.rack, 'i31') self.assertEqual(device.chassis_position, 4)
def test_model_name(self): data = { 'type': 'blade_server', 'model_name': 'ziew-Y', } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') self.assertEqual(device.model.name, 'ziew-Y') self.assertEqual(device.model.type, DeviceType.blade_server) data = { 'type': 'rack_server', 'model_name': 'ziew-X', } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') self.assertEqual(device.model.name, 'ziew-X') self.assertEqual(device.model.type, DeviceType.rack_server)
def test_system(self): data = { 'system_label': 'Haiku 1.0.0', 'system_memory': '512', 'system_storage': '2048', 'system_cores_count': 4, 'system_family': 'BeOS', } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') system = device.operatingsystem_set.get() self.assertEqual(system.label, "Haiku 1.0.0") self.assertEqual(system.memory, 512) self.assertEqual(system.storage, 2048) self.assertEqual(system.cores_count, 4) self.assertEqual(system.model.name, "BeOS") self.assertEqual(system.model.family, "BeOS") self.assertEqual(system.model.type, ComponentType.os)
def test_system(self): data = { "system_label": "Haiku 1.0.0", "system_memory": "512", "system_storage": "2048", "system_cores_count": 4, "system_family": "BeOS", } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") system = device.operatingsystem_set.get() self.assertEqual(system.label, "Haiku 1.0.0") self.assertEqual(system.memory, 512) self.assertEqual(system.storage, 2048) self.assertEqual(system.cores_count, 4) self.assertEqual(system.model.name, "BeOS") self.assertEqual(system.model.family, "BeOS") self.assertEqual(system.model.type, ComponentType.os)
def test_basic_data(self): data = { "serial_number": "aaa123456789", "hostname": "mervin", "data_center": "chicago", "barcode": "00000", "rack": "i31", "chassis_position": "4", "management": "10.10.10.2", } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="aaa123456789") self.assertEqual(device.sn, "aaa123456789") self.assertEqual(device.name, "mervin") self.assertEqual(device.dc, "chicago") self.assertEqual(device.barcode, "00000") self.assertEqual(device.rack, "i31") self.assertEqual(device.chassis_position, 4) self.assertEqual(device.management.address, "10.10.10.2")
def test_software(self): data = { 'installed_software': [ { 'label': 'Doom 2', 'version': '2', 'path': '/usr/local/games/bin/doom', 'model_name': 'Doom', 'serial_number': 'Blooood!', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') soft = device.software_set.get() self.assertEqual(soft.label, "Doom 2") self.assertEqual(soft.version, "2") self.assertEqual(soft.model.name, "Doom") self.assertEqual(soft.model.type, ComponentType.software)
def test_parts(self): data = { 'parts': [ { 'serial_number': "abc123", 'type': 'management', 'label': "Terminator management", 'model_name': "T-500 management module", 'hard_firmware': "T-500-1", }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') part = device.genericcomponent_set.get() self.assertEqual(part.label, "Terminator management") self.assertEqual(part.model.name, "T-500 management module") self.assertEqual(part.model.type, ComponentType.management) self.assertEqual(part.sn, "abc123")
def test_device_with_asset_ip_addresses(self): asset = DCAssetFactory() data = { "system_ip_addresses": ["127.0.0.1", "127.0.0.2"], "management_ip_addresses": ["127.0.0.3", "127.0.0.4"], "asset": asset, } warnings = [] set_device_data(self.device, data, warnings=warnings) self.device.save() device = Device.objects.get(sn="123456789") self.assertEqual(device.ipaddress_set.filter(is_management=False).count(), 2) self.assertEqual(device.ipaddress_set.filter(is_management=True).count(), 0) self.assertEqual( warnings, [ "Management IP addresses (127.0.0.3, 127.0.0.4) have been " "ignored. To change them, please use the Assets module." ], )
def test_software(self): data = { "installed_software": [ { "label": "Doom 2", "version": "2", "path": "/usr/local/games/bin/doom", "model_name": "Doom", "serial_number": "Blooood!", } ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") soft = device.software_set.get() self.assertEqual(soft.label, "Doom 2") self.assertEqual(soft.version, "2") self.assertEqual(soft.model.name, "Doom") self.assertEqual(soft.model.type, ComponentType.software)
def test_parts(self): data = { "parts": [ { "serial_number": "abc123", "type": "management", "label": "Terminator management", "model_name": "T-500 management module", "hard_firmware": "T-500-1", } ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") part = device.genericcomponent_set.get() self.assertEqual(part.label, "Terminator management") self.assertEqual(part.model.name, "T-500 management module") self.assertEqual(part.model.type, ComponentType.management) self.assertEqual(part.sn, "abc123")
def test_memory(self): data = { 'memory': [ { 'size': '128', }, { 'size': '128', }, { 'size': '128', }, { 'size': '128', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') memory = list(device.memory_set.order_by('index')) self.assertEqual(memory[0].size, 128) self.assertEqual(memory[0].index, 0) self.assertEqual(len(memory), 4) data = { 'memory': [ { 'size': '256', }, { 'size': '256', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') memory = list(device.memory_set.order_by('index')) self.assertEqual(memory[0].size, 256) self.assertEqual(memory[0].index, 0) self.assertEqual(len(memory), 2)
def test_subdevices(self): data = { "subdevices": [ { "serial_number": "1", "type": "virtual_server", "hostname": "ziew1", "model_name": "XEN Virtual Server", }, { "mac_addresses": ["beefcafedead"], "type": "virtual_server", "hostname": "ziew2", "model_name": "XEN Virtual Server", }, ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") subdevices = list(device.child_set.order_by("name")) self.assertEqual(len(subdevices), 2) self.assertEqual(subdevices[0].name, "ziew1") self.assertEqual(subdevices[1].name, "ziew2")
def test_subdevices(self): data = { 'subdevices': [ { 'serial_number': '1', 'type': 'virtual_server', 'hostname': 'ziew1', 'model_name': 'XEN Virtual Server', }, { 'mac_addresses': ['beefcafedead'], 'type': 'virtual_server', 'hostname': 'ziew2', 'model_name': 'XEN Virtual Server', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') subdevices = list(device.child_set.order_by('name')) self.assertEqual(len(subdevices), 2) self.assertEqual(subdevices[0].name, 'ziew1') self.assertEqual(subdevices[1].name, 'ziew2')
def test_connections(self): model = DeviceModel.objects.create(type=DeviceType.rack_server, name="DevModel F1") master_device = Device.objects.create(model=model, sn='sn_1', name='dev1.dc1') connected_device_1 = Device.objects.create(model=model, sn='sn_2', name='dev2.dc1') Ethernet.objects.create(mac='112233AABBDD', device=connected_device_1) connected_device_2 = Device.objects.create(model=model, sn='sn_3', name='dev3.dc1') Ethernet.objects.create(mac='112233AABBEE', device=connected_device_2) data = { 'connections': [{ 'connected_device_mac_addresses': '112233AABBDD', 'connection_type': 'network' }, { 'connected_device_mac_addresses': '112233AABBEE', 'connection_type': 'network', 'details': { 'outbound_port': 'eth1', 'inbound_port': 'gr2' } }] } set_device_data(master_device, data) master_device.save() device = Device.objects.get(sn='sn_1') connections = device.outbound_connections.all() self.assertEqual(connections[0].inbound.id, connected_device_1.id) self.assertEqual(connections[1].inbound.id, connected_device_2.id) self.assertEqual(connections[1].networkconnection.outbound_port, "eth1") self.assertEqual(connections[1].networkconnection.inbound_port, "gr2")
def test_disks(self): data = { "disks": [ { "serial_number": "1234", "size": "128", "mount_point": "/dev/sda", "label": "sda", "family": "Simpsons", }, {"size": "512", "mount_point": "/dev/sdb", "label": "sdb", "family": "Jetsons"}, ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") disks = list(device.storage_set.order_by("label")) self.assertEqual(disks[0].mount_point, "/dev/sda") self.assertEqual(disks[0].sn, "1234") self.assertEqual(disks[0].model.family, "Simpsons") self.assertEqual(disks[1].sn, None) self.assertEqual(disks[1].mount_point, "/dev/sdb") self.assertEqual(disks[1].model.family, "Jetsons") self.assertEqual(len(disks), 2) data = { "disks": [ {"mount_point": "/dev/sda", "family": "Simpsons"}, {"serial_number": "12346", "mount_point": "/dev/sdb"}, ] } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") disks = list(device.storage_set.order_by("label")) self.assertEqual(disks[0].mount_point, "/dev/sda") self.assertEqual(disks[0].sn, "1234") self.assertEqual(disks[0].model.family, "Simpsons") self.assertEqual(disks[1].sn, "12346") self.assertEqual(disks[1].mount_point, "/dev/sdb") self.assertEqual(disks[1].model.family, "Jetsons") self.assertEqual(len(disks), 2) data = {"disks": [{"mount_point": "/dev/sda", "family": "Simpsons"}]} set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn="123456789") disks = list(device.storage_set.order_by("label")) self.assertEqual(disks[0].mount_point, "/dev/sda") self.assertEqual(disks[0].sn, "1234") self.assertEqual(disks[0].model.family, "Simpsons") self.assertEqual(len(disks), 1)
def _save_job_results(job_id, start_ts): if (int(time.time()) - start_ts) > 86100: # 24h - 5min return try: job = rq.job.Job.fetch(job_id, django_rq.get_connection()) except rq.exceptions.NoSuchJobError: return # job with this id does not exist... if job.result is None and not job.is_failed: # we must wait... _enqueue_save_job_results(job_id) return elif job.is_failed: # nothing to do... return external_priorities = get_external_results_priorities(job.result) # management? is_management = False if job.args: try: is_management = IPAddress.objects.filter( address=job.args[0]).values_list('is_management', flat=True)[0] except IndexError: pass # first... update device devices, ids_lookup, sn_lookup, macs_lookup = _find_devices(job.result) if len(devices) > 1: raise AutomergerError( 'Many devices found for: ids=%s, sn=%s, macs=%s' % (ids_lookup, sn_lookup, macs_lookup)) used_serial_numbers = set() used_mac_addresses = set() for device in devices: device_data = get_device_data(device) if 'serial_number' in device_data: used_serial_numbers |= set([device_data['serial_number']]) if 'mac_addresses' in device_data: used_mac_addresses |= set(device_data['mac_addresses']) data = merge_data( job.result, { 'database': { 'device': device_data }, }, only_multiple=True, ) append_merged_proposition(data, device, external_priorities) selected_data = _select_data(data, external_priorities, is_management) set_device_data(device, selected_data, save_priority=SAVE_PRIORITY) device.save(priority=SAVE_PRIORITY) # now... we create new devices from `garbage` if not devices: garbage = {} for plugin_name, plugin_result in job.result.items(): if 'device' not in plugin_result: continue if 'serial_number' in plugin_result['device']: if plugin_result['device'][ 'serial_number'] in used_serial_numbers: continue if 'mac_addresses' in plugin_result['device']: if set(plugin_result['device']['mac_addresses'], ) != set( plugin_result['device']['mac_addresses'], ) - used_mac_addresses: continue if any(( plugin_result['device'].get('serial_number'), plugin_result['device'].get('mac_addresses'), )): garbage[plugin_name] = plugin_result if garbage: data = merge_data(garbage) selected_data = _select_data(data, external_priorities) if all(( any(( selected_data.get('serial_number'), selected_data.get('mac_addresses', []), )), any(( selected_data.get('model_name'), selected_data.get('type'), )), )): device_from_data(selected_data, save_priority=SAVE_PRIORITY) # mark this scan results update_scan_summary(job)
def test_disks(self): data = { 'disks': [ { 'serial_number': '1234', 'size': '128', 'mount_point': '/dev/sda', 'label': 'sda', 'family': 'Simpsons', }, { 'size': '512', 'mount_point': '/dev/sdb', 'label': 'sdb', 'family': 'Jetsons', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') disks = list(device.storage_set.order_by('label')) self.assertEqual(disks[0].mount_point, '/dev/sda') self.assertEqual(disks[0].sn, '1234') self.assertEqual(disks[0].model.family, 'Simpsons') self.assertEqual(disks[1].sn, None) self.assertEqual(disks[1].mount_point, '/dev/sdb') self.assertEqual(disks[1].model.family, 'Jetsons') self.assertEqual(len(disks), 2) data = { 'disks': [ { 'mount_point': '/dev/sda', 'family': 'Simpsons', }, { 'serial_number': '12346', 'mount_point': '/dev/sdb', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') disks = list(device.storage_set.order_by('label')) self.assertEqual(disks[0].mount_point, '/dev/sda') self.assertEqual(disks[0].sn, '1234') self.assertEqual(disks[0].model.family, 'Simpsons') self.assertEqual(disks[1].sn, '12346') self.assertEqual(disks[1].mount_point, '/dev/sdb') self.assertEqual(disks[1].model.family, 'Jetsons') self.assertEqual(len(disks), 2) data = { 'disks': [ { 'mount_point': '/dev/sda', 'family': 'Simpsons', }, ], } set_device_data(self.device, data) self.device.save() device = Device.objects.get(sn='123456789') disks = list(device.storage_set.order_by('label')) self.assertEqual(disks[0].mount_point, '/dev/sda') self.assertEqual(disks[0].sn, '1234') self.assertEqual(disks[0].model.family, 'Simpsons') self.assertEqual(len(disks), 1)