Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: add more unit tests to Nick command #30

Merged
merged 1 commit into from
May 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added ircserv
Binary file not shown.
6 changes: 3 additions & 3 deletions src/Server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* Server.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: yde-goes <yde-goes@student.42sp.org.br> +#+ +:+ +#+ */
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/04/28 10:26:55 by gilmar #+# #+# */
/* Updated: 2024/05/29 19:13:14 by yde-goes ### ########.fr */
/* Updated: 2024/05/30 15:59:59 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -440,7 +440,7 @@ void Server::_is_valid_port(const std::string &port)
*/
bool Server::_is_valid_nickname(const std::string &nickname)
{
if (nickname.size() <= 5)
if (nickname.size() <= 3)
return false;
for (std::string::const_iterator it = nickname.begin(); it != nickname.end(); ++it) {
if (!std::isalnum(*it))
Expand Down
19 changes: 17 additions & 2 deletions src/commands/Invite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* Invite.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: yde-goes <yde-goes@student.42sp.org.br> +#+ +:+ +#+ */
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/21 08:31:16 by gilmar #+# #+# */
/* Updated: 2024/05/30 11:29:04 by yde-goes ### ########.fr */
/* Updated: 2024/05/30 14:39:36 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -20,6 +20,21 @@
* Example: INVITE Wiz #Twilight_Zone
*/

/*
* Cenários de Teste:
* 1. O comando INVITE é recebido sem parâmetros suficientes.
* 2. O comando INVITE é recebido e o cliente não está registrado.
* 3. O comando INVITE é recebido e o canal não existe.
* 4. O comando INVITE é recebido e o cliente não está no canal.
* 5. O comando INVITE é recebido e o cliente não é operador do canal para convidar um cliente.
* 6. O comando INVITE é recebido e o cliente convidado não existe.
* 7. O comando INVITE é recebido e o cliente convidado já está no canal.
* 8. O comando INVITE é recebido e o cliente convidado é convidado para o canal.
* 9. O comando INVITE é recebido e o cliente não está logado.
* 10. O comando INVITE é recebido e o cliente está logado.
*
*/

/**
* @brief Handles the INVITE command received from the client.
*
Expand Down
17 changes: 16 additions & 1 deletion src/commands/Join.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/21 08:33:05 by gilmar #+# #+# */
/* Updated: 2024/05/28 21:50:05 by gilmar ### ########.fr */
/* Updated: 2024/05/30 14:53:41 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -18,6 +18,21 @@
* Link: https://datatracker.ietf.org/doc/html/rfc1459#section-4.2.1
*/

/*
* Cenários de Teste:
* 1. O comando JOIN é recebido sem parâmetros suficientes.
* 2. O comando JOIN é recebido e o cliente não está registrado.
* 3. O comando JOIN é recebido e o nome do canal é inválido.
* 4. O comando JOIN é recebido e o cliente já está no canal.
* 5. O comando JOIN é recebido e o canal está cheio.
* 6. O comando JOIN é recebido e o canal é apenas para convidados.
* 7. O comando JOIN é recebido e o canal tem uma chave inválida.
* 8. O comando JOIN é recebido e o cliente é adicionado ao canal.
* 9. O comando JOIN é recebido e o cliente não está logado.
* 10. O comando JOIN é recebido e o cliente está logado.
*
*/

/**
* @brief Handles the JOIN command received from the client.
*
Expand Down
9 changes: 5 additions & 4 deletions src/commands/Nick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* Nick.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: caalbert <caalbert@student.42sp.org.br> +#+ +:+ +#+ */
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/21 08:31:54 by gilmar #+# #+# */
/* Updated: 2024/05/27 20:12:35 by caalbert ### ########.fr */
/* Updated: 2024/05/30 16:02:09 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand Down Expand Up @@ -37,14 +37,14 @@ void Server::_handler_client_nickname(const std::string &buffer, const int fd)

Client* client = _get_client(fd);

if (buffer.size() < 5) {
if (buffer.empty()) {
_send_response(fd, ERR_NEEDMOREPARAMS(std::string("*")));
_reply_code = 461;
} else if (!client->get_is_authenticated()) {
_send_response(fd, ERR_NOTREGISTERED(std::string("*")));
_reply_code = 451;
} else if (!_is_valid_nickname(buffer)) {
// _send_response(fd, ERR_ERRONEUSNICK(client->get_nickname()));
//_send_response(fd, ERR_ERRONEUSNICK(client->get_nickname()));
_reply_code = 432;
} else if (_is_nickname_in_use(fd, buffer)) {
_send_response(fd, ERR_NICKINUSE(client->get_nickname()));
Expand All @@ -55,6 +55,7 @@ void Server::_handler_client_nickname(const std::string &buffer, const int fd)
client->set_is_logged(fd);
_send_response(fd, RPL_CONNECTED(client->get_nickname()));
_reply_code = 001;
return;
}
_reply_code = 200;
}
Expand Down
15 changes: 14 additions & 1 deletion src/commands/Pass.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/21 08:32:39 by gilmar #+# #+# */
/* Updated: 2024/05/26 19:48:54 by gilmar ### ########.fr */
/* Updated: 2024/05/30 14:49:57 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -18,6 +18,19 @@
* Reference: https://datatracker.ietf.org/doc/html/rfc1459#section-4.1.1
*/

/*
* Cenários de Teste:
* 1. O comando PASS é recebido sem parâmetros suficientes.
* 2. O comando PASS é recebido e o cliente já está autenticado.
* 3. O comando PASS é recebido e a senha do cliente está incorreta.
* 4. O comando PASS é recebido e a senha do cliente está correta.
* 5. O comando PASS é recebido e o cliente não está logado.
* 6. O comando PASS é recebido e o cliente está logado.
* 7. O comando PASS é recebido e o cliente não está autenticado.
* 8. O comando PASS é recebido e o cliente está autenticado.
*
*/

/**
* @brief Handles the PASSWORD command received from the client.
*
Expand Down
18 changes: 16 additions & 2 deletions src/commands/User.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/21 08:32:16 by gilmar #+# #+# */
/* Updated: 2024/05/26 22:15:40 by gilmar ### ########.fr */
/* Updated: 2024/05/30 15:19:14 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -20,6 +20,20 @@
* Link: https://datatracker.ietf.org/doc/html/rfc1459#section-4.1.3
*/


/*
* Cenários de Teste:
* 1. O comando USER é recebido sem parâmetros suficientes.
* 2. O comando USER é recebido e o cliente não está registrado.
* 3. O comando USER é recebido e o cliente já está registrado.
* 4. O comando USER é recebido e o cliente está pronto para fazer login.
* 5. O comando USER é recebido e o cliente não está pronto para fazer login.
* 6. O comando USER é recebido e o cliente já está logado.
* 7. O comando USER é recebido e o cliente não está autenticado.
* 8. O comando USER é recebido e o cliente está autenticado.
*
*/

/**
* @brief Handles the USERNAME command received from the client.
*
Expand All @@ -36,7 +50,7 @@ void Server::_handler_client_username(const std::string &buffer, const int fd)

Client* client = _get_client(fd);

if (buffer.size() < 5) {
if (buffer.empty()) {
_send_response(fd, ERR_NEEDMOREPARAMS(std::string("*")));
_reply_code = 461;
} else if (!client || !client->get_is_authenticated()) {
Expand Down
133 changes: 116 additions & 17 deletions tests/TestNick.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
/* ::: :::::::: */
/* TestNick.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: yde-goes <yde-goes@student.42sp.org.br> +#+ +:+ +#+ */
/* By: gilmar <gilmar@student.42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2024/05/24 18:03:34 by yde-goes #+# #+# */
/* Updated: 2024/05/25 21:21:28 by yde-goes ### ########.fr */
/* Updated: 2024/05/30 16:06:39 by gilmar ### ########.fr */
/* */
/* ************************************************************************** */

Expand All @@ -17,22 +17,66 @@
#define private public
#include "Server.hpp"

/*
* Cenários de Teste:
* 1. O comando NICK é recebido sem parâmetros suficientes.
* 2. O comando NICK é recebido e o cliente não está registrado.
* 3. O comando NICK é recebido e o nickname do cliente é inválido.
* 4. O comando NICK é recebido e o cliente está registrado.
* 5. O comando NICK é recebido e o nickname do cliente está em uso.
* 6. O comando NICK é recebido e o nickname do cliente é alterado.
* 7. O comando NICK é recebido e o cliente está pronto para logar.
*/

Client *mockClient()
{
Client *client = new Client();
client->set_fd(4);
client->set_username("username");
client->set_nickname("oldNickname");
client->set_password("password");
client->set_buffer("NICK new_nickname");
client->set_username("Username");
client->set_nickname("Nickname");
client->set_password("Password");
client->set_buffer("NICK Username");
client->set_is_logged(true);
client->set_is_authenticated(true);
return client;
}

/*
* 1. O comando NICK é recebido sem parâmetros suficientes.
*/
Test(NickCommand, err_needmoreparams)
{
Client* client = mockClient();

Server server;

server._clients.push_back(*client);
server._handler_client_nickname("", 4);
cr_assert(eq(int, server._reply_code, 461));
}

/*
* 2. O comando NICK é recebido e o cliente não está registrado.
*/
Test(NickCommand, err_notregistered)
{
Client* client = mockClient();
client->set_is_authenticated(false);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname(client->get_nickname(), 4);
cr_assert(eq(int, server._reply_code, 451));
}

/*
* 3. O comando NICK é recebido e o nickname do cliente é inválido.
*/
Test(NickCommand, err_erroneusnick_1)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Server server;

Expand All @@ -44,30 +88,46 @@ Test(NickCommand, err_erroneusnick_1)
Test(NickCommand, err_erroneusnick_2)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname("new_n1c7n4m3", 4);
server._handler_client_nickname("$Gilmar", 4);
cr_assert(eq(int, server._reply_code, 432));
}

Test(NickCommand, err_norregistered)
Test(NickCommand, err_erroneusnick_3)
{
Client* client = mockClient();
client->set_is_authenticated(false);
client->set_is_logged(false);
client->set_is_authenticated(true);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname("oldNickname", 4);
cr_assert(eq(int, server._reply_code, 451));
server._handler_client_nickname("Ygor%", 4);
cr_assert(eq(int, server._reply_code, 432));
}

Test(NickCommand, err_erroneusnick_4)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname("Car#los", 4);
cr_assert(eq(int, server._reply_code, 432));
}

