コード例 #1
0
ファイル: agent.py プロジェクト: rrouf/photon-controller
    def _register_services(self):
        common.services.register(ServiceName.AGENT_CONFIG, self._config)
        common.services.register(ServiceName.LOCKED_VMS, ExclusiveSet())

        threadpool = RequestIdExecutor(
            ThreadPoolExecutor(self._config.workers))
        common.services.register(ThreadPoolExecutor, threadpool)

        self._registrant = ChairmanRegistrant(self._config.chairman_list)
        self._config.on_config_change(self._config.CHAIRMAN,
                                      self._registrant.update_chairman_list)
        common.services.register(ServiceName.REGISTRANT, self._registrant)

        state_json_file = os.path.join(
            self._config.options.config_path,
            self._config.DEFAULT_STATE_FILE)
        state = State(state_json_file)

        mode = Mode(state)
        mode.on_change(self._registrant.trigger_chairman_update)
        common.services.register(ServiceName.MODE, mode)

        ds_tags = DatastoreTags(state)
        ds_tags.on_change(self._registrant.trigger_chairman_update)
        common.services.register(ServiceName.DATASTORE_TAGS, ds_tags)
コード例 #2
0
class TestState(unittest.TestCase):
    def setUp(self):
        self.file_location = tempfile.mkstemp()[1]
        self.state = State(self.file_location)
        self.mode = Mode(self.state)

    def tearDown(self):
        os.remove(self.file_location)

    def test_get_set_mode(self):
        self.mode.set_mode(MODE.NORMAL)
        assert_that(self.mode.get_mode(), equal_to(MODE.NORMAL))

    def test_get_default_mode(self):
        assert_that(self.mode.get_mode(), equal_to(MODE.NORMAL))

    @raises(AssertionError)
    def test_set_invalid_type(self):
        self.mode.set_mode("NORMAL")

    @raises(ValueError)
    def test_get_invalid_type(self):
        # State.set_mode() will check the type of parameter. State.set() does
        # not check parameter. The value could be corrupted. State.get_mode()
        # will raise ValueError.
        self.state.set(Mode.MODE_KEY, "123")
        self.mode.get_mode()

    @raises(ModeTransitionError)
    def test_invalid_transition(self):
        try:
            self.mode.set_mode(MODE.MAINTENANCE, [MODE.ENTERING_MAINTENANCE])
        except ModeTransitionError as e:
            assert_that(e.from_mode, equal_to(MODE.NORMAL))
            raise

    def test_transition_to_self(self):
        # Should allow to change mode from A to A (e.g. NORMAL to NORMAL)
        assert_that(self.mode.get_mode(), equal_to(MODE.NORMAL))
        self.mode.set_mode(MODE.NORMAL, [MODE.MAINTENANCE])
        assert_that(self.mode.get_mode(), equal_to(MODE.NORMAL))

    def test_callbacks(self):
        enter_maintenance = MagicMock()
        exit_normal = MagicMock()
        change = MagicMock()
        self.mode.on_enter_mode(MODE.MAINTENANCE, enter_maintenance)
        self.mode.on_exit_mode(MODE.NORMAL, exit_normal)
        self.mode.on_change(change)

        self.mode.set_mode(MODE.ENTERING_MAINTENANCE)
        assert_that(enter_maintenance.called, equal_to(False))
        assert_that(exit_normal.called, equal_to(True))
        assert_that(change.call_count, equal_to(1))

        self.mode.set_mode(MODE.MAINTENANCE)
        assert_that(enter_maintenance.called, equal_to(True))
        assert_that(change.call_count, equal_to(2))