예제 #1
0
 def test_get_feeds_by_url(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv2 = ServerMock(self.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 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_feed.xml?1", title="test_feed1")
     rfl.add_sub(rf1)
     rf2 = RssSub(user2.server, user2, "http://spangle.org.uk/hallo/test_feed.xml?2", title="test_feed2")
     rfl.add_sub(rf2)
     rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?3", title="test_feed3")
     rfl.add_sub(rf3)
     rf4 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?4", title="test_feed4")
     rfl.add_sub(rf4)
     rf5 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_feed.xml?4", title="test_feed3")
     rfl.add_sub(rf5)
     # Check function
     feed_list = rfl.get_subs_by_name("http://spangle.org.uk/hallo/test_feed.xml?4", chan3)
     assert len(feed_list) == 2
     assert rf4 in feed_list
     assert rf5 in feed_list
예제 #2
0
 def test_run_by_title(self):
     # Set up test servers and channels
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_name("test_chan1")
     chan2 = serv1.get_channel_by_name("test_chan2")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_name("test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         rfl = RssFeedList()
         rf1 = RssFeed()
         rf1.url = "http://spangle.org.uk/hallo/test_rss.xml?1"
         rf1.title = "test_feed1"
         rf1.server_name = chan1.server.name
         rf1.channel_name = chan1.name
         rf1.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_feed(rf1)
         rf2 = RssFeed()
         rf2.url = "http://spangle.org.uk/hallo/test_rss.xml?2"
         rf2.title = "test_feed2"
         rf2.server_name = chan2.server.name
         rf2.channel_name = chan2.name
         rf2.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_feed(rf2)
         rf3 = RssFeed()
         rf3.url = "http://spangle.org.uk/hallo/test_rss.xml?3"
         rf3.title = "test_feed1"
         rf3.server_name = chan3.server.name
         rf3.channel_name = chan3.name
         rf3.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_feed(rf3)
         # Splice this rss feed list into the function dispatcher's rss check object
         rss_check_class = self.function_dispatcher.get_function_by_name("rss check")
         rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class)  # type: FeedCheck
         rss_check_obj.rss_feed_list = rfl
         # Invalid title
         self.function_dispatcher.dispatch("rss check Not a valid feed", self.test_user, self.test_chan)
         data = self.server.get_send_data(1, self.test_chan, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         # Correct title but wrong channel
         self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan1)
         data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         # Correct title check update
         self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan2)
         data = serv1.get_send_data(1, chan2, Server.MSG_MSG)
         assert "feed updates were found" in data[0][0].lower()
         assert len(data[0][0].lower().split("\n")) == 4
         # No updates
         rf2.title = "test_feed2"
         self.function_dispatcher.dispatch("rss check test_feed2", self.test_user, chan2)
         data = serv1.get_send_data(1, chan2, Server.MSG_MSG)
         assert "no updates" in data[0][0], "No further updates should be found."
     finally:
         self.hallo.remove_server(serv2)
         self.hallo.remove_server(serv1)
예제 #3
0
 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_name("test_chan1")
     chan2 = serv1.get_channel_by_name("test_chan2")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_name("test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         rfl = E621SubList()
         rf1 = E621Sub()
         rf1.search = "butt"
         rf1.server_name = chan1.server.name
         rf1.channel_name = chan1.name
         rf1.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_sub(rf1)
         rf2 = E621Sub()
         rf2.search = "deer"
         rf2.server_name = chan2.server.name
         rf2.channel_name = chan2.name
         rf2.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_sub(rf2)
         rf3 = E621Sub()
         rf3.search = "dragon"
         rf3.server_name = chan3.server.name
         rf3.channel_name = chan3.name
         rf3.update_frequency = Commons.load_time_delta("PT3600S")
         rfl.add_sub(rf3)
         # Splice this rss feed list into the function dispatcher's rss check object
         rss_check_class = self.function_dispatcher.get_function_by_name("e621 sub check")
         rss_check_obj = self.function_dispatcher.get_function_object(rss_check_class)  # type: SubE621Check
         rss_check_obj.e621_sub_list = rfl
         # Invalid title
         self.function_dispatcher.dispatch("e621 sub check Not a valid search", self.test_user, self.test_chan)
         data = self.server.get_send_data(1, self.test_chan, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         # Correct title but wrong channel
         self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan1)
         data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         # Correct title check update
         self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan2)
         data = serv1.get_send_data(1, chan2, Server.MSG_MSG)
         assert "search updates were found" in data[0][0].lower()
         assert len(data[0][0].lower().split("\n")) == 51
         # No updates
         self.function_dispatcher.dispatch("e621 sub check deer", self.test_user, chan2)
         data = serv1.get_send_data(1, chan2, Server.MSG_MSG)
         assert "no updates" in data[0][0], "No further updates should be found."
     finally:
         self.hallo.remove_server(serv2)
         self.hallo.remove_server(serv1)
예제 #4
0
 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
         rfl = SubscriptionRepo()
         rf1 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_rss.xml?1",
                      title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf1)
         rf2 = RssSub(chan2.server, chan2, "http://spangle.org.uk/hallo/test_rss.xml?2",
                      title="test_feed2", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf2)
         rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_rss.xml?3",
                      title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf3)
         # 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 = rfl
         # Test running all feed updates
         self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user,
                                                        "rss 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
         # Check test server 1 data
         serv1_data = serv1.get_send_data(6)
         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 == 3
         assert chan2_count == 3
         # Check test server 2 data
         serv2.get_send_data(3, chan3, EventMessage)
         # Test running with no new updates.
         self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user,
                                                        "rss 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)
