pubsubd: test on channels - init, add, get, del all
This commit is contained in:
parent
18c763eed3
commit
14fd9b84b9
@ -114,7 +114,7 @@ void pubsubd_subscriber_init (struct app_list_head **chans) {
|
||||
|
||||
void pubsubd_channels_print (const struct channels *chans)
|
||||
{
|
||||
printf ("\033[36mmchannels\033[00m\n\n");
|
||||
printf ("\033[36mmchannels\033[00m\n");
|
||||
|
||||
if (chans == NULL)
|
||||
return ;
|
||||
@ -130,13 +130,19 @@ void pubsubd_channel_print (const struct channel *c)
|
||||
if (c == NULL || c->chan == NULL)
|
||||
return;
|
||||
|
||||
printf ( "\033[32mchan %s\033[00m\n\t", c->chan);
|
||||
if (c->chan == NULL) {
|
||||
printf ( "\033[32mchan name not available\033[00m\n");
|
||||
}
|
||||
else {
|
||||
printf ( "\033[32mchan %s\033[00m\n", c->chan);
|
||||
}
|
||||
|
||||
if (c->alh == NULL)
|
||||
return;
|
||||
|
||||
struct app_list_elm *ale = NULL;
|
||||
LIST_FOREACH(ale, c->alh, entries) {
|
||||
printf ("\t");
|
||||
srv_process_print (ale->p);
|
||||
}
|
||||
}
|
||||
@ -361,6 +367,7 @@ int pubsubd_get_new_process (struct service *srv, struct app_list_elm *ale
|
||||
int index = 0;
|
||||
int version = 0;
|
||||
|
||||
// chan name
|
||||
char chan[BUFSIZ];
|
||||
memset (chan, 0, BUFSIZ);
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
CC=gcc
|
||||
CFLAGS=-Wall -g
|
||||
CFLAGS=-Wall -g -Wextra
|
||||
LDFLAGS= -pthread
|
||||
CFILES=$(wildcard *.c) # CFILES => recompiles everything on a C file change
|
||||
EXEC=$(basename $(wildcard *.c))
|
||||
@ -15,8 +15,11 @@ $(EXEC): $(OBJECTS) $(CFILES)
|
||||
.c.o:
|
||||
$(CC) -c $(CFLAGS) $< -o $@
|
||||
|
||||
$(TESTS):
|
||||
valgrind --show-leak-kinds=all --leak-check=full -v --track-origins=yes ./$(basename $@)
|
||||
|
||||
clean:
|
||||
-rm $(OBJECTS)
|
||||
@-rm $(OBJECTS)
|
||||
|
||||
mrproper: clean
|
||||
rm $(EXEC)
|
||||
@-rm $(EXEC)
|
||||
|
120
pubsub/test-chan-lists.c
Normal file
120
pubsub/test-chan-lists.c
Normal file
@ -0,0 +1,120 @@
|
||||
#include "../lib/pubsubd.h"
|
||||
#include <stdlib.h>
|
||||
|
||||
#define TEST_NAME "test-chan-lists"
|
||||
|
||||
int
|
||||
create_chan (struct channel *c, const char * name) {
|
||||
if (c == NULL) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (c->chan == NULL)
|
||||
c->chan = malloc (BUFSIZ);
|
||||
memset (c->chan, 0, BUFSIZ);
|
||||
memcpy (c->chan, name, strlen (name));
|
||||
c->chanlen = strlen (name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ohshit(int rvalue, const char* str) {
|
||||
fprintf(stderr, "%s\n", str);
|
||||
exit(rvalue);
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char **argv, char **env)
|
||||
{
|
||||
struct service srv;
|
||||
memset (&srv, 0, sizeof (struct service));
|
||||
srv_init (argc, argv, env, &srv, TEST_NAME, NULL);
|
||||
printf ("Listening on %s.\n", srv.spath);
|
||||
|
||||
// creates the service named pipe, that listens to client applications
|
||||
if (srv_create (&srv))
|
||||
ohshit(1, "service_create error");
|
||||
|
||||
// init chans list
|
||||
struct channels chans;
|
||||
memset (&chans, 0, sizeof (struct channels));
|
||||
pubsubd_channels_init (&chans);
|
||||
|
||||
// for each new process
|
||||
// struct app_list_elm ale1;
|
||||
// memset (&ale1, 0, sizeof (struct app_list_elm));
|
||||
|
||||
// warning : this is a local structure, not exactly the same in the prog.
|
||||
struct channel chan;
|
||||
memset (&chan, 0, sizeof (struct channel));
|
||||
create_chan (&chan, "coucou");
|
||||
|
||||
// to emulate
|
||||
// pubsubd_get_new_process (&srv, &ale1, &chans, &chan);
|
||||
|
||||
// FIRST CHAN TO BE ADDED
|
||||
// search for the chan in channels, add it if not found
|
||||
struct channel *new_chan = NULL;
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
if (new_chan == NULL) {
|
||||
new_chan = pubsubd_channels_add (&chans, &chan);
|
||||
pubsubd_subscriber_init (&new_chan->alh);
|
||||
}
|
||||
else {
|
||||
ohshit (2, "error : new chan, can't be found in channels yet");
|
||||
}
|
||||
pubsubd_channel_free (&chan);
|
||||
|
||||
printf ("print the channels, 1 chan\n");
|
||||
printf ("--\n");
|
||||
pubsubd_channels_print (&chans);
|
||||
printf ("--\n");
|
||||
|
||||
// SAME CHAN, SHOULD NOT BE ADDED
|
||||
create_chan (&chan, "coucou");
|
||||
// search for the chan in channels, add it if not found
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
if (new_chan == NULL) {
|
||||
ohshit (3, "error : same chan, shouldn't be added in channels");
|
||||
}
|
||||
else {
|
||||
printf ("already in the 'channels' structure\n");
|
||||
}
|
||||
|
||||
printf ("print the channels, 1 chan\n");
|
||||
printf ("--\n");
|
||||
pubsubd_channels_print (&chans);
|
||||
printf ("--\n");
|
||||
|
||||
// NEW CHAN, SHOULD BE ADDED
|
||||
create_chan (&chan, "salut");
|
||||
// search for the chan in channels, add it if not found
|
||||
new_chan = pubsubd_channel_get (&chans, &chan);
|
||||
if (new_chan == NULL) {
|
||||
new_chan = pubsubd_channels_add (&chans, &chan);
|
||||
pubsubd_subscriber_init (&new_chan->alh);
|
||||
}
|
||||
else {
|
||||
ohshit (4, "error : new chan, should be added in channels");
|
||||
}
|
||||
pubsubd_channel_free (&chan);
|
||||
|
||||
printf ("print the channels, 2 chans\n");
|
||||
printf ("--\n");
|
||||
pubsubd_channels_print (&chans);
|
||||
printf ("--\n");
|
||||
|
||||
// end the application
|
||||
pubsubd_channels_del_all (&chans);
|
||||
|
||||
printf ("\nshould be empty now\n");
|
||||
printf ("--\n");
|
||||
pubsubd_channels_print (&chans);
|
||||
printf ("--\n");
|
||||
|
||||
// the application will shut down, and remove the service named pipe
|
||||
if (srv_close (&srv))
|
||||
ohshit (1, "service_close error");
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
Reference in New Issue
Block a user