def test_get_pkg_version(self):
        self.patch_object(generic_utils.model, "get_units")
        self.patch_object(generic_utils.juju_utils, "remote_run")
        _pkg = "os-thingy"
        _version = "2:27.0.0-0ubuntu1~cloud0"
        _dpkg_output = ("ii {} {} all OpenStack thingy\n"
                        .format(_pkg, _version))
        self.remote_run.return_value = _dpkg_output
        _unit1 = mock.MagicMock()
        _unit1.entity_id = "os-thingy/7"
        _unit2 = mock.MagicMock()
        _unit2.entity_id = "os-thingy/12"
        _units = [_unit1, _unit2]
        self.get_units.return_value = _units

        # Matching
        self.assertEqual(generic_utils.get_pkg_version(_pkg, _pkg),
                         _version)

        # Mismatched
        _different_dpkg_output = ("ii {} {} all OpenStack thingy\n"
                                  .format(_pkg, "DIFFERENT"))
        self.remote_run.side_effect = [_dpkg_output, _different_dpkg_output]
        with self.assertRaises(Exception):
            generic_utils.get_pkg_version(_pkg, _pkg)
 def _skipUntilVersion_inner_2(*args, **kwargs):
     package_version = generic_utils.get_pkg_version(service, package)
     try:
         subprocess.check_call(['dpkg', '--compare-versions',
                                package_version, 'ge', release],
                               stderr=subprocess.STDOUT,
                               universal_newlines=True)
         return f(*args, **kwargs)
     except subprocess.CalledProcessError as cp:
         logging.warn("Skipping test for older ({})"
                      "service {}, requested {}".format(
                          package_version, service, release))