예제 #5
0
 def test_run_by_title(self):
     # Set up test servers and channels
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_address("test_chan1")
     chan2 = serv1.get_channel_by_address("test_chan2")
     user1 = serv1.get_user_by_address("test_user1")
     serv2 = ServerMock(self.hallo)
     serv2.name = "test_serv2"
     chan3 = serv2.get_channel_by_address("test_chan1")
     try:
         self.hallo.add_server(serv1)
         self.hallo.add_server(serv2)
         # Set up rss feeds
         rfl = SubscriptionRepo()
         rf1 = RssSub(chan1.server, chan1, "http://spangle.org.uk/hallo/test_rss.xml?1",
                      title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf1)
         rf2 = RssSub(chan2.server, chan2, "http://spangle.org.uk/hallo/test_rss.xml?2",
                      title="test_feed2", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf2)
         rf3 = RssSub(chan3.server, chan3, "http://spangle.org.uk/hallo/test_rss.xml?3",
                      title="test_feed1", update_frequency=Commons.load_time_delta("PT3600S"))
         rfl.add_sub(rf3)
         # 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 = rfl
         # Invalid title
         self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user,
                                                        "rss check Not a valid feed"))
         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, "rss check test_feed2"))
         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, "rss check test_feed2"))
         data = serv1.get_send_data(4, chan2, EventMessage)
         for x in range(3):
             assert "update on" in data[x].text.lower()
             assert "rss feed" in data[x].text.lower()
         assert "updates were found" in data[3].text.lower(), "Actual message: {}".format(data[0].text)
         # No updates
         rf2.title = "test_feed2"
         self.function_dispatcher.dispatch(EventMessage(serv1, chan2, user1, "rss check test_feed2"))
         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)
예제 #6
0
 def test_invite_2_user(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     chan1 = serv1.get_channel_by_name("test_chan1")
     chan1.in_channel = True
     chan2 = serv1.get_channel_by_name("test_chan2")
     chan2.in_channel = True
     user1 = serv1.get_user_by_name("test_user1")
     user2 = serv1.get_user_by_name("test_user2")
     user_hallo = serv1.get_user_by_name(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(user_hallo)
     chan2_hallo = chan2.get_membership_by_user(user_hallo)
     chan2_hallo.is_op = True
     try:
         self.function_dispatcher.dispatch("invite test_user2 test_chan2", user1, chan1)
         data = serv1.get_send_data(2)
         assert "error" not in data[0][0].lower()
         assert data[0][1] is None
         assert data[1][1] == chan1
         assert data[0][2] == Server.MSG_RAW
         assert data[1][2] == Server.MSG_MSG
         assert data[0][0][:6] == "INVITE"
         assert user2.name+" "+chan2.name in data[0][0]
         assert "invite sent" in data[1][0].lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #7
0
    def test_one_server(self):
        # Add one server
        serv1 = ServerMock(self.hallo)

        serv1.name = "server_list_test"
        self.hallo.add_server(serv1)
        # Send command
        self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user, "list servers"))
        data = self.server.get_send_data(1, self.test_chan, EventMessage)
        # Check response
        server_list_text = data[0].text.split(":")[1]
        server_list = server_list_text.split("], ")
        assert len(server_list) == 1
        assert serv1.name in server_list[0], "Server name not found in output.\n" \
                                             "Server name: " + serv1.name + "\n" \
                                             "Command output: " + server_list[0]
        assert "type=" + serv1.type in server_list[0], "Server type not found in output.\n" \
                                                       "Server type: " + serv1.type + "\n" \
                                                       "Command output: " + server_list[0]
        assert "state=" + serv1.state in server_list[0], "Server state not found in output.\n" \
                                                         "Server name: " + serv1.state + "\n" \
                                                         "Command output: " + server_list[0]
        assert "nick=" + serv1.get_nick() in server_list[0], "Server nick not found in output.\n" \
                                                             "Server nick: " + serv1.get_nick() + "\n" \
                                                             "Command output: " + server_list[0]
        assert "auto_connect=" + str(serv1.auto_connect) in \
               server_list[0], "Server auto connect not found in output.\n" \
                               "Server auto connect: " + \
                               str(serv1.auto_connect) + "\n" \
                                                         "Command output: " + server_list[0]
