Beispiel #1
0
def test_voice_1priv_is_op(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = True
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, None, user1, "voice test_chan1"))
        data = serv1.get_send_data(1, user1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "already has voice" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #2
0
def test_unmute_0(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "unmute"))
        data = serv1.get_send_data(2)
        assert "error" not in data[1].text.lower()
        assert data[0].channel == chan1
        assert data[1].channel == chan1
        assert data[0].__class__ == EventMode
        assert data[1].__class__ == EventMessage
        assert data[0].mode_changes == "-m"
        assert "set mute in " + chan1.name in data[1].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #3
0
def test_unmute_0_no_power(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = False
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "unmute"))
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "don't have power" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #4
0
def test_run_add_off(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter(
        {"permission_control"})
    # Set up a test hallo and server and channel and user
    hallo1 = Hallo()
    perm0 = PermissionMask()
    hallo1.permission_mask = perm0
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm1 = PermissionMask()
    serv1.permission_mask = perm1
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm2 = PermissionMask()
    chan1.permission_mask = perm2
    user1 = serv1.get_user_by_address("test_user1", "test_user1")
    perm3 = PermissionMask()
    user1.permission_mask = perm3
    # Get permission mask of given channel
    test_right = "test_right"
    hallo.function_dispatcher.dispatch(
        EventMessage(
            serv1,
            chan1,
            user1,
            "permissions server=test_serv1 channel=test_chan1 " + test_right +
            " off",
        ))
    data = serv1.get_send_data(1, chan1, EventMessage)
    assert "error" not in data[0].text.lower()
    assert "set " + test_right + " to false" in data[0].text.lower()
    assert test_right in perm2.rights_map
    assert not perm2.rights_map[test_right]
Beispiel #5
0
def test_deop_2_user_user_not_there(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter({"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2")
    chan2.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    serv1.get_user_by_address("test_user3".lower(), "test_user3")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick())
    chan1.add_user(user1)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1.add_user(user_hallo)
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    chan2.add_user(user2)
    chan2_user1 = chan2.get_membership_by_user(user2)
    chan2_user1.is_op = False
    chan2.add_user(user_hallo)
    chan2_hallo = chan2.get_membership_by_user(user_hallo)
    chan2_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "deop test_user3 test_chan2")
        )
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "test_user3 is not in test_chan2" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #6
0
def test_run_fail_not_bool(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter(
        {"permission_control"})
    # Set up a test hallo and server and channel and user
    hallo1 = Hallo()
    perm0 = PermissionMask()
    hallo1.permission_mask = perm0
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm1 = PermissionMask()
    serv1.permission_mask = perm1
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm2 = PermissionMask()
    chan1.permission_mask = perm2
    user1 = serv1.get_user_by_address("test_user1", "test_user1")
    perm3 = PermissionMask()
    user1.permission_mask = perm3
    # Get permission mask of given channel
    test_right = "test_right"
    perm1.set_right(test_right, True)
    hallo.function_dispatcher.dispatch(
        EventMessage(
            serv1,
            chan1,
            user1,
            "permissions server=test_serv1 " + test_right + " yellow",
        ))
    data = serv1.get_send_data(1, chan1, EventMessage)
    assert "error" in data[0].text.lower()
    assert "don't understand your boolean value" in data[0].text.lower()
    assert test_right in perm1.rights_map
    assert perm1.rights_map[test_right]
Beispiel #7
0
def test_invite_1priv(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter({"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick())
    chan1.add_user(user_hallo)
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, None, user1, "invite test_chan1")
        )
        data = serv1.get_send_data(2)
        assert "error" not in data[1].text.lower()
        assert data[0].channel == chan1
        assert data[1].user == user1
        assert data[0].__class__ == EventInvite
        assert data[1].__class__ == EventMessage
        assert data[0].invited_user == user1
        assert "invite sent" in data[1].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #8
0
 def function(modules=None):
     if modules is None:
         modules = {
             "ascii_art",
             "bio",
             "channel_control",
             "convert",
             "euler",
             "hallo_control",
             "math",
             "permission_control",
             "random",
             "server_control",
             "silly",
             "subscriptions",
         }
     function_dispatcher = FunctionDispatcher(modules, hallo)
     hallo.function_dispatcher = function_dispatcher
     # Create server
     server = ServerMock(hallo)
     server.name = "mock-server"
     hallo.add_server(server)
     # Start hallo thread
     hallo_thread.start()
     # Create test users and channel, and configure them
     hallo_user = server.get_user_by_address(
         server.get_nick().lower(), server.get_nick()
     )
     test_user = server.get_user_by_address("test", "test")
     test_user.online = True
     test_chan = server.get_channel_by_address("#test", "#test")
     test_chan.in_channel = True
     test_chan.add_user(hallo_user)
     test_chan.add_user(test_user)
     # Wait until hallo is open
     count = 0
     while not hallo.open:
         time.sleep(0.01)
         count += 1
         assert count < 1000, "Hallo took too long to start."
         if count > 1000:
             break
     # Clear any data in the server
     server.get_send_data()
     return hallo, server, test_chan, test_user
Beispiel #9
0
def test_unmute_privmsg(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, None, user1, "unmute"))
        data = serv1.get_send_data(1, user1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "can't unset mute on a private message" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #10
0
def test_help_mock_func_disp():
    # Set up mock objects
    mock_hallo = Hallo()
    mock_func_disp = FunctionDispatcher(set(), mock_hallo)
    mock_hallo.function_dispatcher = mock_func_disp
    mock_func_disp.load_function(None, FunctionMock)
    mock_func_disp.load_function(None, FunctionMockNoDoc)
    mock_func_disp.load_function(None, Help)
    mock_server = ServerMock(mock_hallo)
    mock_server.name = "test_serv1"
    mock_user = mock_server.get_user_by_address("test_user1".lower(), "test_user1")
    # Test things
    mock_func_disp.dispatch(EventMessage(mock_server, None, mock_user, "help"))
    data = mock_server.get_send_data(1, mock_user, EventMessage)
    assert "error" not in data[0].text.lower()
    assert "list of available functions:" in data[0].text.lower()
    assert "function mock" in data[0].text.lower()
    assert "function no doc" in data[0].text.lower()
Beispiel #11
0
def test_deop_not_irc(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter({"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = "NOT_IRC"
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    chan1.add_user(user1)
    chan1.add_user(
        serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick())
    )
    try:
        hallo.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "deop"))
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "only available for irc" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #12
0
def test_deop_0_privmsg(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter({"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    user1 = serv1.get_user_by_address("test_user1", "test_user1")
    chan1.add_user(user1)
    chan1.add_user(
        serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick())
    )
    try:
        hallo.function_dispatcher.dispatch(EventMessage(serv1, None, user1, "deop"))
        data = serv1.get_send_data(1, user1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "in a private message" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Beispiel #13
0
def test_voice_2_chan(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2")
    chan2.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1.add_user(user_hallo)
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    chan2.add_user(user2)
    chan2_user2 = chan2.get_membership_by_user(user2)
    chan2_user2.is_op = False
    chan2.add_user(user_hallo)
    chan2_hallo = chan2.get_membership_by_user(user_hallo)
    chan2_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "voice test_chan2 test_user2"))
        data = serv1.get_send_data(2)
        assert "error" not in data[1].text.lower()
        assert data[0].channel == chan2
        assert data[1].channel == chan1
        assert data[0].__class__ == EventMode
        assert data[1].__class__ == EventMessage
        assert data[0].mode_changes == "+v {}".format(user2.address)
        assert "status given" in data[1].text.lower()
    finally:
        hallo.remove_server(serv1)
 def test_run_by_search(self):
     # Set up test servers and channels
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     chan2 = serv1.get_channel_by_address("test_chan2".lower(),
                                          "test_chan2")
     user1 = serv1.get_user_by_address("test_user1", "test_user1")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         sub_repo = SubscriptionRepo()
         rf1 = E621Source("cabinet")
         sub1 = Subscription(serv1, chan1, rf1, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub1)
         rf2 = E621Source("clefable")
         sub2 = Subscription(serv1, chan2, rf2, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub2)
         rf3 = E621Source("fez")
         sub3 = Subscription(serv2, chan3, rf3, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub3)
         # Splice this rss feed list into the function dispatcher's rss check object
         rss_check_class = self.function_dispatcher.get_function_by_name(
             "check subscription")
         rss_check_obj = self.function_dispatcher.get_function_object(
             rss_check_class)  # type: SubscriptionCheck
         rss_check_obj.subscription_repo = sub_repo
         # Invalid title
         self.function_dispatcher.dispatch(
             EventMessage(
                 self.server,
                 self.test_chan,
                 self.test_user,
                 "e621 sub check Not a valid search",
             ))
         data = self.server.get_send_data(1, self.test_chan, EventMessage)
         assert "error" in data[0].text.lower()
         # Correct title but wrong channel
         self.function_dispatcher.dispatch(
             EventMessage(serv1, chan1, user1, "e621 sub check clefable"))
         data = serv1.get_send_data(1, chan1, EventMessage)
         assert "error" in data[0].text.lower()
         # Correct title check update
         self.function_dispatcher.dispatch(
             EventMessage(serv1, chan2, user1, "e621 sub check clefable"))
         data = serv1.get_send_data(51, chan2, EventMessage)
         has_photo_id = 0
         for x in range(50):
             assert "update on" in data[x].text.lower()
             if hasattr(data[x],
                        "photo_id") and data[x].photo_id is not None:
                 has_photo_id += 1
             assert "clefable" in data[x].text
         assert has_photo_id > 40, "Almost all subscription updates should have a photo"
         assert ("subscription updates were found"
                 in data[50].text.lower()), "Actual message: {}".format(
                     data[0].text)
         # No updates
         self.function_dispatcher.dispatch(
             EventMessage(serv1, chan2, user1, "e621 sub check clefable"))
         data = serv1.get_send_data(1, chan2, EventMessage)
         assert "no updates" in data[
             0].text, "No further updates should be found."
     finally:
         self.hallo.remove_server(serv2)
         self.hallo.remove_server(serv1)
 def test_run_passive(self):
     # Set up test servers and channels
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     chan2 = serv1.get_channel_by_address("test_chan2".lower(),
                                          "test_chan2")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         sub_repo = SubscriptionRepo()
         rf1 = E621Source("cabinet")
         sub1 = Subscription(serv1, chan1, rf1, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub1)
         rf2 = E621Source("clefable")
         sub2 = Subscription(serv1, chan2, rf2, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub2)
         rf3 = E621Source("fez")
         sub3 = Subscription(serv2, chan3, rf3, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub3)
         # Splice this rss feed list into the function dispatcher's rss check object
         rss_check_class = self.function_dispatcher.get_function_by_name(
             "check subscription")
         rss_check_obj = self.function_dispatcher.get_function_object(
             rss_check_class)  # type: SubscriptionCheck
         rss_check_obj.subscription_repo = sub_repo
         # Test passive feed updates
         self.function_dispatcher.dispatch_passive(EventMinute())
         # Check test server 1 data
         serv1_data = serv1.get_send_data(100)
         chan1_count = 0
         chan2_count = 0
         for data_line in serv1_data:
             if data_line.channel == chan1:
                 chan1_count += 1
             if data_line.channel == chan2:
                 chan2_count += 1
         assert chan1_count == 50
         assert chan2_count == 50
         # Check test server 2 data
         serv2.get_send_data(50, chan3, EventMessage)
         # Test that no updates are found the second run
         rf1.last_check = None
         rf2.last_check = None
         rf3.last_check = None
         self.function_dispatcher.dispatch_passive(EventMinute())
         serv1.get_send_data(0)
         serv2.get_send_data(0)
         # Test that no feeds are checked before timeout, set urls to none and see if anything explodes.
         self.failed = False
         rf1.check_feed = self.do_not_call
         rf2.check_feed = self.do_not_call
         rf3.check_feed = self.do_not_call
         self.function_dispatcher.dispatch_passive(EventMinute())
         serv1.get_send_data(0)
         serv2.get_send_data(0)
         assert (not self.failed
                 ), "check_feed() should not have been called on any feed."
     finally:
         self.hallo.remove_server(serv2)
         self.hallo.remove_server(serv1)
Beispiel #16
0
class TestBase(unittest.TestCase):
    def setUp(self):
        print("Starting test: " + self.id())
        self.start_time = time.time()
        # Create a Hallo
        self.hallo = Hallo()
        # Only the required modules, only 1 (mock) server
        # Todo: specify modules by test?
        self.function_dispatcher = FunctionDispatcher(
            {"convert", "random", "server_control", "subscriptions"}, self.hallo
        )
        self.hallo.function_dispatcher = self.function_dispatcher
        print(
            "Running test: "
            + self.id()
            + ". Init took: "
            + str(time.time() - self.start_time)
            + " seconds."
        )
        self.server = ServerMock(self.hallo)
        self.server.name = "mock-server"
        self.hallo.add_server(self.server)
        # Start hallo thread
        self.hallo_thread = Thread(target=self.hallo.start,)
        self.hallo_thread.start()
        # Create test users and channel, and configure them
        self.hallo_user = self.server.get_user_by_address(
            self.server.get_nick().lower(), self.server.get_nick()
        )
        self.test_user = self.server.get_user_by_address("test", "test")
        self.test_user.online = True
        self.test_chan = self.server.get_channel_by_address("#test", "#test")
        self.test_chan.in_channel = True
        self.test_chan.add_user(self.hallo_user)
        self.test_chan.add_user(self.test_user)
        # Wait until hallo is open
        count = 0
        while not self.hallo.open:
            time.sleep(0.01)
            count += 1
            assert count < 1000, "Hallo took too long to start."
            if count > 1000:
                break
        # Clear any data in the server
        self.server.get_send_data()
        # Print test startup time
        print(
            "Running test: "
            + self.id()
            + ". Startup took: "
            + str(time.time() - self.start_time)
            + " seconds."
        )
        self.start_time = time.time()

    def tearDown(self):
        print(
            "Finishing test: "
            + self.id()
            + ". Test took: "
            + str(time.time() - self.start_time)
            + " seconds."
        )
        self.hallo.close()
        self.hallo_thread.join()
        print(
            "Finished test: "
            + self.id()
            + ". Test took: "
            + str(time.time() - self.start_time)
            + " seconds."
        )

    @classmethod
    def tearDownClass(cls):
        del cls
        gc.collect()
 def test_run_all(self):
     # Set up test servers and channels
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     chan2 = serv1.get_channel_by_address("test_chan2".lower(),
                                          "test_chan2")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_address("test_chan1".lower(),
                                          "test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         sub_repo = SubscriptionRepo()
         rf1 = E621Source("cabinet")
         sub1 = Subscription(serv1, chan1, rf1, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub1)
         rf2 = E621Source("clefable")
         sub2 = Subscription(serv1, chan2, rf2, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub2)
         rf3 = E621Source("fez")
         sub3 = Subscription(serv2, chan3, rf3, timedelta(days=1), None,
                             None)
         sub_repo.add_sub(sub3)
         # Splice this rss feed list into the function dispatcher's rss check object
         e621_sub_check = self.function_dispatcher.get_function_by_name(
             "check subscription")
         e621_sub_obj = self.function_dispatcher.get_function_object(
             e621_sub_check)  # type: SubscriptionCheck
         e621_sub_obj.subscription_repo = sub_repo
         # Test running all feed updates
         self.function_dispatcher.dispatch(
             EventMessage(self.server, self.test_chan, self.test_user,
                          "e621 sub check all"))
         # Check original calling channel data
         serv0_data = self.server.get_send_data(1, self.test_chan,
                                                EventMessage)
         assert (
             "subscription updates were found"
             in serv0_data[0].text.lower()), "Actual message: {}".format(
                 serv0_data[0].text)
         # Check test server 1 data
         serv1_data = serv1.get_send_data(100)
         chan1_count = 0
         chan2_count = 0
         for data_line in serv1_data:
             if data_line.channel == chan1:
                 chan1_count += 1
             if data_line.channel == chan2:
                 chan2_count += 1
         assert chan1_count == 50
         assert chan2_count == 50
         # Check test server 2 data
         serv2.get_send_data(50, chan3, EventMessage)
         # Test running with no new updates.
         self.function_dispatcher.dispatch(
             EventMessage(self.server, self.test_chan, self.test_user,
                          "e621 sub check all"))
         data = self.server.get_send_data(1, self.test_chan, EventMessage)
         assert "no updates" in data[
             0].text, "No further updates should be found."
     finally:
         self.hallo.remove_server(serv2)
         self.hallo.remove_server(serv1)