tests: user module covered up

This commit is contained in:
2026-06-16 18:33:20 +03:00
parent 7252480c95
commit 0040c07f81
5 changed files with 184 additions and 8 deletions
+40 -4
View File
@@ -1,19 +1,19 @@
# ---/ create_user /-------------------------------------------------
add_executable(create_user
add_executable(test_create_user
create_user.c
)
target_link_libraries(create_user
target_link_libraries(test_create_user
cmocka
user
main
db
)
target_link_options(create_user PRIVATE -Wl,--wrap=db_user_create,--wrap=session_send_string)
target_link_options(test_create_user PRIVATE -Wl,--wrap=db_user_create,--wrap=session_send_string)
add_test(NAME user_test_1 COMMAND create_user)
add_test(NAME user_test_1 COMMAND test_create_user)
# ---/ db_user_create /-------------------------------------------------
@@ -31,3 +31,39 @@ target_link_libraries(db_user_create
target_link_options(db_user_create PRIVATE -Wl,--wrap=db_user_create,--wrap=session_send_string)
add_test(NAME user_test_2 COMMAND db_user_create)
# ---/ process_user_name /-------------------------------------------
add_executable(process_user_name
process_user_name.c
)
target_link_libraries(process_user_name
cmocka
user
main
)
target_link_options(process_user_name PRIVATE
-Wl,--wrap=session_send_string
)
add_test(NAME user_test_3 COMMAND process_user_name)
# ---/ login /-------------------------------------------------------
add_executable(login
login.c
)
target_link_libraries(login
cmocka
user
main
)
target_link_options(login PRIVATE
-Wl,--wrap=session_send_string,--wrap=db_user_auth
)
add_test(NAME user_test_4 COMMAND login)
+72
View File
@@ -0,0 +1,72 @@
#include <cmocka.h>
#include <db/db.h>
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <main.h>
#include <string.h>
#include <user.h>
#define UNAME "user1234"
#define PASS "pass1234"
#define UID 1234
int id = 0;
char ret_buf[1024];
int32_t __wrap_db_user_auth(i_auth_t *c, o_auth_t *r) {
r->uid = id;
return id;
}
void __wrap_session_send_string(struct session *sess, const char *fmt, ...) {
char buf[INBUFSIZE];
size_t b_len = 0;
va_list args;
va_start(args, fmt);
b_len = vsprintf(buf, fmt, args);
strcpy(ret_buf, buf);
va_end(args);
}
void test_create_login_success(void **state) {
session sess = {.uname = UNAME};
int ret = 0;
id = UID;
ret = login(&sess, PASS);
assert_int_equal(ret, 0);
assert_int_equal(sess.uid, UID);
// assert_int_not_equal(sess.privileges, 0);
assert_int_equal(sess.state, OP_WAIT);
char welcome_mes[sizeof "Welcome, " + sizeof UNAME + 5];
sprintf(welcome_mes, "Welcome, %s\n", UNAME);
assert_string_equal(welcome_mes, ret_buf);
}
void test_create_login_fail(void **state) {
session sess = {.uname = UNAME};
int ret = 0;
id = 0;
ret = login(&sess, PASS);
assert_int_equal(ret, 1);
assert_int_equal(sess.uid, 0);
// assert_int_not_equal(sess.privileges, 0);
assert_int_equal(sess.state, OP_LOGIN_USR);
assert_string_equal("login_again>\n", ret_buf);
}
int setup(void **state) { return 0; }
int tear_down(void **state) { return 0; }
int main(int argc, char **argv) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_create_login_success),
cmocka_unit_test(test_create_login_fail)
};
return cmocka_run_group_tests(tests, setup, tear_down);
}
+69
View File
@@ -0,0 +1,69 @@
#include <cmocka.h>
#include <setjmp.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <main.h>
#include <string.h>
#include <user.h>
static char user_name[] = "user1234";
char *str2snd;
void __wrap_session_send_string(struct session *sess, const char *fmt, ...) {
assert_string_equal(fmt, str2snd);
}
int32_t create_user(session *sess, char *line) {
return 321;
}
void test__process_user_name__user_name(void **state) {
session sess = {.uname = NULL, .state = OP_WAIT};
str2snd = "password> ";
int ret = process_user_name(user_name, &sess);
assert_int_equal(ret, 0);
assert_string_equal(sess.uname, user_name);
assert_int_equal(sess.state, OP_LOGIN_PSS);
}
void test__process_user_name__exit(void **state) {
session sess = {.uname = NULL, .state = OP_WAIT};
str2snd = "Bye!";
int ret = process_user_name("exit", &sess);
assert_int_equal(ret, 1);
assert_int_equal(sess.state, ERR);
assert_int_equal(sess.reason, EXIT);
}
void test__process_user_name__register(void **state) {
session sess = {.uname = NULL, .state = OP_WAIT};
str2snd = "ok\n";
int ret = process_user_name("register", &sess);
assert_int_equal(ret, 321);
}
void test__process_user_name__anonymous(void **state) {
session sess = {.uname = NULL, .state = OP_WAIT};
str2snd = "Welcome, Anonymous!";
int ret = process_user_name("anonymous", &sess);
assert_int_equal(ret, 3);
assert_string_equal(sess.uname, "anonymous");
assert_int_equal(sess.state, OP_WAIT);
}
int setup(void **state) { return 0; }
int tear_down(void **state) { return 0; }
int main(int argc, char **argv) {
const struct CMUnitTest tests[] = {
cmocka_unit_test(test__process_user_name__user_name),
cmocka_unit_test(test__process_user_name__exit),
cmocka_unit_test(test__process_user_name__register),
cmocka_unit_test(test__process_user_name__anonymous),
};
return cmocka_run_group_tests(tests, setup, tear_down);
}