def __init__(self, clients=None, enhanced_rr=None): self.clients = clients self.enhanced_rr = enhanced_rr if not enhanced_rr: self.enhanced_rr = EnhancedResourceRegistryClient(self.clients.resource_registry) self.outil = ObservatoryUtil(self, enhanced_rr=self.enhanced_rr)
def test_get_device_data_products(self): self.mu.load_mock_resources(self.res_list + self.res_list1) self.mu.load_mock_associations(self.assoc_list + self.assoc_list1 + self.assoc_list2 + self.assoc_list3) self.mu.assign_mockres_find_objects(filter_predicate="hasResource") self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) res_dict = self.obs_util.get_site_data_products( 'Obs_1', RT.Observatory) self.assertGreaterEqual(len(res_dict), 6) self.assertIsNone(res_dict['data_product_resources']) self.assertIn('ID_1', res_dict['device_data_products']) self.assertEquals(len(res_dict['device_data_products']['ID_1']), 3) self.assertIn('DP_1', res_dict['device_data_products']['ID_1']) self.assertIn('PD_1', res_dict['device_data_products']) self.assertEquals(len(res_dict['device_data_products']['PD_1']), 3) res_dict = self.obs_util.get_site_data_products( 'PS_1', RT.PlatformSite) self.assertEquals(len(res_dict['device_data_products']['ID_1']), 3) self.assertIn('ID_1', res_dict['device_data_products']) self.assertIn('DP_1', res_dict['device_data_products']['ID_1']) self.assertIn('PD_1', res_dict['device_data_products']) self.assertEquals(len(res_dict['device_data_products']['PD_1']), 3) res_dict = self.obs_util.get_site_data_products('Org_1', RT.Org) self.assertIn('DP_1', res_dict['device_data_products']['ID_1']) res_dict = self.obs_util.get_site_data_products( 'PS_1', RT.PlatformSite, include_data_products=True) self.assertIsNotNone(res_dict['data_product_resources']) self.assertIn('DP_1', res_dict['data_product_resources'])
def _notification_children(notification_origin, notification_type, observatory_util=None): if observatory_util is None: observatory_util = ObservatoryUtil() children = [] if notification_type == NotificationTypeEnum.PLATFORM: device_relations = observatory_util.get_child_devices( notification_origin) children = [ did for pt, did, dt in device_relations[notification_origin] ] elif type == NotificationTypeEnum.SITE: child_site_dict, ancestors = observatory_util.get_child_sites( notification_origin) children = child_site_dict.keys() elif type == NotificationTypeEnum.FACILITY: objects, _ = resource_registry.find_objects( subject=notification_origin, predicate=PRED.hasResource, id_only=False) for o in objects: if o.type_ == RT.DataProduct \ or o.type_ == RT.InstrumentSite \ or o.type_ == RT.InstrumentDevice \ or o.type_ == RT.PlatformSite \ or o.type_ == RT.PlatformDevice: children.append(o._id) if notification_origin in children: children.remove(notification_origin) return children
def test_get_child_sites_org(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list + self.assoc_list1) self.mu.assign_mockres_find_objects(filter_predicate="hasResource") self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) child_sites, site_ancestors = self.obs_util.get_child_sites( org_id='Org_1', include_parents=False, id_only=True) self.assertEquals(len(child_sites), 6) self.assertEquals(len(site_ancestors), 5) self.assertIn('Sub_1', child_sites) self.assertIn('PS_1', child_sites) self.assertIn('IS_1', child_sites) self.assertIn('Obs_1', child_sites) self.assertIn('Obs_2', child_sites) child_sites, site_ancestors = self.obs_util.get_child_sites( org_id='Org_1', include_parents=True, id_only=True) self.assertEquals(len(child_sites), 7) self.assertEquals(len(site_ancestors), 5) child_sites, site_ancestors = self.obs_util.get_child_sites( org_id='Org_1', include_parents=True, id_only=False) self.assertEquals(len(child_sites), 7) self.assertEquals(len(site_ancestors), 5) self.assertEquals(len([v for v in child_sites.values() if v is None]), 0) self.assertEquals(child_sites['Org_1']._get_type(), RT.Org)
def prepare_activation(self, deployment_obj): """ Prepare (validate) a deployment for activation, returning lists of what associations need to be added and which ones need to be removed. """ self.match_list = [] self.remove_list = [] self.unmatched_device_list = [] self.models_map = {} self.top_device = '' self.top_site = '' self.deployment_obj = deployment_obj self.site_resources = {} self.device_resources = {} self.outil = ObservatoryUtil(self, enhanced_rr=self.enhanced_rr) # retrieve the site tree information using the OUTIL functions; site info as well has site children self.top_site, self.top_device = self._find_top_site_device( deployment_obj._id) # must have a site and a device to continue if not self.top_site or not self.top_device: return [], [] log.debug("port_assignments: %s", self.deployment_obj.port_assignments) # retrieve all models to use in match validation self._get_models() self.site_resources, site_children = self.outil.get_child_sites( parent_site_id=self.top_site._id, id_only=False) log.debug("site_resources: %s", self.site_resources) log.debug("site_children: %s", site_children) site_ref_designator_map = self._get_site_ref_designator_map() # retrieve the device tree from outil then cache the device resources device_tree = self.outil.get_child_devices( device_id=self.top_device._id) self._get_device_resources(device_tree) self._match_devices(self.top_device._id, device_tree, site_ref_designator_map) # check for hasDevice relations to remove and existing hasDevice relations self._find_pairs_to_remove() if self.unmatched_device_list: log.warning("Devices not matched to sites: %s ", self.unmatched_device_list) return self.remove_list, self.match_list
def test_get_site_devices(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list2) self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) site_devices = self.obs_util.get_site_devices( ['Sub_1', 'PS_1', 'IS_1']) self.assertEquals(len(site_devices), 3) self.assertEquals(site_devices['Sub_1'], []) self.assertEquals(site_devices['IS_1'], [('InstrumentSite', 'ID_1', 'InstrumentDevice')])
def get_deployment_sites_devices(self, deployment_obj): # retrieve all site and device ids related to this deployment site_ids = [] device_ids = [] self.outil = ObservatoryUtil(self, enhanced_rr=self.enhanced_rr) top_site, top_device = self._find_top_site_device(deployment_obj._id) site_resources, site_children = self.outil.get_child_sites( parent_site_id=top_site._id, id_only=False) site_ids = site_resources.keys() # get_site_devices returns a tuple that includes all devices linked to deployment sites site_devices = self.outil.get_site_devices(site_ids) for site, tuple_list in site_devices.iteritems(): for (site_type, device_id, device_type) in tuple_list: device_ids.append(device_id) return site_ids, device_ids
def test_get_child_devices(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list2) self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) child_devices = self.obs_util.get_child_devices('PD_1') self.assertEquals(len(child_devices), 2) self.assertEquals(child_devices['PD_1'][0][1], 'ID_1') child_devices = self.obs_util.get_child_devices('ID_1') self.assertEquals(len(child_devices), 1) self.assertEquals(child_devices['ID_1'], []) child_devices = self.obs_util.get_child_devices('Sub_1') self.assertEquals(len(child_devices), 1) self.assertEquals(child_devices['Sub_1'], []) child_devices = self.obs_util.get_child_devices('XXX') self.assertEquals(len(child_devices), 1)
def prepare_activation(self, deployment_obj): """ Prepare (validate) a deployment for activation, returning lists of what associations need to be added and which ones need to be removed. """ self.match_list = [] self.remove_list = [] self.unmatched_device_list = [] self.models_map = {} self.top_device = '' self.top_site = '' self.deployment_obj = deployment_obj self.site_resources = {} self.device_resources = {} self.outil = ObservatoryUtil(self, enhanced_rr=self.enhanced_rr) # retrieve the site tree information using the OUTIL functions; site info as well has site children self.top_site, self.top_device = self._find_top_site_device(deployment_obj._id) # must have a site and a device to continue if not self.top_site or not self.top_device: return [], [] log.debug("port_assignments: %s", self.deployment_obj.port_assignments ) # retrieve all models to use in match validation self._get_models() self.site_resources, site_children = self.outil.get_child_sites( parent_site_id=self.top_site._id, id_only=False) log.debug("site_resources: %s", self.site_resources) log.debug("site_children: %s", site_children) site_ref_designator_map = self._get_site_ref_designator_map() # retrieve the device tree from outil then cache the device resources device_tree = self.outil.get_child_devices(device_id=self.top_device._id) self._get_device_resources(device_tree) def _match_devices(device_id): # there will not be a port assignment for the top device if device_id == self.top_device._id: self._validate_models(self.top_site._id, self.top_device._id) self.match_list.append((self.top_site._id, self.top_device._id)) tuple_list = device_tree[device_id] for (pt, child_id, ct) in tuple_list: log.debug(" tuple - pt: %s child_id: %s ct: %s", pt, child_id, ct) # match this child device then if it has children, call _match_devices with this id # check that this device is represented in device tree and in port assignments if child_id in self.device_resources and child_id in self.deployment_obj.port_assignments: platform_port = self.deployment_obj.port_assignments[child_id] log.debug("device platform_port: %s", platform_port) # validate PlatformPort info for this device self._validate_port_assignments(child_id, platform_port) if platform_port.reference_designator in site_ref_designator_map: matched_site = site_ref_designator_map[platform_port.reference_designator] self._validate_models(matched_site, child_id) log.info("match_list append site: %s device: %s", matched_site, child_id) self.match_list.append((matched_site, child_id)) #recurse on the children of this device _match_devices(child_id) # otherwise cant be matched to a site else: self.unmatched_device_list.append(child_id) _match_devices(self.top_device._id) # check for hasDevice relations to remove and existing hasDevice relations self. _find_pairs_to_remove() if self.unmatched_device_list: log.warning("Devices not matched to sites: %s ", self.unmatched_device_list) return self.remove_list, self.match_list
def test_get_child_sites(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list) self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) site_resources, site_children = self.spy_get_child_sites( parent_site_id='Obs_1', include_parents=False, id_only=True) self.assertEquals(len(site_resources), 3) self.assertEquals(len(site_children), 3) self.assertIn('Sub_1', site_resources) self.assertIn('PS_1', site_resources) self.assertIn('IS_1', site_resources) self.assertNotIn('Obs_1', site_resources) self.assertEquals( len([v for v in site_resources.values() if v is None]), 3) site_resources, site_children = self.spy_get_child_sites( parent_site_id='Obs_1', include_parents=False, id_only=False) self.assertEquals(len(site_resources), 3) self.assertEquals(len(site_children), 3) self.assertEquals( len([v for v in site_resources.values() if v is None]), 0) self.assertEquals(site_resources['Sub_1']._get_type(), RT.Subsite) site_resources, site_children = self.spy_get_child_sites( parent_site_id='Obs_1', include_parents=True) self.assertEquals(len(site_resources), 4) self.assertEquals(len(site_children), 3) self.assertIn('Obs_1', site_resources) site_resources, site_children = self.spy_get_child_sites( parent_site_id='Sub_1', include_parents=False) self.assertEquals(len(site_resources), 2) self.assertEquals(len(site_children), 2) self.assertNotIn('Sub_1', site_resources) site_resources, site_children = self.spy_get_child_sites( parent_site_id='Sub_1', include_parents=True) self.assertEquals(len(site_resources), 4) self.assertEquals(len(site_children), 3) self.assertIn('Sub_1', site_resources) self.assertIn('Obs_1', site_resources) site_resources, site_children = self.spy_get_child_sites( parent_site_id='PS_1', include_parents=False) self.assertEquals(len(site_resources), 1) self.assertEquals(len(site_children), 1) site_resources, site_children = self.spy_get_child_sites( parent_site_id='PS_1', include_parents=True) self.assertEquals(len(site_resources), 4) self.assertEquals(len(site_children), 3) site_resources, site_children = self.spy_get_child_sites( parent_site_id='IS_1', include_parents=False) self.assertEquals(len(site_resources), 0) self.assertEquals(len(site_children), 0) site_resources, site_children = self.spy_get_child_sites( parent_site_id='IS_1', include_parents=True) self.assertEquals(len(site_resources), 4) self.assertEquals(len(site_children), 3) site_resources, site_children = self.spy_get_child_sites( parent_site_id='XXX', include_parents=True) self.assertEquals(len(site_resources), 1) self.assertEquals(len(site_children), 0)
def test_get_status_roll_ups_platform_warn(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list + self.assoc_list1 + self.assoc_list2) self.mu.load_mock_device_statuses(self.status_by_device_4) self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock, device_status_mgr=self.dsm_mock) # PD_1 power+comms warning status_rollups = self.obs_util.get_status_roll_ups( 'ID_1', RT.InstrumentDevice) self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'PD_1', RT.PlatformDevice) #log.warn("status %s" % status_rollups) self._assert_status(status_rollups, 'PD_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'IS_1', RT.InstrumentSite) self.assertEquals(len(status_rollups), 6) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'PS_1', RT.PlatformSite) self.assertEquals(len(status_rollups), 6) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'PS_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups('Sub_1', RT.Subsite) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Sub_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'PS_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'Obs_1', RT.Observatory) self.assertIn('Obs_1', status_rollups) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Obs_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'Sub_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'PS_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1', agg=DST.STATUS_WARNING, power=DST.STATUS_WARNING, comms=DST.STATUS_WARNING) self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1')
def test_get_status_roll_ups(self): self.mu.load_mock_resources(self.res_list) self.mu.load_mock_associations(self.assoc_list + self.assoc_list1 + self.assoc_list2) self.mu.load_mock_events(self.event_list1) self.obs_util = ObservatoryUtil(self.process_mock, self.container_mock) # No problems status_rollups = self.obs_util.get_status_roll_ups( 'ID_1', RT.InstrumentDevice) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'PD_1', RT.PlatformDevice) self.assertIn('PD_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'IS_1', RT.InstrumentSite) self.assertEquals(len(status_rollups), 6) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'PS_1', RT.PlatformSite) self.assertEquals(len(status_rollups), 6) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'PS_1') self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups('Sub_1', RT.Subsite) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Sub_1') self._assert_status(status_rollups, 'PS_1') self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') status_rollups = self.obs_util.get_status_roll_ups( 'Obs_1', RT.Observatory) self.assertIn('Obs_1', status_rollups) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Obs_1') self._assert_status(status_rollups, 'Sub_1') self._assert_status(status_rollups, 'PS_1') self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1') self._assert_status(status_rollups, 'ID_1') # ID_1 power warning self.mu.load_mock_events(self.event_list2) status_rollups = self.obs_util.get_status_roll_ups( 'ID_1', RT.InstrumentDevice) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'PD_1', RT.PlatformDevice) self._assert_status(status_rollups, 'PD_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'IS_1', RT.InstrumentSite) self.assertIn('IS_1', status_rollups) self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'PS_1', RT.PlatformSite) self.assertIn('PS_1', status_rollups) self.assertIn('IS_1', status_rollups) self._assert_status(status_rollups, 'PS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING) # ID_1 power+comms warning self.mu.load_mock_events(self.event_list3) status_rollups = self.obs_util.get_status_roll_ups( 'ID_1', RT.InstrumentDevice) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'PD_1', RT.PlatformDevice) self._assert_status(status_rollups, 'PD_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'IS_1', RT.InstrumentSite) self.assertEquals(len(status_rollups), 6) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'PS_1', RT.PlatformSite) self.assertEquals(len(status_rollups), 6) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'PS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups('Sub_1', RT.Subsite) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Sub_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'PS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) status_rollups = self.obs_util.get_status_roll_ups( 'Obs_1', RT.Observatory) self.assertIn('Obs_1', status_rollups) self.assertIn('Sub_1', status_rollups) self.assertIn('PS_1', status_rollups) self.assertIn('PD_1', status_rollups) self.assertIn('IS_1', status_rollups) self.assertIn('ID_1', status_rollups) self._assert_status(status_rollups, 'Obs_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'Sub_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'PS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'PD_1') self._assert_status(status_rollups, 'IS_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING) self._assert_status(status_rollups, 'ID_1', agg=StatusType.STATUS_WARNING, power=StatusType.STATUS_WARNING, comms=StatusType.STATUS_WARNING)