예제 #1
0
def test_deop_2_user_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
    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_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 = False
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "deop test_user2 test_chan2")
        )
        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)
예제 #2
0
def test_get_feeds_by_destination(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"subscriptions"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv2 = ServerMock(hallo)
    serv2.name = "test_serv2"
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    user2 = serv1.get_user_by_address("test_user2", "test_user2")
    chan3 = serv2.get_channel_by_address("test_chan3".lower(), "test_chan3")
    # Setup a feed list
    rfl = SubscriptionRepo()
    rf1 = RssSource("http://spangle.org.uk/hallo/test_rss.xml?1", "feed 1")
    sub1 = Subscription(serv1, chan1, rf1, timedelta(days=1), None, None)
    rfl.add_sub(sub1)
    rf2 = RssSource("http://spangle.org.uk/hallo/test_rss.xml?2", "feed 2")
    sub2 = Subscription(serv1, user2, rf2, timedelta(days=1), None, None)
    rfl.add_sub(sub2)
    rf3 = RssSource("http://spangle.org.uk/hallo/test_rss.xml?3", "feed 3")
    sub3 = Subscription(serv2, chan3, rf3, timedelta(days=1), None, None)
    rfl.add_sub(sub3)
    rf4 = RssSource("http://spangle.org.uk/hallo/test_rss.xml?4", "feed 4")
    sub4 = Subscription(serv2, chan3, rf4, timedelta(days=1), None, None)
    rfl.add_sub(sub4)
    rf5 = RssSource(
        "http://spangle.org.uk/hallo/test_rss.xml?5",
        feed_title="feed 5",
    )
    sub5 = Subscription(serv2, chan3, rf5, timedelta(days=1), None, None)
    rfl.add_sub(sub5)
    # Check function
    feed_list = rfl.get_subs_by_destination(chan3)
    assert len(feed_list) == 3
    assert sub4 in feed_list
    assert sub3 in feed_list
    assert sub5 in feed_list
예제 #3
0
def test_unmute_1_not_in_channel(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", "test_chan2")
    chan2.in_channel = False
    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, None, user1, "unmute test_chan2"))
        data = serv1.get_send_data(1, user1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "not in that channel" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
예제 #4
0
def test_check_destination(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"silly"})
    serv_name1 = "test_serv1"
    serv_name2 = "test_serv2"
    serv_name3 = "test_serv3"
    chan_name1 = "test_chan1"
    chan_name2 = "test_chan2"
    chan_name3 = "test_chan3"
    chan_name4 = "test_chan4"
    chan_name5 = "test_chan5"
    # Set up test destinations
    serv1 = ServerMock(hallo)
    serv2 = ServerMock(hallo)
    serv3 = ServerMock(hallo)
    serv1.name = serv_name1
    serv2.name = serv_name2
    serv3.name = serv_name3
    chan1 = serv1.get_channel_by_address(chan_name1.lower(), chan_name1)
    chan2 = serv1.get_channel_by_address(chan_name2.lower(), chan_name2)
    chan3 = serv2.get_channel_by_address(chan_name3.lower(), chan_name3)
    chan4 = serv3.get_channel_by_address(chan_name4.lower(), chan_name4)
    chan5 = serv3.get_channel_by_address(chan_name5.lower(), chan_name5)
    # Check when no whitelist or blacklist
    rm = ReplyMessage("test")
    assert rm.check_destination(chan1), "check_destination() not working without list"
    assert rm.check_destination(chan2), "check_destination() not working without list"
    assert rm.check_destination(chan3), "check_destination() not working without list"
    assert rm.check_destination(chan4), "check_destination() not working without list"
    assert rm.check_destination(chan5), "check_destination() not working without list"
    # Add a blacklist for a specific channel on a specific server
    rm.add_blacklist(serv_name1, chan_name1)
    assert not rm.check_destination(
        chan1
    ), "check_destination() not working with blacklist"
    assert rm.check_destination(chan2), "check_destination() not working with blacklist"
    assert rm.check_destination(chan3), "check_destination() not working with blacklist"
    assert rm.check_destination(chan4), "check_destination() not working with blacklist"
    assert rm.check_destination(chan5), "check_destination() not working with blacklist"
    # Add a whitelist for a specific channel on a specific server
    rm.add_whitelist(serv_name3, chan_name5)
    assert not rm.check_destination(
        chan1
    ), "check_destination() not working with blacklist"
    assert not rm.check_destination(
        chan2
    ), "check_destination() not working with blacklist"
    assert not rm.check_destination(
        chan3
    ), "check_destination() not working with blacklist"
    assert not rm.check_destination(
        chan4
    ), "check_destination() not working with blacklist"
    assert rm.check_destination(chan5), "check_destination() not working with blacklist"
