673
672
(yield self.states["unit"].get_charm_id()), old_charm_id)
675
def test_agent_force_upgrade_bad_unit_state(self):
676
"""The upgrade runs if forced and the unit is in a bad state."""
677
# Upload a new version of the unit's charm
678
repository = self.increment_charm(self.charm)
679
charm = yield repository.find(CharmURL.parse("local:series/mysql"))
680
charm, charm_state = yield self.publish_charm(charm.path)
681
old_charm_id = yield self.states["unit"].get_charm_id()
683
output = self.capture_logging("juju.agents.unit", level=logging.DEBUG)
685
self.agent.set_watch_enabled(True)
686
yield self.agent.startService()
688
# Mark the unit for upgrade, with an invalid state.
689
with (yield self.agent.workflow.lock()):
690
yield self.agent.workflow.fire_transition("error_configure")
691
yield self.states["service"].set_charm_id(charm_state.id)
692
yield self.states["unit"].set_upgrade_flag(force=True)
694
# Its hard to watch something with no hooks and no state changes.
695
yield self.sleep(0.1)
697
self.assertIdentical(
698
(yield self.states["unit"].get_upgrade_flag()), False)
699
self.assertIn("Forced upgrade complete", output.getvalue())
701
(yield self.states["unit"].get_charm_id()), "local:series/mysql-2")
702
self.assertEquals(old_charm_id, "local:series/dummy-1")
676
705
def test_agent_upgrade_no_flag(self):
677
706
"""An upgrade stops if there is no upgrade flag set."""
678
707
log_written = self.wait_for_log(