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."
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)
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)
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()
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)
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)
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
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 test_2_server_user(hallo_getter): hallo_obj, test_server, test_channel, test_user = hallo_getter( {"permission_control"}) perm_cont = Permissions() # Set up a test server and user serv1 = ServerMock(hallo_obj) serv1.name = "test_serv1" hallo_obj.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 = perm_cont.find_permission_mask( ["server=test_serv1", "user=test_user1"], test_user, test_channel) assert perm1 == data, "Did not find the correct permission mask."
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")
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]
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()
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."
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
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]
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
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()
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)
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)
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] assert "type=" + serv1.type in server_list[0] assert "state=" + serv1.state in server_list[0] assert "nick=" + serv1.get_nick() in server_list[0] assert "auto_connect=" + str(serv1.auto_connect) in server_list[0]
def test_connect_to_known_server(self): # Set up an example server server_name = "known_server_name" test_server = ServerMock(self.hallo) test_server.name = server_name test_server.auto_connect = False self.hallo.add_server(test_server) # Call connect function self.function_dispatcher.dispatch( EventMessage(self.server, self.test_chan, self.test_user, "connect " + server_name)) # Ensure response is correct data = self.server.get_send_data(1, self.test_chan, EventMessage) assert "error" not in data[0].text.lower(), data[0].text.lower() assert "connected" in data[0].text.lower(), data[0].text.lower() assert server_name in data[0].text.lower(), data[0].text.lower() # Ensure auto connect was set assert test_server.auto_connect, "Auto connect should have been set to true." # Ensure server was ran assert test_server.is_connected(), "Test server was not started."
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()
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()
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."
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()
def test_connect_to_known_server_fail_connected(self): # Set up example server server_name = "known_server_name" test_server = ServerMock(self.hallo) test_server.name = server_name test_server.auto_connect = False test_server.state = Server.STATE_OPEN self.hallo.add_server(test_server) # Call connect function self.function_dispatcher.dispatch( EventMessage(self.server, self.test_chan, self.test_user, "connect " + server_name)) # Ensure error response is given data = self.server.get_send_data(1, self.test_chan, EventMessage) assert "error" in data[0].text.lower(), data[0].text.lower() assert "already connected" in data[0].text.lower(), data[0].text.lower( ) # Ensure auto connect was still set assert (test_server.auto_connect ), "Auto connect should have still been set to true." # Ensure server is still running assert (test_server.state == Server.STATE_OPEN ), "Test server should not have been shut down."
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" )
def test_irc_server(self): # Add one server serv1 = ServerMock(self.hallo) serv1.type = Server.TYPE_IRC serv1.server_address = "irc.example.org" serv1.server_port = 6789 serv1.name = "irc_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)[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 + "\nCommand output: " + server_list[0]) assert "type=" + serv1.type in server_list[0], ( "Server type not found in output.\n" "Server type: " + serv1.type + "\nCommand output: " + server_list[0]) irc_address = serv1.server_address + ":" + str(serv1.server_port) assert irc_address in server_list[0], ( "IRC server address not found in output.\n" "Server address: " + irc_address + "\nCommand output: " + server_list[0]) assert "state=" + serv1.state in server_list[0], ( "Server state not found in output.\n" "Server name: " + serv1.state + "\nCommand 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() + "\nCommand output: " + server_list[0]) assert "auto_connect=" + str(serv1.auto_connect) in server_list[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)
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."