예제 #5
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)
예제 #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]
예제 #7
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]
예제 #8
0
파일: test_voice.py 프로젝트: wirenic/Hallo
def test_voice_0_is_voice(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_user1.is_voice = True
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "voice"))
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "already has voice" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
예제 #9
0
def test_1_channel_privmsg():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    # Try to get permissions of current channel from a privmsg
    try:
        perm_cont.find_permission_mask(["channel"], user1, None)
        assert False, "Should not have managed to get permission mask."
    except hallo.modules.permission_control.PermissionControlException as e:
        assert "error" in str(e).lower()
        assert "can't set generic channel permissions in a privmsg" in str(
            e).lower()
예제 #10
0
def test_1_user_just_name_privmsg():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    chan1.add_user(user1)
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    perm4 = PermissionMask()
    user2.permission_mask = perm4
    # Get permissions of specified user group
    try:
        perm_cont.find_permission_mask(["test_user2"], user1, None)
        assert False, "Find permission mask should have failed."
    except hallo.modules.permission_control.PermissionControlException as e:
        assert "error" in str(e).lower()
        assert "i can't find that permission mask" in str(e).lower()
예제 #11
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)
예제 #12
0
def test_1_user_just_name():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    chan1.add_user(user1)
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    perm4 = PermissionMask()
    user2.permission_mask = perm4
    chan1.add_user(user2)
    # Get permissions of specified user in channel
    data = perm_cont.find_permission_mask(["test_user2"], user1, chan1)
    assert data == perm4, "Did not find the correct permission mask."
예제 #13
0
def test_1_user_group_name():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    group1 = UserGroup("test_group1", hallo1)
    perm4 = PermissionMask()
    group1.permission_mask = perm4
    hallo1.add_user_group(group1)
    # Get permissions of specified user group
    data = perm_cont.find_permission_mask(["user_group=test_group1"], user1,
                                          chan1)
    assert data == perm4, "Did not find the correct permission mask."
예제 #14
0
def test_1_user_group_no_name():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    group1 = UserGroup("test_group1", hallo1)
    perm4 = PermissionMask()
    group1.permission_mask = perm4
    hallo1.add_user_group(group1)
    # Try to get permissions of non-existent user group
    try:
        perm_cont.find_permission_mask(["user_group=test_group2"], user1,
                                       chan1)
        assert False, "Find permission mask should have failed."
    except hallo.modules.permission_control.PermissionControlException as e:
        assert "error" in str(e).lower()
        assert "no user group exists by that name" in str(e).lower()
