Exemple #1
0
def test_unmute_0_no_power(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = False
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "unmute"))
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "don't have power" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Exemple #2
0
def test_unmute_0(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "unmute"))
        data = serv1.get_send_data(2)
        assert "error" not in data[1].text.lower()
        assert data[0].channel == chan1
        assert data[1].channel == chan1
        assert data[0].__class__ == EventMode
        assert data[1].__class__ == EventMessage
        assert data[0].mode_changes == "-m"
        assert "set mute in " + chan1.name in data[1].text.lower()
    finally:
        hallo.remove_server(serv1)
Exemple #3
0
def test_deop_2_user_user_not_there(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter({"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2")
    chan2.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    serv1.get_user_by_address("test_user3".lower(), "test_user3")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(), serv1.get_nick())
    chan1.add_user(user1)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1.add_user(user_hallo)
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    chan2.add_user(user2)
    chan2_user1 = chan2.get_membership_by_user(user2)
    chan2_user1.is_op = False
    chan2.add_user(user_hallo)
    chan2_hallo = chan2.get_membership_by_user(user_hallo)
    chan2_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "deop test_user3 test_chan2")
        )
        data = serv1.get_send_data(1, chan1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "test_user3 is not in test_chan2" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Exemple #4
0
def test_voice_1priv_is_op(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1.add_user(user_hallo)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = True
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, None, user1, "voice test_chan1"))
        data = serv1.get_send_data(1, user1, EventMessage)
        assert "error" in data[0].text.lower()
        assert "already has voice" in data[0].text.lower()
    finally:
        hallo.remove_server(serv1)
Exemple #5
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)
Exemple #6
0
 def function(modules=None):
     if modules is None:
         modules = {
             "ascii_art",
             "bio",
             "channel_control",
             "convert",
             "euler",
             "hallo_control",
             "math",
             "permission_control",
             "random",
             "server_control",
             "silly",
             "subscriptions",
         }
     function_dispatcher = FunctionDispatcher(modules, hallo)
     hallo.function_dispatcher = function_dispatcher
     # Create server
     server = ServerMock(hallo)
     server.name = "mock-server"
     hallo.add_server(server)
     # Start hallo thread
     hallo_thread.start()
     # Create test users and channel, and configure them
     hallo_user = server.get_user_by_address(
         server.get_nick().lower(), server.get_nick()
     )
     test_user = server.get_user_by_address("test", "test")
     test_user.online = True
     test_chan = server.get_channel_by_address("#test", "#test")
     test_chan.in_channel = True
     test_chan.add_user(hallo_user)
     test_chan.add_user(test_user)
     # Wait until hallo is open
     count = 0
     while not hallo.open:
         time.sleep(0.01)
         count += 1
         assert count < 1000, "Hallo took too long to start."
         if count > 1000:
             break
     # Clear any data in the server
     server.get_send_data()
     return hallo, server, test_chan, test_user
Exemple #7
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)
Exemple #8
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)
Exemple #9
0
def test_voice_2_chan(hallo_getter):
    hallo, test_server, test_chan, test_user = hallo_getter(
        {"channel_control"})
    serv1 = ServerMock(hallo)
    serv1.name = "test_serv1"
    serv1.type = Server.TYPE_IRC
    hallo.add_server(serv1)
    chan1 = serv1.get_channel_by_address("test_chan1".lower(), "test_chan1")
    chan1.in_channel = True
    chan2 = serv1.get_channel_by_address("test_chan2".lower(), "test_chan2")
    chan2.in_channel = True
    user1 = serv1.get_user_by_address("test_user1".lower(), "test_user1")
    user2 = serv1.get_user_by_address("test_user2".lower(), "test_user2")
    user_hallo = serv1.get_user_by_address(serv1.get_nick().lower(),
                                           serv1.get_nick())
    chan1.add_user(user1)
    chan1_user1 = chan1.get_membership_by_user(user1)
    chan1_user1.is_op = False
    chan1.add_user(user_hallo)
    chan1_hallo = chan1.get_membership_by_user(user_hallo)
    chan1_hallo.is_op = True
    chan2.add_user(user2)
    chan2_user2 = chan2.get_membership_by_user(user2)
    chan2_user2.is_op = False
    chan2.add_user(user_hallo)
    chan2_hallo = chan2.get_membership_by_user(user_hallo)
    chan2_hallo.is_op = True
    try:
        hallo.function_dispatcher.dispatch(
            EventMessage(serv1, chan1, user1, "voice test_chan2 test_user2"))
        data = serv1.get_send_data(2)
        assert "error" not in data[1].text.lower()
        assert data[0].channel == chan2
        assert data[1].channel == chan1
        assert data[0].__class__ == EventMode
        assert data[1].__class__ == EventMessage
        assert data[0].mode_changes == "+v {}".format(user2.address)
        assert "status given" in data[1].text.lower()
    finally:
        hallo.remove_server(serv1)
Exemple #10
0
 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]
Exemple #11
0
 def test_two_mock_servers(self):
     # Add two servers
     serv1 = ServerMock(self.hallo)
     serv1.name = "server_list_test1"
     serv1.auto_connect = True
     serv1.nick = "hallo"
     serv1.disconnect()
     self.hallo.add_server(serv1)
     serv2 = ServerMock(self.hallo)
     serv2.name = "server_list_test2"
     serv2.auto_connect = False
     serv2.nick = "yobot"
     serv2.start()
     self.hallo.add_server(serv2)
     # 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(": \n")[1]
     server_list = server_list_text.split("\n")
     assert len(server_list) == 2
     if serv1.name in server_list[0]:
         server_text1 = server_list[0]
         server_text2 = server_list[1]
     else:
         server_text1 = server_list[1]
         server_text2 = server_list[0]
     assert serv1.name in server_text1
     assert "type=" + serv1.type in server_text1
     assert "state=" + serv1.state in server_text1
     assert "nick=" + serv1.get_nick() in server_text1
     assert "auto_connect=" + str(serv1.auto_connect) in server_text1
     assert serv2.name in server_text2
     assert "type=" + serv2.type in server_text2
     assert "state=" + serv2.state in server_text2
     assert "nick=" + serv2.get_nick() in server_text2
     assert "auto_connect=" + str(serv2.auto_connect) in server_text2
Exemple #12
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]
        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]
Exemple #13
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()