← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1589181] Re: Unit test scene of test_cleanup_incomplete_migrations_dest_node is set error.

 

** 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 <jenkins@xxxxxxxxxxxxxxxxxxxx>
  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


References