예제 #15
0
def test_server_specified_first(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter(
        {"server_control"})
    # Set up test resources
    test_serv = ServerMock(hallo)
    test_serv.name = "TestServer1"
    hallo.add_server(test_serv)
    test_chan = test_serv.get_channel_by_address("#other_serv".lower(),
                                                 "#other_serv")
    test_chan.in_channel = True
    # Send command
    hallo.function_dispatcher.dispatch(
        EventMessage(
            test_server,
            test_channel,
            test_user,
            "leave server=" + test_serv.name + " " + test_chan.name,
        ))
    # Check response data
    data = test_server.get_send_data(1, test_channel, EventMessage)
    test_server.get_left_channels(0)
    chans = test_serv.get_left_channels(1)
    assert chans[0] == test_chan
    assert "left" in data[0].text.lower()
    assert test_chan.name in data[0].text.lower()
예제 #16
0
파일: test_reply.py 프로젝트: wirenic/Hallo
def test_reply_haskell(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"silly"})
    reply_func = hallo.function_dispatcher.get_function_by_name("reply")
    reply_obj = hallo.function_dispatcher.get_function_object(
        reply_func)  # type: Reply
    # Check haskell.jpg
    response = reply_obj.passive_run(
        EventMessage(test_server, test_channel, test_user, "haskell.jpg"),
        hallo)
    assert response is None
    # Check on correct channel
    serv1 = ServerMock(hallo)
    serv1.name = "shadowworld"
    chan1 = serv1.get_channel_by_address("#ecco-the-dolphin".lower(),
                                         "#ecco-the-dolphin")
    user1 = serv1.get_user_by_address("test_user".lower(), "test_user")
    response = reply_obj.passive_run(
        EventMessage(serv1, chan1, user1, "haskell.jpg"), hallo)
    assert "http" in response.text.lower()
    assert "haskell.jpg" in response.text.lower()
    # Check image exists
    page_request = urllib.request.Request(response.text)
    page_opener = urllib.request.build_opener()
    response_data = page_opener.open(page_request).read()
    assert len(response_data) > 0, "haskell.jpg image does not exist."
예제 #17
0
파일: test_voice.py 프로젝트: wirenic/Hallo
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)
예제 #18
0
def test_2_server_chan(hallo_getter):
    hallo_obj, test_server, test_channel, test_user = hallo_getter(
        {"permission_control"})
    perm_cont = Permissions()
    # Set up a test server and channel
    serv1 = ServerMock(hallo_obj)
    serv1.name = "test_serv1"
    hallo_obj.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    # Get permission mask of given channel
    data = perm_cont.find_permission_mask(
        ["server=test_serv1", "channel=test_chan1"], test_user, test_channel)
    assert perm1 == data, "Did not find the correct permission mask."
예제 #19
0
def test_get_response(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"silly"})
    # Setup common testing objects
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    user1 = serv1.get_user_by_address("test_user1", "test_user1")
    # Basic ReplyMessageList get_response() test
    rml1 = ReplyMessageList()
    rm1 = ReplyMessage("test1")
    rm1.add_response("response1")
    rm2 = ReplyMessage("test2")
    rm2.add_response("response2")
    rml1.add_reply_message(rm1)
    rml1.add_reply_message(rm2)
    # Check response 1 works
    assert rml1.get_response("test1", user1, chan1) == "response1"
    assert rml1.get_response("test2", user1, chan1) == "response2"
    assert rml1.get_response("test3", user1, chan1) is None
    # Check blacklists
    rml2 = ReplyMessageList()
    rm1 = ReplyMessage("test")
    rm1.add_response("response1")
    rm1.add_blacklist(serv1.name, chan1.name)
    rm2 = ReplyMessage("test")
    rm2.add_response("response2")
    rml2.add_reply_message(rm1)
    rml2.add_reply_message(rm2)
    assert rml2.get_response("test", user1, chan1) == "response2"
    # Check whitelists
    rml3 = ReplyMessageList()
    rm1 = ReplyMessage("test")
    rm1.add_response("response1")
    rm1.add_whitelist(serv1.name, "not_chan_1")
    rm2 = ReplyMessage("test")
    rm2.add_response("response2")
    rml3.add_reply_message(rm1)
    rml3.add_reply_message(rm2)
    assert rml3.get_response("test", user1, chan1) == "response2"
    # Check replacements
    rml4 = ReplyMessageList()
    rm1 = ReplyMessage("test")
    rm1.add_response("response {USER} {CHANNEL} {SERVER}")
    rml4.add_reply_message(rm1)
    assert (rml4.get_response(
        "test", user1, chan1) == "response test_user1 test_chan1 test_serv1")
예제 #20
0
파일: conftest.py 프로젝트: wirenic/Hallo
 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
