def test_list_virtual_switch_json(self): expected_out_json = '{"virtualswitches": [{"id": "virtual-switch-01", \ "links": [{"href": \ "http://localhost:8774/v2.0/virtualswitches/virtual-switch-01", \ "rel": "self"}, {"href": \ "http://localhost:8774/virtualswitches/virtual-switch-01", \ "rel": "bookmark"}], "name": "virtual-switch-01"}, \ {"id": "virtual-switch-02", "links": \ [{"href": "http://localhost:8774/v2.0/virtualswitches/virtual-switch-02", \ "rel": "self"}, {"href": \ "http://localhost:8774/virtualswitches/virtual-switch-02", \ "rel": "bookmark"}], "name": "virtual-switch-02"}]}' virtual_switch_list = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, "virtual_switch_get_all_by_filters") api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg() ).AndReturn(virtual_switch_list) self.mock.ReplayAll() request = webob.Request.blank("/v2.0/virtualswitches.json", base_url="http://localhost:8774/v2.0/") request.environ["nova.context"] = self.admin_context resp = VirtualSwitchController().index(request) self.assertNotEqual(resp, None, "Return json string") self.compare_json(expected_out_json, resp.body) # self.assertEqual(self.expected_index_json, resp.body) self.mock.stubs.UnsetAll()
def test_list_virtual_switch_xml_header(self): expected_out_xml = '<virtualswitches \ xmlns:atom="http://www.w3.org/2005/Atom" \ xmlns="http://docs.openstack.org/ext/healthnmon/api/v2.0">\ <virtualswitch id="virtual-switch-01" name="virtual-switch-01">\ <atom:link \ href="http://localhost:8774/v2.0/virtualswitches/virtual-switch-01" \ rel="self"/>\ <atom:link href="http://localhost:8774/virtualswitches/virtual-switch-01" \ rel="bookmark"/>\ </virtualswitch><virtualswitch id="virtual-switch-02" \ name="virtual-switch-02">\ <atom:link \ href="http://localhost:8774/v2.0/virtualswitches/virtual-switch-02" \ rel="self"/>\ <atom:link href="http://localhost:8774/virtualswitches/virtual-switch-02" \ rel="bookmark"/>\ </virtualswitch></virtualswitches>' virtual_switches = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, "virtual_switch_get_all_by_filters") api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg() ).AndReturn(virtual_switches) self.mock.ReplayAll() request = webob.Request.blank("/v2.0/virutalswitches", base_url="http://localhost:8774/v2.0/") request.environ["nova.context"] = self.admin_context request.headers["Accept"] = "application/xml" resp = VirtualSwitchController().index(request) self.assertNotEqual(resp, None, "Return xml string") self.compare_xml(expected_out_xml, resp.body) # self.assertEqual(resp.body, self.expected_index_xml) self.mock.stubs.UnsetAll()
def test_list_virtual_switch_xml(self): expected_out_xml = \ '<virtualswitches xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://docs.openstack.org/ext/healthnmon/api/v2.0">\ <virtualswitch id="virtual-switch-01" name="virtual-switch-01">\ <atom:link href="http://localhost:8774/v2.0/virtualswitches/virtual-switch-01" rel="self"/>\ <atom:link href="http://localhost:8774/virtualswitches/virtual-switch-01" rel="bookmark"/>\ </virtualswitch><virtualswitch id="virtual-switch-02" name="virtual-switch-02">\ <atom:link href="http://localhost:8774/v2.0/virtualswitches/virtual-switch-02" rel="self"/>\ <atom:link href="http://localhost:8774/virtualswitches/virtual-switch-02" rel="bookmark"/>\ </virtualswitch></virtualswitches>' virtual_switch_list = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, 'virtual_switch_get_all_by_filters') api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(virtual_switch_list) self.mock.ReplayAll() request = webob.Request.blank('/v2.0/virtualswitches.xml', base_url='http://localhost:8774/v2.0/') request.environ['nova.context'] = self.admin_context resp = VirtualSwitchController().index(request) self.assertNotEqual(resp, None, 'Return xml string') self.compare_xml(expected_out_xml, resp.body) # self.assertEqual(resp.body, self.expected_index_xml) self.mock.stubs.UnsetAll()
def test_list_virtual_switch_none_check(self): self.mock.StubOutWithMock(api, "virtual_switch_get_all_by_filters") api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg() ).AndReturn(None) self.mock.ReplayAll() request = webob.Request.blank("/v2.0/virtualswitches", base_url="http://localhost:8774/v2.0/") request.environ["nova.context"] = self.admin_context resp = VirtualSwitchController().index(request) self.assertEqual(resp.body, '{"virtualswitches": []}', "Return json string")
def test_list_virtual_switch_detail_none_xml(self): virtual_switches = None self.mock.StubOutWithMock(api, "virtual_switch_get_all_by_filters") api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg() ).AndReturn(virtual_switches) self.mock.ReplayAll() request = webob.Request.blank("/v2.0/virtualswitches/detail.xml", base_url="http://localhost:8774/v2.0/") request.environ["nova.context"] = self.admin_context resp = VirtualSwitchController().detail(request) self.assertNotEqual(resp, None, "Return xml string")
def test_list_virtual_switch_detail_none_xml(self): virtual_switches = None self.mock.StubOutWithMock(api, 'virtual_switch_get_all_by_filters') api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(virtual_switches) self.mock.ReplayAll() request = webob.Request.blank('/v2.0/virtualswitches/detail.xml', base_url='http://localhost:8774/v2.0/') request.environ['nova.context'] = self.admin_context resp = VirtualSwitchController().detail(request) self.assertNotEqual(resp, None, 'Return xml string')
def test_list_virtual_switch_none_check(self): self.mock.StubOutWithMock(api, 'virtual_switch_get_all_by_filters') api.virtual_switch_get_all_by_filters(mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(None) self.mock.ReplayAll() request = webob.Request.blank('/v2.0/virtualswitches', base_url='http://localhost:8774/v2.0/') request.environ['nova.context'] = self.admin_context resp = VirtualSwitchController().index(request) self.assertEqual(resp.body, '{"virtualswitches": []}', 'Return json string')
def test_list_limited_virtual_switch_detail_xml(self): virtual_switches = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, "virtual_switch_get_all_by_filters") api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg() ).AndReturn(virtual_switches) self.mock.ReplayAll() request = webob.Request.blank( "/v2.0/virtualswitches/detail.xml?" "limit=1&marker=virtual-switch-01", base_url="http://localhost:8774/v2.0/", ) request.environ["nova.context"] = self.admin_context resp = VirtualSwitchController().detail(request) self.assertEqual(resp.body, self.expected_limited_detail_xml)
def test_list_limited_virtual_switch_detail_xml(self): virtual_switches = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, 'virtual_switch_get_all_by_filters') api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(virtual_switches) self.mock.ReplayAll() request = webob.Request.blank( '/v2.0/virtualswitches/detail.xml?' 'limit=1&marker=virtual-switch-01', base_url='http://localhost:8774/v2.0/') request.environ['nova.context'] = self.admin_context resp = VirtualSwitchController().detail(request) self.assertEqual(resp.body, self.expected_limited_detail_xml)
def test_virtual_switch_get_all_by_filters_changessince(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2', 'SW3') switch_names = ('name1', 'name2', 'name3') for i in range(len(switch_ids)): self.__create_virtual_switch( id=switch_ids[i], name=switch_names[i]) created_time = long(time.time() * 1000L) # Wait for 1 sec and update second switch and delete third switch time.sleep(1) second_switch = api.virtual_switch_get_by_ids( self.admin_context, [switch_ids[1]])[0] second_switch.name = 'New name' api.virtual_switch_save(self.admin_context, second_switch) api.virtual_switch_delete_by_ids(self.admin_context, [switch_ids[2]]) # Query with filter expected_updated_ids = [switch_ids[1], switch_ids[2]] filters = {'changes-since': created_time} switches = api.virtual_switch_get_all_by_filters( self.admin_context, filters, None, None) self.assert_(switches is not None) self.assert_(len(switches) == 2) for switch in switches: self.assert_(switch is not None) self.assert_(switch.id in expected_updated_ids)
def test_virtual_switch_get_all_by_filters_changessince(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2', 'SW3') switch_names = ('name1', 'name2', 'name3') for i in range(len(switch_ids)): self.__create_virtual_switch(id=switch_ids[i], name=switch_names[i]) created_time = long(time.time() * 1000L) # Wait for 1 sec and update second switch and delete third switch time.sleep(1) second_switch = api.virtual_switch_get_by_ids(self.admin_context, [switch_ids[1]])[0] second_switch.name = 'New name' api.virtual_switch_save(self.admin_context, second_switch) api.virtual_switch_delete_by_ids(self.admin_context, [switch_ids[2]]) # Query with filter expected_updated_ids = [switch_ids[1], switch_ids[2]] filters = {'changes-since': created_time} switches = api.virtual_switch_get_all_by_filters( self.admin_context, filters, None, None) self.assert_(switches is not None) self.assert_(len(switches) == 2) for switch in switches: self.assert_(switch is not None) self.assert_(switch.id in expected_updated_ids)
def test_virtual_switch_get_all_by_filters(self): # Create VirtualSwitches switch_ids = ("SW1", "SW2") switch_names = ("name1", "name2") for i in range(len(switch_ids)): self.__create_virtual_switch(id=switch_ids[i], name=switch_names[i]) # Query with filter filters = {"name": switch_names[1]} switches = api.virtual_switch_get_all_by_filters(self.admin_context, filters, "id", DbConstants.ORDER_ASC) self.assert_(switches is not None) self.assert_(len(switches) == 1) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[1])
def test_list_virtual_switch_json(self): expected_out_json = \ '{"virtualswitches": [{"id": "virtual-switch-01", "links": [{"href": "http://localhost:8774/v2.0/virtualswitches/virtual-switch-01", "rel": "self"}, \ {"href": "http://localhost:8774/virtualswitches/virtual-switch-01", "rel": "bookmark"}], "name": "virtual-switch-01"}, \ {"id": "virtual-switch-02", "links": [{"href": "http://localhost:8774/v2.0/virtualswitches/virtual-switch-02", "rel": "self"}, \ {"href": "http://localhost:8774/virtualswitches/virtual-switch-02", "rel": "bookmark"}], "name": "virtual-switch-02"}]}' virtual_switch_list = self.get_virtual_switch_list() self.mock.StubOutWithMock(api, 'virtual_switch_get_all_by_filters') api.virtual_switch_get_all_by_filters( mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg(), mox.IgnoreArg()).AndReturn(virtual_switch_list) self.mock.ReplayAll() request = webob.Request.blank('/v2.0/virtualswitches.json', base_url='http://localhost:8774/v2.0/') request.environ['nova.context'] = self.admin_context resp = VirtualSwitchController().index(request) self.assertNotEqual(resp, None, 'Return json string') self.compare_json(expected_out_json, resp.body) # self.assertEqual(self.expected_index_json, resp.body) self.mock.stubs.UnsetAll()
def test_virtual_switch_get_all_by_filters(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2') switch_names = ('name1', 'name2') for i in range(len(switch_ids)): self.__create_virtual_switch(id=switch_ids[i], name=switch_names[i]) # Query with filter filters = {'name': switch_names[1]} switches = api.virtual_switch_get_all_by_filters( self.admin_context, filters, 'id', DbConstants.ORDER_ASC) self.assert_(switches is not None) self.assert_(len(switches) == 1) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[1])
def virtual_switch_get_all_by_filters(context, filters, sort_key, sort_dir): """ This API will make a call to db layer to fetch the list of all the VirtualSwitch objects. Parameters: context - nova.context.RequestContext object filters - dictionary of filters to be applied keys should be fields of VirtualSwitch model if value is simple value = filter is applied and if value is list or tuple 'IN' filter is applied eg : {'switchType':'abc', 'name':['n1', 'n2']} will filter as switchType = 'abc' AND name in ('n1', 'n2') sort_key - Field on which sorting is to be applied sort_dir - asc for Ascending sort direction, desc for descending sort direction Returns: list of virtual_switch that match all filters and sorted with sort_key """ return api.virtual_switch_get_all_by_filters(context, filters, sort_key, sort_dir)
def test_virtual_switch_get_all_by_filters_sort_desc(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2') switch_names = ('name1', 'name2') for i in range(len(switch_ids)): self.__create_virtual_switch( id=switch_ids[i], name=switch_names[i]) # Query with sort switches = api.virtual_switch_get_all_by_filters( self.admin_context, {'name': switch_names}, 'name', DbConstants.ORDER_DESC) self.assert_(switches is not None) self.assert_(len(switches) == 2) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[1]) self.assert_(switches[1] is not None) self.assert_(switches[1].id == switch_ids[0])
def test_virtual_switch_get_all_by_filters_contains(self): # Create VirtualSwitches switch_ids = ("SW1", "SW2", "SW3") switch_names = ("name1", "name2", "name3") switch_net_intfs = (["vnet1"], ["vnet1", "vnet3"], ["vnet3"]) for i in range(len(switch_ids)): self.__create_virtual_switch(id=switch_ids[i], name=switch_names[i], networkInterfaces=switch_net_intfs[i]) # Query with sort switches = api.virtual_switch_get_all_by_filters( self.admin_context, {"networkInterfaces": "vnet1"}, "id", DbConstants.ORDER_ASC ) self.assert_(switches is not None) self.assert_(len(switches) == 2) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[0]) self.assert_(switches[1] is not None) self.assert_(switches[1].id == switch_ids[1])
def test_virtual_switch_get_all_by_filters_not_deleted(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2') switch_names = ('name1', 'name2') for i in range(len(switch_ids)): self.__create_virtual_switch( id=switch_ids[i], name=switch_names[i]) # Delete one switch api.virtual_switch_delete_by_ids(self.admin_context, [switch_ids[0]]) # Query with filter filters = {'deleted': False} switches = api.virtual_switch_get_all_by_filters( self.admin_context, filters, 'id', DbConstants.ORDER_ASC) self.assert_(switches is not None) self.assert_(len(switches) == 1) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[1])
def test_virtual_switch_get_all_by_filters_contains(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2', 'SW3') switch_names = ('name1', 'name2', 'name3') switch_net_intfs = (['vnet1'], ['vnet1', 'vnet3'], ['vnet3']) for i in range(len(switch_ids)): self.__create_virtual_switch(id=switch_ids[i], name=switch_names[i], networkInterfaces=switch_net_intfs[i]) # Query with sort switches = api.virtual_switch_get_all_by_filters( self.admin_context, {'networkInterfaces': 'vnet1'}, 'id', DbConstants.ORDER_ASC) self.assert_(switches is not None) self.assert_(len(switches) == 2) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[0]) self.assert_(switches[1] is not None) self.assert_(switches[1].id == switch_ids[1])
def test_virtual_switch_get_all_by_filters_contains(self): # Create VirtualSwitches switch_ids = ('SW1', 'SW2', 'SW3') switch_names = ('name1', 'name2', 'name3') switch_net_intfs = (['vnet1'], ['vnet1', 'vnet3'], ['vnet3']) for i in range(len(switch_ids)): self.__create_virtual_switch( id=switch_ids[i], name=switch_names[i], networkInterfaces=switch_net_intfs[i]) # Query with sort switches = api.virtual_switch_get_all_by_filters( self.admin_context, { 'networkInterfaces': 'vnet1'}, 'id', DbConstants.ORDER_ASC) self.assert_(switches is not None) self.assert_(len(switches) == 2) self.assert_(switches[0] is not None) self.assert_(switches[0].id == switch_ids[0]) self.assert_(switches[1] is not None) self.assert_(switches[1].id == switch_ids[1])
def test_timestamp_columns(self): """ Test the time stamp columns createEpoch, modifiedEpoch and deletedEpoch """ vmhost = VmHost() vmhost.set_id('VH1') virSw1 = VirtualSwitch() virSw1.set_id('VS1_VH1') portGrp1 = PortGroup() portGrp1.set_id('PG1_VH1') virSw1.add_portGroups(portGrp1) vmhost.add_virtualSwitches(virSw1) vmhost.add_portGroups(portGrp1) # Check for createEpoch epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, vmhost_queried.get_createEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, virSw.get_createEpoch())) for pg in virSw.get_portGroups(): self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, pg.get_createEpoch())) # Check for lastModifiedEpoch after modifying host vmhost_modified = vmhost_queried test_utils.unset_timestamp_fields(vmhost_modified) vmhost_modified.set_name('changed_name') epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost_modified) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_(vmhost_modified.get_createEpoch() == vmhost_queried.get_createEpoch()) self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, vmhost_queried.get_lastModifiedEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, virSw.get_lastModifiedEpoch())) for pg in virSw.get_portGroups(): self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_lastModifiedEpoch())) # Check for createdEpoch after adding switch and portgroup to host vmhost_modified = vmhost_queried test_utils.unset_timestamp_fields(vmhost_modified) virSw2 = VirtualSwitch() virSw2.set_id('VS2_VH1') portGrp2 = PortGroup() portGrp2.set_id('PG2_VH1') virSw2.add_portGroups(portGrp2) vmhost_modified.add_virtualSwitches(virSw2) vmhost_modified.add_portGroups(portGrp2) epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost_modified) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_(vmhost_modified.get_createEpoch() == vmhost_queried.get_createEpoch()) self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, vmhost_queried.get_lastModifiedEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): if virSw.get_id() == virSw2.get_id(): self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, virSw.get_createEpoch())) else: self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, virSw.get_lastModifiedEpoch())) for pg in virSw.get_portGroups(): if pg.get_id() == portGrp2.get_id(): self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_createEpoch())) else: self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_lastModifiedEpoch())) # Check for deletedEpoch epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_delete_by_ids(self.admin_context, [vmhost_queried.get_id()]) epoch_after = utils.get_current_epoch_ms() deleted_host = healthnmon_db_api.vm_host_get_all_by_filters( self.admin_context, {"id": vmhost_queried.get_id()}, None, None)[0] self.assertTrue(deleted_host.get_deleted()) self.assert_( test_utils.is_timestamp_between(epoch_before, epoch_after, deleted_host.get_deletedEpoch())) deleted_switches = healthnmon_db_api.virtual_switch_get_all_by_filters( self.admin_context, {"id": (virSw1.get_id(), virSw2.get_id())}, None, None) for deleted_switch in deleted_switches: self.assertTrue(deleted_switch.get_deleted()) self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, deleted_switch.get_deletedEpoch())) for deleted_portgrp in deleted_switch.get_portGroups(): self.assertTrue(deleted_portgrp.get_deleted()) self.assert_( test_utils.is_timestamp_between( epoch_before, epoch_after, deleted_portgrp.get_deletedEpoch()))
def test_timestamp_columns(self): """ Test the time stamp columns createEpoch, modifiedEpoch and deletedEpoch """ vmhost = VmHost() vmhost.set_id('VH1') virSw1 = VirtualSwitch() virSw1.set_id('VS1_VH1') portGrp1 = PortGroup() portGrp1.set_id('PG1_VH1') virSw1.add_portGroups(portGrp1) vmhost.add_virtualSwitches(virSw1) vmhost.add_portGroups(portGrp1) # Check for createEpoch epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, vmhost_queried.get_createEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, virSw.get_createEpoch())) for pg in virSw.get_portGroups(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_createEpoch())) # Check for lastModifiedEpoch after modifying host vmhost_modified = vmhost_queried test_utils.unset_timestamp_fields(vmhost_modified) vmhost_modified.set_name('changed_name') epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost_modified) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_(vmhost_modified.get_createEpoch( ) == vmhost_queried.get_createEpoch()) self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, vmhost_queried.get_lastModifiedEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, virSw.get_lastModifiedEpoch())) for pg in virSw.get_portGroups(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_lastModifiedEpoch())) # Check for createdEpoch after adding switch and portgroup to host vmhost_modified = vmhost_queried test_utils.unset_timestamp_fields(vmhost_modified) virSw2 = VirtualSwitch() virSw2.set_id('VS2_VH1') portGrp2 = PortGroup() portGrp2.set_id('PG2_VH1') virSw2.add_portGroups(portGrp2) vmhost_modified.add_virtualSwitches(virSw2) vmhost_modified.add_portGroups(portGrp2) epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_save(self.admin_context, vmhost_modified) epoch_after = utils.get_current_epoch_ms() vmhost_queried = healthnmon_db_api.vm_host_get_by_ids( self.admin_context, [vmhost.get_id()])[0] self.assert_(vmhost_modified.get_createEpoch( ) == vmhost_queried.get_createEpoch()) self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, vmhost_queried.get_lastModifiedEpoch())) for virSw in vmhost_queried.get_virtualSwitches(): if virSw.get_id() == virSw2.get_id(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, virSw.get_createEpoch())) else: self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, virSw.get_lastModifiedEpoch())) for pg in virSw.get_portGroups(): if pg.get_id() == portGrp2.get_id(): self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_createEpoch())) else: self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, pg.get_lastModifiedEpoch())) # Check for deletedEpoch epoch_before = utils.get_current_epoch_ms() healthnmon_db_api.vm_host_delete_by_ids( self.admin_context, [vmhost_queried.get_id()]) epoch_after = utils.get_current_epoch_ms() deleted_host = healthnmon_db_api.vm_host_get_all_by_filters( self.admin_context, {"id": vmhost_queried.get_id()}, None, None)[0] self.assertTrue(deleted_host.get_deleted()) self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, deleted_host.get_deletedEpoch())) deleted_switches = healthnmon_db_api.virtual_switch_get_all_by_filters(self.admin_context, {"id": (virSw1.get_id(), virSw2.get_id())}, None, None) for deleted_switch in deleted_switches: self.assertTrue(deleted_switch.get_deleted()) self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, deleted_switch.get_deletedEpoch())) for deleted_portgrp in deleted_switch.get_portGroups(): self.assertTrue(deleted_portgrp.get_deleted()) self.assert_(test_utils.is_timestamp_between( epoch_before, epoch_after, deleted_portgrp.get_deletedEpoch()))