예제 #8
0
 def test_run_fail_args(self):
     # 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_name("test_chan1")
     perm2 = PermissionMask()
     chan1.permission_mask = perm2
     user1 = serv1.get_user_by_name("test_user1")
     perm3 = PermissionMask()
     user1.permission_mask = perm3
     # Get permission mask of given channel
     test_right = "test_right"
     perm1.set_right(test_right, True)
     self.function_dispatcher.dispatch("permissions server=test_serv1 "+test_right, user1, chan1)
     data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
     assert "error" in data[0][0].lower()
     assert "a location, a right and the value" in data[0][0].lower()
     assert test_right in perm1.rights_map
     assert perm1.rights_map[test_right]
예제 #9
0
 def test_invite_2_user(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.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(user_hallo)
     chan2_hallo = chan2.get_membership_by_user(user_hallo)
     chan2_hallo.is_op = True
     try:
         self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "invite test_user2 test_chan2"))
         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__ == EventInvite
         assert data[1].__class__ == EventMessage
         assert data[0].invited_user == user2
         assert "invite sent" in data[1].text.lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #10
0
 def test_devoice_1priv(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.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_voice = True
     chan1_hallo = chan1.get_membership_by_user(user_hallo)
     chan1_hallo.is_op = True
     try:
         self.function_dispatcher.dispatch(EventMessage(serv1, None, user1, "devoice 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__ == EventMode
         assert data[1].__class__ == EventMessage
         assert "-v "+user1.name in data[0].mode_changes
         assert "status taken" in data[1].text.lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #11
0
 def test_deop_2_user_not_op(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     chan1 = serv1.get_channel_by_name("test_chan1")
     chan1.in_channel = True
     chan2 = serv1.get_channel_by_name("test_chan2")
     chan2.in_channel = True
     user1 = serv1.get_user_by_name("test_user1")
     user2 = serv1.get_user_by_name("test_user2")
     user_hallo = serv1.get_user_by_name(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:
         self.function_dispatcher.dispatch("deop test_user2 test_chan2", user1, chan1)
         data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         assert "doesn't have op" in data[0][0].lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #12
0
 def test_deop_0(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     chan1 = serv1.get_channel_by_name("test_chan1")
     chan1.in_channel = True
     user1 = serv1.get_user_by_name("test_user1")
     user_hallo = serv1.get_user_by_name(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:
         self.function_dispatcher.dispatch("deop", user1, chan1)
         data = serv1.get_send_data(2)
         assert "error" not in data[0][0].lower()
         assert data[0][1] is None
         assert data[1][1] == chan1
         assert data[0][2] == Server.MSG_RAW
         assert data[1][2] == Server.MSG_MSG
         assert data[0][0][:4] == "MODE"
         assert chan1.name+" -o "+user1.name in data[0][0]
         assert "status taken" in data[1][0].lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #13
0
 def test_1_user_group_no_name(self):
     # 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:
         data = self.perm_cont.find_permission_mask(["user_group=test_group2"], user1, chan1)
         assert False, "Find permission mask should have failed."
     except modules.PermissionControl.PermissionControlException as e:
         assert "error" in str(e).lower()
         assert "no user group exists by that name" in str(e).lower()
예제 #14
0
 def test_run_add_off(self):
     # 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_name("test_chan1")
     perm2 = PermissionMask()
     chan1.permission_mask = perm2
     user1 = serv1.get_user_by_name("test_user1")
     perm3 = PermissionMask()
     user1.permission_mask = perm3
     # Get permission mask of given channel
     test_right = "test_right"
     self.function_dispatcher.dispatch("permissions server=test_serv1 channel=test_chan1 "+test_right+" off",
                                       user1, chan1)
     data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
     assert "error" not in data[0][0].lower()
     assert "set "+test_right+" to false" in data[0][0].lower()
     assert test_right in perm2.rights_map
     assert not perm2.rights_map[test_right]
예제 #15
0
 def test_1_user_just_name_privmsg(self):
     # 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:
         data = self.perm_cont.find_permission_mask(["test_user2"], user1, None)
         assert False, "Find permission mask should have failed."
     except modules.PermissionControl.PermissionControlException as e:
         assert "error" in str(e).lower()
         assert "i can't find that permission mask" in str(e).lower()
예제 #16
0
 def test_voice_1_user_is_voice(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     chan1 = serv1.get_channel_by_name("test_chan1")
     chan1.in_channel = True
     user1 = serv1.get_user_by_name("test_user1")
     user2 = serv1.get_user_by_name("test_user2")
     user_hallo = serv1.get_user_by_name(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
     chan1.add_user(user2)
     chan1_user2 = chan1.get_membership_by_user(user2)
     chan1_user2.is_op = False
     chan1_user2.is_voice = True
     try:
         self.function_dispatcher.dispatch("voice test_user2", user1, chan1)
         data = serv1.get_send_data(1, chan1, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         assert "already has voice" in data[0][0].lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #17
0
 def test_check_response(self):
     # Setup common testing objects
     serv1 = ServerMock(None)
     serv1.name = "test_serv1"
     chan1 = serv1.get_channel_by_name("test_chan1")
     user1 = serv1.get_user_by_name("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"
예제 #18
0
 def test_run_set_off(self):
     # 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"
     perm2.set_right(test_right, True)
     self.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]
예제 #19
0
 def test_invite_2_user_user_already_there(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.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 = True
     try:
         self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "invite test_user2 test_chan2"))
         data = serv1.get_send_data(1, chan1, EventMessage)
         assert "error" in data[0].text.lower()
         assert "test_user2 is already in test_chan2" in data[0].text.lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #20
0
 def test_op_1_user_no_power(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.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")
     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 = False
     chan1.add_user(user2)
     chan1_user2 = chan1.get_membership_by_user(user2)
     chan1_user2.is_op = False
     try:
         self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "op test_user2"))
         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:
         self.hallo.remove_server(serv1)
예제 #21
0
 def test_run_fail_not_bool(self):
     # 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)
     self.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]
예제 #22
0
 def test_mute_0(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.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:
         self.function_dispatcher.dispatch(EventMessage(serv1, chan1, user1, "mute"))
         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:
         self.hallo.remove_server(serv1)
예제 #23
0
 def test_get_feeds_by_title(self):
     serv1 = ServerMock(None)
     serv1.name = "test_serv1"
     serv2 = ServerMock(None)
     serv2.name = "test_serv2"
     chan1 = serv1.get_channel_by_name("test_chan1")
     user2 = serv1.get_user_by_name("test_user2")
     chan3 = serv2.get_channel_by_name("test_chan3")
     # Setup a feed list
     rfl = RssFeedList()
     rf1 = RssFeed()
     rf1.url = "http://spangle.org.uk/hallo/test_feed.xml?1"
     rf1.title = "test_feed1"
     rf1.server_name = chan1.server.name
     rf1.channel_name = chan1.name
     rfl.add_feed(rf1)
     rf2 = RssFeed()
     rf2.url = "http://spangle.org.uk/hallo/test_feed.xml?2"
     rf2.title = "test_feed2"
     rf2.server_name = user2.server.name
     rf2.user_name = user2.name
     rfl.add_feed(rf2)
     rf3 = RssFeed()
     rf3.url = "http://spangle.org.uk/hallo/test_feed.xml?3"
     rf3.title = "test_feed3"
     rf3.server_name = chan3.server.name
     rf3.channel_name = chan3.name
     rfl.add_feed(rf3)
     rf4 = RssFeed()
     rf4.url = "http://spangle.org.uk/hallo/test_feed.xml?4"
     rf4.title = "test_feed4"
     rf4.server_name = chan3.server.name
     rf4.channel_name = chan3.name
     rfl.add_feed(rf4)
     rf5 = RssFeed()
     rf5.url = "http://spangle.org.uk/hallo/test_feed.xml?5"
     rf5.title = "test_feed3"
     rf5.server_name = chan3.server.name
     rf5.channel_name = chan3.name
     rfl.add_feed(rf5)
     # Check function
     feed_list = rfl.get_feeds_by_title("test_feed3", chan3)
     assert len(feed_list) == 2
     assert rf3 in feed_list
     assert rf5 in feed_list
예제 #24
0
 def test_check_destination(self):
     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(None)
     serv2 = ServerMock(None)
     serv3 = ServerMock(None)
     serv1.name = serv_name1
     serv2.name = serv_name2
     serv3.name = serv_name3
     chan1 = serv1.get_channel_by_name(chan_name1)
     chan2 = serv1.get_channel_by_name(chan_name2)
     chan3 = serv2.get_channel_by_name(chan_name3)
     chan4 = serv3.get_channel_by_name(chan_name4)
     chan5 = serv3.get_channel_by_name(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"
예제 #25
0
 def test_2_server_chan(self):
     # Set up a test server and channel
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     self.hallo.add_server(serv1)
     chan1 = serv1.get_channel_by_name("test_chan1")
     perm1 = PermissionMask()
     chan1.permission_mask = perm1
     # Get permission mask of given channel
     data = self.perm_cont.find_permission_mask(["server=test_serv1", "channel=test_chan1"],
                                                self.test_user, self.test_chan)
     assert perm1 == data, "Did not find the correct permission mask."
예제 #26
0
 def test_2_server_user(self):
     # Set up a test server and user
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     self.hallo.add_server(serv1)
     user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
     perm1 = PermissionMask()
     user1.permission_mask = perm1
     # Get permission mask of given channel
     data = self.perm_cont.find_permission_mask(["server=test_serv1", "user=test_user1"],
                                                self.test_user, self.test_chan)
     assert perm1 == data, "Did not find the correct permission mask."
예제 #27
0
 def test_mute_privmsg(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     user1 = serv1.get_user_by_name("test_user1")
     try:
         self.function_dispatcher.dispatch("mute", user1, user1)
         data = serv1.get_send_data(1, user1, Server.MSG_MSG)
         assert "error" in data[0][0].lower()
         assert "can't set mute on a private message" in data[0][0].lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #28
0
 def test_mute_privmsg(self):
     serv1 = ServerMock(self.hallo)
     serv1.name = "test_serv1"
     serv1.type = Server.TYPE_IRC
     self.hallo.add_server(serv1)
     user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
     try:
         self.function_dispatcher.dispatch(EventMessage(serv1, None, user1, "mute"))
         data = serv1.get_send_data(1, user1, EventMessage)
         assert "error" in data[0].text.lower()
         assert "can't set mute on a private message" in data[0].text.lower()
     finally:
         self.hallo.remove_server(serv1)
예제 #29
0
 def test_server_specified_no_channel(self):
     # Set up test resources
     test_serv = ServerMock(self.hallo)
     test_serv.name = "TestServer1"
     self.hallo.add_server(test_serv)
     test_chan = test_serv.get_channel_by_address("#not_in_channel".lower(), "#not_in_channel")
     test_chan.in_channel = False
     # Send command
     self.function_dispatcher.dispatch(EventMessage(self.server, self.test_chan, self.test_user,
                                                    "leave server="+test_serv.name+" "+test_chan.name))
     # Check response data
     data = self.server.get_send_data(1, self.test_chan, EventMessage)
     self.server.get_left_channels(0)
     test_serv.get_left_channels(0)
     assert "error" in data[0].text.lower()
예제 #30
0
 def test_reply_pew(self):
     reply_func = self.function_dispatcher.get_function_by_name("reply")
     reply_obj = self.function_dispatcher.get_function_object(reply_func)  # type: Reply
     # Check pewpew
     response = reply_obj.passive_run(Function.EVENT_MESSAGE, "pew",
                                      None, self.server, self.test_user, self.test_chan)
     assert response == "pew pew"
     # Check blacklist
     serv1 = ServerMock(None)
     serv1.name = "canternet"
     chan1 = serv1.get_channel_by_name("#ukofequestria")
     user1 = serv1.get_user_by_name("test_user")
     response = reply_obj.passive_run(Function.EVENT_MESSAGE, "pew",
                                      None, serv1, user1, chan1)
     assert response is None