aboutsummaryrefslogtreecommitdiffstats
path: root/test/general.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/general.c')
-rw-r--r--test/general.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/test/general.c b/test/general.c
new file mode 100644
index 0000000..d7673a3
--- /dev/null
+++ b/test/general.c
@@ -0,0 +1,79 @@
+#include <netinet/in.h>
+#include <stdio.h>
+#include <pthread.h>
+
+#include "../server/tcp.h"
+
+#include <errno.h>
+#include <packet.h>
+
+#define W printf("LINE %i\n", __LINE__)
+
+int commsock;
+enum commd_error cerr;
+
+void setup_globals(void) { commsock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); }
+
+u64 sendtoserv(int sock, enum commd_type t, struct commd *cmd, enum commd_error * NULLABLE e) {
+ sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ struct sockaddr_in serv = {
+ .sin_family = AF_INET, .sin_port = htons(TCP_PORT), .sin_addr = {htonl(INADDR_LOOPBACK)}};
+ while (connect(sock, (struct sockaddr *)&serv, sizeof(serv)) != 0) sleep(1);
+ t = htonl(t);
+ if (send(sock, &t, sizeof(t), 0) <= 0) { *e = ERR_SERV; return 0; }
+ if (send(sock, cmd, sizeof(*cmd), 0) <= 0) { *e = ERR_SERV; return 0; }
+
+ u64 resp;
+ if (recv(sock, &resp, sizeof(resp), 0) <= 0) {*e = ERR_SERV; return 0; }
+ resp = ntoh64(resp);
+ if (resp == 0 && e != NULL) {
+ read(sock, e, sizeof(*e));
+ *e = ntohl(*e);
+ }
+ shutdown(sock, SHUT_RDWR);
+ close(sock);
+ return resp;
+}
+
+u64 register_user(i32 perm) {
+ struct commd_register r = {.auid = hton64(0), .perm = hton64(perm)};
+ if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s. errno: %s\n", cerr, kv_strerror(cerr), strerror(errno));
+ return sendtoserv(commsock, CMD_REGISTER, (struct commd *)&r, &cerr);
+}
+
+void unreg_user(u64 u) {
+ struct commd_unregister unreg = {.auid = hton64(u), .uid = hton64(u)};
+ u64 resp = sendtoserv(commsock, CMD_UNREGISTER, (struct commd *)&unreg, &cerr);
+ if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s. errno: %s\n", cerr, kv_strerror(cerr), strerror(errno));
+ printf("sendtoserv returned %zu\n", resp);
+}
+
+u64 create_channel(u64 u) {
+ struct commd_create c = {.uid = hton64(u)};
+ u64 resp = sendtoserv(commsock, CMD_CREATE, (struct commd *)&c, &cerr);
+ if (cerr != ERR_SUCCESS) DEBUGF("Server returned error %i: %s\n", cerr, kv_strerror(cerr));
+ return resp;
+}
+
+void* thr(void* a) {
+ (void)a;
+ u64 uid = register_user(perm_none);
+ printf("uid: %zu\n", uid);
+ unreg_user(uid);
+ uid = register_user(perm_admin);
+ printf("uid: %zu\n", uid);
+ u64 chid = create_channel(uid);
+ printf("chid: %zu\n", chid);
+ return NULL;
+}
+
+int main(int argc, char *argv[]) {
+ (void)argc;
+ (void)argv;
+ for (int i = 0; i < 1; ++i) {
+ pthread_t t;
+ pthread_create(&t, NULL, thr, NULL);
+ }
+ sleep(1);
+ return 0;
+}