예제 #21
0
파일: test_reply.py 프로젝트: wirenic/Hallo
def test_reply_pew(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"silly"})
    reply_func = hallo.function_dispatcher.get_function_by_name("reply")
    reply_obj = hallo.function_dispatcher.get_function_object(
        reply_func)  # type: Reply
    # Check pewpew
    response = reply_obj.passive_run(
        EventMessage(test_server, test_channel, test_user, "pew"), hallo)
    assert response.text == "pew pew"
    # Check blacklist
    serv1 = ServerMock(hallo)
    serv1.name = "canternet"
    chan1 = serv1.get_channel_by_address("#ukofequestria".lower(),
                                         "#ukofequestria")
    user1 = serv1.get_user_by_address("test_user".lower(), "test_user")
    response = reply_obj.passive_run(EventMessage(serv1, chan1, user1, "pew"),
                                     hallo)
    assert response is None
예제 #22
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)
예제 #23
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)
예제 #24
0
def test_op_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")
    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, "op"))
        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)
예제 #25
0
def test_1_channel():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    # Get permissions of current channel
    data = perm_cont.find_permission_mask(["channel"], user1, chan1)
    assert data == perm1, "Did not find the correct permission mask."
예제 #26
0
def test_1_server_name(hallo_getter):
    hallo_obj, test_server, test_channel, test_user = hallo_getter(
        {"permission_control"})
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    # Get permissions of current server
    data = perm_cont.find_permission_mask(["server=test_serv1"], user1, chan1)
    assert data == perm0, "Did not find correct permission mask"
예제 #27
0
def test_2_server_no_chan_user(hallo_getter):
    hallo_obj, test_server, test_channel, test_user = hallo_getter(
        {"permission_control"})
    perm_cont = Permissions()
    # Set up a test server and channel and user
    serv1 = ServerMock(hallo_obj)
    serv1.name = "test_serv1"
    hallo_obj.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    # Get permission mask of given channel
    try:
        perm_cont.find_permission_mask(["server=test_serv1", "core"], user1,
                                       chan1)
        assert False, "Should have failed to find any permission mask."
    except hallo.modules.permission_control.PermissionControlException as e:
        assert "error" in str(e).lower()
        assert "server but not channel or user" in str(e).lower()
예제 #28
0
def test_check_response(hallo_getter):
    hallo, test_server, test_channel, test_user = hallo_getter({"silly"})
    # Setup common testing objects
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    user1 = serv1.get_user_by_address("test_user1", "test_user1")
    # Test basic response works
    rm1 = ReplyMessage("test")
    rm1.add_response("response")
    assert rm1.check_response("just a test", user1, chan1) == "response"
    # Test regex pattern match
    rm2 = ReplyMessage("\\btest[0-9]+\\b")
    rm2.add_response("response")
    assert rm2.check_response("random testing", user1, chan1) is None
    assert rm2.check_response("random test here", user1, chan1) is None
    assert rm2.check_response("this is test3 I think", user1, chan1) == "response"
    assert rm2.check_response("this is test4", user1, chan1) == "response"
    # Test multi-response works
    rm3 = ReplyMessage("test")
    rm3.add_response("response1")
    rm3.add_response("response2")
    rm3.add_response("response3")
    found_responses = set()
    for _ in range(50):
        response = rm3.check_response("another test", user1, chan1)
        found_responses.add(response)
        assert response in ["response1", "response2", "response3"]
    assert len(found_responses) > 1
    # Test replacements
    rm4 = ReplyMessage("test")
    rm4.add_response("response {USER} {CHANNEL} {SERVER}")
    assert (
        rm4.check_response("test", user1, chan1)
        == "response test_user1 test_chan1 test_serv1"
    )
예제 #29
0
def test_1_server_no_name():
    perm_cont = Permissions()
    # Set up a test server and channel and user
    hallo1 = Hallo()
    perm3 = PermissionMask()
    hallo1.permission_mask = perm3
    serv1 = ServerMock(hallo1)
    serv1.name = "test_serv1"
    perm0 = PermissionMask()
    serv1.permission_mask = perm0
    hallo1.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    perm1 = PermissionMask()
    chan1.permission_mask = perm1
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    perm2 = PermissionMask()
    user1.permission_mask = perm2
    # Get permissions of current server
    try:
        perm_cont.find_permission_mask(["server=test_serv2"], user1, chan1)
        assert False, "Find permission mask should have failed."
    except hallo.modules.permission_control.PermissionControlException as e:
        assert "error" in str(e).lower()
        assert "no server exists by that name" in str(e).lower()
예제 #30
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()