/*
* 4. O comando NICK é recebido e o cliente está registrado.
*/
Test(NickCommand, success_setnickname)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Server server;

Expand All @@ -76,15 +136,54 @@ Test(NickCommand, success_setnickname)
cr_assert(eq(int, server._reply_code, 200));
}

// THIS TEST IS NOT WORKING, returns 200 instead of 433. Don't know why :/
/* Test(NickCommand, err_nickinuse)
/*
* 5. O comando NICK é recebido e o nickname do cliente está em uso.
*/
Test(NickCommand, err_nickinuse)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Client* client1 = mockClient();
client1->set_fd(5);
client1->set_is_authenticated(true);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname(client->get_nickname(), 4);
std::cout << server._get_client(4)->get_nickname() << std::endl;
server._clients.push_back(*client1);
server._handler_client_nickname(client1->get_nickname(), 4);
cr_assert(eq(int, server._reply_code, 433));
} */
}

/*
* 6. O comando NICK é recebido e o nickname do cliente é alterado.
*/
Test(NickCommand, success_changenickname)
{
Client* client = mockClient();
client->set_is_authenticated(true);

Server server;

server._clients.push_back(*client);
server._handler_client_nickname("newNickname", 4);
cr_assert(eq(int, server._reply_code, 200));
}

/*
* 7. O comando NICK é recebido e o cliente está pronto para logar.
*/
Test(NickCommand, success_readytologin)
{
Client* client = mockClient();
client->set_is_authenticated(true);
client->set_is_logged(false);

Server server;

server._clients.push_back(*client);
server._handler_client_username("Username", 4);
server._handler_client_nickname("Nickname", 4);
cr_assert(eq(int, server._reply_code, 001));
}
Loading