Skip to content

Commit 263a84f

Browse files
committed
Add test while avoiding code repetition
1 parent adeaa28 commit 263a84f

File tree

1 file changed

+77
-127
lines changed

1 file changed

+77
-127
lines changed

tests/client.cpp

+77-127
Original file line numberDiff line numberDiff line change
@@ -508,76 +508,73 @@ TEST_F(ConnectTest, Success) {
508508
ASSERT_MEMORY_OK();
509509
}
510510

511-
TEST_F(ConnectTest, Success_v4) {
512-
RunServer([](int sockfd) {
513-
// Perform handshake.
514-
{
515-
char handshake[20];
516-
ASSERT_EQ(RecvData(sockfd, handshake, 20), 0);
517-
ASSERT_EQ(std::string(handshake, 4), "\x60\x60\xB0\x17"s);
518-
ASSERT_EQ(std::string(handshake + 4, 4), "\x00\x00\x01\x04"s);
519-
ASSERT_EQ(std::string(handshake + 8, 4), "\x00\x00\x00\x01"s);
520-
ASSERT_EQ(std::string(handshake + 12, 4), "\x00\x00\x00\x00"s);
521-
ASSERT_EQ(std::string(handshake + 16, 4), "\x00\x00\x00\x00"s);
511+
auto run_v4_server_success = [](int sockfd) {
512+
// Perform handshake.
513+
{
514+
char handshake[20];
515+
ASSERT_EQ(RecvData(sockfd, handshake, 20), 0);
516+
ASSERT_EQ(std::string(handshake, 4), "\x60\x60\xB0\x17"s);
517+
ASSERT_EQ(std::string(handshake + 4, 4), "\x00\x00\x01\x04"s);
518+
ASSERT_EQ(std::string(handshake + 8, 4), "\x00\x00\x00\x01"s);
519+
ASSERT_EQ(std::string(handshake + 12, 4), "\x00\x00\x00\x00"s);
520+
ASSERT_EQ(std::string(handshake + 16, 4), "\x00\x00\x00\x00"s);
522521

523-
uint32_t version = htobe32(0x0104);
524-
ASSERT_EQ(SendData(sockfd, (char *)&version, 4), 0);
525-
}
522+
uint32_t version = htobe32(1);
523+
ASSERT_EQ(SendData(sockfd, (char *)&version, 4), 0);
524+
}
526525

527-
mg_session *session = mg_session_init(&mg_system_allocator);
528-
ASSERT_TRUE(session);
529-
session->version = 4;
530-
mg_raw_transport_init(sockfd, (mg_raw_transport **)&session->transport,
531-
&mg_system_allocator);
526+
mg_session *session = mg_session_init(&mg_system_allocator);
527+
ASSERT_TRUE(session);
528+
session->version = 1;
529+
mg_raw_transport_init(sockfd, (mg_raw_transport **)&session->transport,
530+
&mg_system_allocator);
532531

533-
// Read HELLO message.
532+
// Read INIT message.
533+
{
534+
mg_message *message;
535+
ASSERT_EQ(mg_session_receive_message(session), 0);
536+
ASSERT_EQ(mg_session_read_bolt_message(session, &message), 0);
537+
ASSERT_EQ(message->type, MG_MESSAGE_TYPE_INIT);
538+
539+
mg_message_init *msg_init = message->init_v;
540+
EXPECT_EQ(
541+
std::string(msg_init->client_name->data, msg_init->client_name->size),
542+
MG_USER_AGENT);
534543
{
535-
mg_message *message;
536-
ASSERT_EQ(mg_session_receive_message(session), 0);
537-
ASSERT_EQ(mg_session_read_bolt_message(session, &message), 0);
538-
ASSERT_EQ(message->type, MG_MESSAGE_TYPE_HELLO);
539-
540-
mg_message_hello *msg_hello = message->hello_v;
541-
{
542-
ASSERT_EQ(mg_map_size(msg_hello->extra), 4u);
543-
544-
const mg_value *user_agent_val =
545-
mg_map_at(msg_hello->extra, "user_agent");
546-
ASSERT_TRUE(user_agent_val);
547-
ASSERT_EQ(mg_value_get_type(user_agent_val), MG_VALUE_TYPE_STRING);
548-
const mg_string *user_agent = mg_value_string(user_agent_val);
549-
ASSERT_EQ(std::string(user_agent->data, user_agent->size),
550-
MG_USER_AGENT);
551-
552-
const mg_value *scheme_val = mg_map_at(msg_hello->extra, "scheme");
553-
ASSERT_TRUE(scheme_val);
554-
ASSERT_EQ(mg_value_get_type(scheme_val), MG_VALUE_TYPE_STRING);
555-
const mg_string *scheme = mg_value_string(scheme_val);
556-
ASSERT_EQ(std::string(scheme->data, scheme->size), "basic");
557-
558-
const mg_value *principal_val =
559-
mg_map_at(msg_hello->extra, "principal");
560-
ASSERT_TRUE(principal_val);
561-
ASSERT_EQ(mg_value_get_type(principal_val), MG_VALUE_TYPE_STRING);
562-
const mg_string *principal = mg_value_string(principal_val);
563-
ASSERT_EQ(std::string(principal->data, principal->size), "user");
544+
ASSERT_EQ(mg_map_size(msg_init->auth_token), 3u);
545+
546+
const mg_value *scheme_val = mg_map_at(msg_init->auth_token, "scheme");
547+
ASSERT_TRUE(scheme_val);
548+
ASSERT_EQ(mg_value_get_type(scheme_val), MG_VALUE_TYPE_STRING);
549+
const mg_string *scheme = mg_value_string(scheme_val);
550+
ASSERT_EQ(std::string(scheme->data, scheme->size), "basic");
551+
552+
const mg_value *principal_val =
553+
mg_map_at(msg_init->auth_token, "principal");
554+
ASSERT_TRUE(principal_val);
555+
ASSERT_EQ(mg_value_get_type(principal_val), MG_VALUE_TYPE_STRING);
556+
const mg_string *principal = mg_value_string(principal_val);
557+
ASSERT_EQ(std::string(principal->data, principal->size), "user");
558+
559+
const mg_value *credentials_val =
560+
mg_map_at(msg_init->auth_token, "credentials");
561+
ASSERT_TRUE(credentials_val);
562+
ASSERT_EQ(mg_value_get_type(credentials_val), MG_VALUE_TYPE_STRING);
563+
const mg_string *credentials = mg_value_string(credentials_val);
564+
ASSERT_EQ(std::string(credentials->data, credentials->size), "pass");
565+
}
566+
567+
mg_message_destroy_ca(message, session->decoder_allocator);
568+
}
564569

565-
const mg_value *credentials_val =
566-
mg_map_at(msg_hello->extra, "credentials");
567-
ASSERT_TRUE(credentials_val);
568-
ASSERT_EQ(mg_value_get_type(credentials_val), MG_VALUE_TYPE_STRING);
569-
const mg_string *credentials = mg_value_string(credentials_val);
570-
ASSERT_EQ(std::string(credentials->data, credentials->size), "pass");
571-
}
570+
// Send SUCCESS message.
571+
ASSERT_EQ(mg_session_send_success_message(session, &mg_empty_map), 0);
572572

573-
mg_message_destroy_ca(message, session->decoder_allocator);
574-
}
575-
576-
// Send SUCCESS message.
577-
ASSERT_EQ(mg_session_send_success_message(session, &mg_empty_map), 0);
573+
mg_session_destroy(session);
574+
};
578575

579-
mg_session_destroy(session);
580-
});
576+
TEST_F(ConnectTest, Success_v4) {
577+
RunServer(run_v4_server_success);
581578
mg_session_params *params = mg_session_params_make();
582579
mg_session_params_set_host(params, "127.0.0.1");
583580
mg_session_params_set_port(params, port);
@@ -592,70 +589,7 @@ TEST_F(ConnectTest, Success_v4) {
592589
}
593590

594591
TEST_F(ConnectTest, SuccessWithSSL) {
595-
RunServer([](int sockfd) {
596-
// Perform handshake.
597-
{
598-
char handshake[20];
599-
ASSERT_EQ(RecvData(sockfd, handshake, 20), 0);
600-
ASSERT_EQ(std::string(handshake, 4), "\x60\x60\xB0\x17"s);
601-
ASSERT_EQ(std::string(handshake + 4, 4), "\x00\x00\x01\x04"s);
602-
ASSERT_EQ(std::string(handshake + 8, 4), "\x00\x00\x00\x01"s);
603-
ASSERT_EQ(std::string(handshake + 12, 4), "\x00\x00\x00\x00"s);
604-
ASSERT_EQ(std::string(handshake + 16, 4), "\x00\x00\x00\x00"s);
605-
606-
uint32_t version = htobe32(1);
607-
ASSERT_EQ(SendData(sockfd, (char *)&version, 4), 0);
608-
}
609-
610-
mg_session *session = mg_session_init(&mg_system_allocator);
611-
ASSERT_TRUE(session);
612-
session->version = 1;
613-
mg_raw_transport_init(sockfd, (mg_raw_transport **)&session->transport,
614-
&mg_system_allocator);
615-
616-
// Read INIT message.
617-
{
618-
mg_message *message;
619-
ASSERT_EQ(mg_session_receive_message(session), 0);
620-
ASSERT_EQ(mg_session_read_bolt_message(session, &message), 0);
621-
ASSERT_EQ(message->type, MG_MESSAGE_TYPE_INIT);
622-
623-
mg_message_init *msg_init = message->init_v;
624-
EXPECT_EQ(
625-
std::string(msg_init->client_name->data, msg_init->client_name->size),
626-
MG_USER_AGENT);
627-
{
628-
ASSERT_EQ(mg_map_size(msg_init->auth_token), 3u);
629-
630-
const mg_value *scheme_val = mg_map_at(msg_init->auth_token, "scheme");
631-
ASSERT_TRUE(scheme_val);
632-
ASSERT_EQ(mg_value_get_type(scheme_val), MG_VALUE_TYPE_STRING);
633-
const mg_string *scheme = mg_value_string(scheme_val);
634-
ASSERT_EQ(std::string(scheme->data, scheme->size), "basic");
635-
636-
const mg_value *principal_val =
637-
mg_map_at(msg_init->auth_token, "principal");
638-
ASSERT_TRUE(principal_val);
639-
ASSERT_EQ(mg_value_get_type(principal_val), MG_VALUE_TYPE_STRING);
640-
const mg_string *principal = mg_value_string(principal_val);
641-
ASSERT_EQ(std::string(principal->data, principal->size), "user");
642-
643-
const mg_value *credentials_val =
644-
mg_map_at(msg_init->auth_token, "credentials");
645-
ASSERT_TRUE(credentials_val);
646-
ASSERT_EQ(mg_value_get_type(credentials_val), MG_VALUE_TYPE_STRING);
647-
const mg_string *credentials = mg_value_string(credentials_val);
648-
ASSERT_EQ(std::string(credentials->data, credentials->size), "pass");
649-
}
650-
651-
mg_message_destroy_ca(message, session->decoder_allocator);
652-
}
653-
654-
// Send SUCCESS message.
655-
ASSERT_EQ(mg_session_send_success_message(session, &mg_empty_map), 0);
656-
657-
mg_session_destroy(session);
658-
});
592+
RunServer(run_v4_server_success);
659593

660594
mg_secure_transport_init_called = 0;
661595
trust_callback_ok = 0;
@@ -681,6 +615,22 @@ TEST_F(ConnectTest, SuccessWithSSL) {
681615
ASSERT_MEMORY_OK();
682616
}
683617

618+
TEST_F(ConnectTest, CustomScheme) {
619+
RunServer(run_v4_server_success);
620+
mg_session_params *params = mg_session_params_make();
621+
mg_session_params_set_host(params, "127.0.0.1");
622+
mg_session_params_set_port(params, port);
623+
mg_session_params_set_scheme(params, "custom_scheme");
624+
mg_session_params_set_username(params, "user");
625+
mg_session_params_set_password(params, "pass");
626+
mg_session *session;
627+
ASSERT_EQ(mg_connect_ca(params, &session, (mg_allocator *)&allocator), 0);
628+
EXPECT_EQ(mg_session_status(session), MG_SESSION_READY);
629+
mg_session_params_destroy(params);
630+
mg_session_destroy(session);
631+
ASSERT_MEMORY_OK();
632+
}
633+
684634
class RunTest : public ::testing::Test {
685635
protected:
686636
virtual void SetUp() override {

0 commit comments

Comments
 (0)