** Changed in: nova
       Status: Fix Committed => Fix Released

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to OpenStack Compute (nova).
https://bugs.launchpad.net/bugs/1589181

Title:
  Unit test scene of test_cleanup_incomplete_migrations_dest_node is set
  error.

Status in OpenStack Compute (nova):
  Fix Released

Bug description:
  1. version
  tecs@tecs-Aspire-4740:/opt/stack/nova/nova/compute$ git log -1
  commit 545d8d8666389f33601b0b003dec844004694919
  Merge: a224d5e f5c9ebd
  Author: Jenkins <[email protected]>
  Date:   Fri Jun 3 19:25:23 2016 +0000

      Merge "Fall back to flat config drive if not found in rbd"

  2. code
      @mock.patch.object(objects.Migration, 'obj_as_admin')
      @mock.patch.object(objects.Migration, 'save')
      @mock.patch.object(objects.MigrationList, 'get_by_filters')
      @mock.patch.object(objects.InstanceList, 'get_by_filters')
      def _test_cleanup_incomplete_migrations(self, inst_host,
                                              mock_inst_get_by_filters,
                                              mock_migration_get_by_filters,
                                              mock_save, mock_obj_as_admin):
          def fake_inst(context, uuid, host):
              inst = objects.Instance(context)
              inst.uuid = uuid
              inst.host = host
              return inst

          def fake_migration(uuid, status, inst_uuid, src_host, dest_host):
              migration = objects.Migration()
              migration.uuid = uuid
              migration.status = status
              migration.instance_uuid = inst_uuid
              migration.source_compute = src_host
              migration.dest_compute = dest_host
              return migration

          fake_instances = [fake_inst(self.context, uuids.instance_1, 
inst_host),
                            fake_inst(self.context, uuids.instance_2, 
inst_host)]

          fake_migrations = [fake_migration('123', 'error',
                                            uuids.instance_1,
                                            'fake-host', 'fake-mini'),
                             fake_migration('456', 'error',
                                             uuids.instance_2,
                                            'fake-host', 'fake-mini')]

          mock_migration_get_by_filters.return_value = fake_migrations
          mock_inst_get_by_filters.return_value = fake_instances

          with mock.patch.object(self.compute.driver, 'delete_instance_files'):
              self.compute._cleanup_incomplete_migrations(self.context)

          # Ensure that migration status is set to 'failed' after instance
          # files deletion for those instances whose instance.host is not
          # same as compute host where periodic task is running.
          for inst in fake_instances:
              for mig in fake_migrations:
                  if inst.uuid == mig.instance_uuid:
                      self.assertEqual('failed', mig.status)

          # Make sure we filtered the instances by host in the DB query.
          self.assertEqual(CONF.host,
                           mock_inst_get_by_filters.call_args[0][1]['host'])

          # (hanrong) start add
          for instance in mock_inst_get_by_filters.return_value:
              self.assertEqual(CONF.host,
                               instance.host)
        # (hanrong) end end

      def test_cleanup_incomplete_migrations_dest_node(self):
          """Test to ensure instance files are deleted from destination node.

          If instance gets deleted during resizing/revert-resizing operation,
          in that case instance files gets deleted from instance.host (source
          host here), but there is possibility that instance files could be
          present on destination node.
          This test ensures that `_cleanup_incomplete_migration` periodic
          task deletes orphaned instance files from destination compute node.
          """
          self.flags(host='fake-mini')
          self._test_cleanup_incomplete_migrations('fake-host')

  3.  I add this code in "_test_cleanup_incomplete_migrations" function
          for instance in mock_inst_get_by_filters.return_value:
              self.assertEqual(CONF.host,
                               instance.host)

  4.   objects.InstanceList.get_by_filters will result instance.host==CONF.host
              inst_filters = {'deleted': True, 'soft_deleted': False,
                          'uuid': inst_uuid_from_migrations, 'host': CONF.host}
              instances = objects.InstanceList.get_by_filters(
                  context, inst_filters, expected_attrs=attrs, use_slave=True)

  5. Then error is occur
  /usr/bin/python2.7 /usr/local/pycharm/helpers/pycharm/utrunner.py 
/opt/stack/nova/nova/tests/unit/compute/test_compute_mgr.py::ComputeManagerUnitTestCase::test_cleanup_incomplete_migrations_dest_node
 true
  Testing started at 上午10:14 ...

  Failure
  _StringException: pythonlogging:'': {{{2016-06-05 10:15:17,733 INFO 
[nova.virt.driver] Loading compute driver 'fake.SmallFakeDriver'}}}

  Traceback (most recent call last):
    File "/opt/stack/nova/nova/tests/unit/compute/test_compute_mgr.py", line 
1638, in test_cleanup_incomplete_migrations_dest_node
      self._test_cleanup_incomplete_migrations('fake-host')
    File "/usr/local/lib/python2.7/dist-packages/mock/mock.py", line 1305, in 
patched
      return func(*args, **keywargs)
    File "/opt/stack/nova/nova/tests/unit/compute/test_compute_mgr.py", line 
1625, in _test_cleanup_incomplete_migrations
      instance.host)
    File "/usr/local/lib/python2.7/dist-packages/testtools/testcase.py", line 
362, in assertEqual
      self.assertThat(observed, matcher, message)
    File "/usr/local/lib/python2.7/dist-packages/testtools/testcase.py", line 
447, in assertThat
      raise mismatch_error
  testtools.matchers._impl.MismatchError: 'fake-mini' != u'fake-host'

  6. unit test scene was set error by this code
        fake_instances = [fake_inst(self.context, uuids.instance_1, inst_host),
                                       fake_inst(self.context, 
uuids.instance_2, inst_host)]
       mock_inst_get_by_filters.return_value = fake_instances

  7. so this might be right unit test scene
  fake_instances = [fake_inst(self.context, uuids.instance_1, CONF.host),
                                       fake_inst(self.context, 
uuids.instance_2, CONF.host)]

To manage notifications about this bug go to:
https://bugs.launchpad.net/nova/+bug/1589181/+subscriptions

-- 
Mailing list: https://launchpad.net/~yahoo-eng-team
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~yahoo-eng-team
More help   : https://help.launchpad.net/ListHelp

Reply via email to