def test_demote(self): task_control = FakeTaskControl() runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) manager = ClusterManager(self._client, "/home/test/my_cluster") runner.start() self_member = manager.add_member(self._self_instance) # 'self_instance' becomes the master. manager.promote_member(self_member) runner.promoted.wait(1) another_member = manager.add_member(ServiceInstance(Endpoint("another_host", 10000))) # This demotes 'self_instance', which should cause runner to stop. manager.promote_member(another_member) assert deadline(runner.join, Amount(1, Time.SECONDS))
def test_get_log_position(self): task_control = FakeTaskControl(position=1) runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) runner.start() assert runner.get_log_position() == 1
def test_mysqld_error(self): task_control = FakeTaskControl(mysqld="exit 123") runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) runner.start() assert deadline(runner.join, Amount(1, Time.SECONDS)) == 123
def test_start_command_error(self): task_control = FakeTaskControl(start_cmd="exit 1") runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) with pytest.raises(TaskError) as e: runner.start() assert e.value.message.startswith("Failed to start MySQL task")
def test_stop(self): task_control = FakeTaskControl() runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) runner.start() assert runner.stop() # Killed by SIGTERM. assert deadline(runner.join, Amount(1, Time.SECONDS)) == -signal.SIGTERM
def test_stop_interminable(self): cmd = """trap "echo Trapped SIGTERM!" TERM while : do sleep 60 done """ task_control = FakeTaskControl(mysqld=cmd) runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) task_control._mysqld = cmd runner.start() assert runner.stop(timeout=1) assert deadline(runner.join, Amount(1, Time.SECONDS)) == -signal.SIGKILL
def test_reparent(self): task_control = FakeTaskControl() runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) manager = ClusterManager(self._client, "/home/test/my_cluster") runner.start() # Promote another instance. master = ServiceInstance(Endpoint("another_host", 10000)) another_member = manager.add_member(master) manager.promote_member(another_member) assert runner.master.get(True, 1) == master assert runner.stop() assert deadline(runner.join, Amount(1, Time.SECONDS))
def test_promote_command_error(self): task_control = FakeTaskControl(promote_cmd="exit 1") runner = MysosTaskRunner( self._self_instance, self._client, "/home/test/my_cluster", NoopPackageInstaller(), task_control, self._state_manager) manager = ClusterManager(self._client, "/home/test/my_cluster") runner.start() self_member = manager.add_member(self._self_instance) # 'self_instance' becomes the master. manager.promote_member(self_member) runner.promoted.wait(1) with pytest.raises(TaskError) as e: runner.join() assert e.value.message.startswith("Failed to promote the slave")