HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/core22/2139/usr/share/subiquity/subiquitycore/tests/test_pubsub.py
# Copyright 2021 Canonical, Ltd.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, version 3.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.

from unittest.mock import MagicMock

from subiquitycore.tests import SubiTestCase
from subiquitycore.pubsub import MessageHub
from subiquitycore.tests.util import run_coro


class TestMessageHub(SubiTestCase):
    def setUp(self):
        self.hub = MessageHub()

    def test_multicall(self):
        cb = MagicMock()
        expected_calls = 3
        channel_id = 1234
        for _ in range(expected_calls):
            self.hub.subscribe(channel_id, cb)
        run_coro(self.hub.abroadcast(channel_id))
        self.assertEqual(expected_calls, cb.call_count)

    def test_multisubscriber(self):
        cbs = [MagicMock() for _ in range(4)]
        channel_id = 2345
        for cb in cbs:
            self.hub.subscribe(channel_id, cb)
        run_coro(self.hub.abroadcast(channel_id))
        for cb in cbs:
            cb.assert_called_once_with()

    def test_message_arg(self):
        cb = MagicMock()
        channel_id = 'test-message-arg'
        self.hub.subscribe(channel_id, cb)
        run_coro(self.hub.abroadcast(channel_id, '0', 1, 'two', [3], four=4))
        cb.assert_called_once_with('0', 1, 'two', [3], four=4)