123 lines
1.8 KiB
C
123 lines
1.8 KiB
C
/*
|
|
* Copyright (c) 2016 Proofpoint, Inc. and its suppliers.
|
|
* All rights reserved.
|
|
*
|
|
* By using this file, you agree to the terms and conditions set
|
|
* forth in the LICENSE file which can be found at the top level of
|
|
* the sendmail distribution.
|
|
*/
|
|
|
|
#include <sm/gen.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
# include <stdlib.h>
|
|
# include <unistd.h>
|
|
|
|
# include <sm/heap.h>
|
|
# include <sm/string.h>
|
|
# include <sm/test.h>
|
|
# include <sm/notify.h>
|
|
|
|
# define MAX_CNT 10
|
|
|
|
/*
|
|
** MSGTEST -- test of message queue.
|
|
**
|
|
** Parameters:
|
|
** owner -- create message queue.
|
|
**
|
|
** Returns:
|
|
** 0 on success
|
|
** < 0 on failure.
|
|
*/
|
|
|
|
static int
|
|
notifytest(owner)
|
|
int owner;
|
|
{
|
|
int r;
|
|
size_t len;
|
|
char buf[64];
|
|
#define TSTSTR "qf0001"
|
|
|
|
r = sm_notify_start(owner, 0);
|
|
if (r < 0)
|
|
{
|
|
perror("sm_notify_start failed");
|
|
return -1;
|
|
}
|
|
|
|
if (!owner)
|
|
{
|
|
len = sm_strlcpy(buf, TSTSTR, sizeof(buf));
|
|
r = sm_notify_snd(buf, len);
|
|
SM_TEST(r >= 0);
|
|
if (r < 0)
|
|
goto end;
|
|
|
|
end:
|
|
return r;
|
|
}
|
|
else
|
|
{
|
|
r = sm_notify_rcv(buf, sizeof(buf), 5);
|
|
SM_TEST(r >= 0);
|
|
if (r < 0)
|
|
return r;
|
|
if (r > 0 && r < sizeof(buf))
|
|
buf[r] = '\0';
|
|
buf[sizeof(buf) - 1] = '\0';
|
|
SM_TEST(strcmp(buf, TSTSTR) == 0);
|
|
fprintf(stderr, "buf=\"%s\"\n", buf);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
int
|
|
main(argc, argv)
|
|
int argc;
|
|
char *argv[];
|
|
{
|
|
int ch;
|
|
int r = 0;
|
|
pid_t pid;
|
|
|
|
# define OPTIONS ""
|
|
while ((ch = getopt(argc, argv, OPTIONS)) != -1)
|
|
{
|
|
switch ((char) ch)
|
|
{
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
r = sm_notify_init(0);
|
|
if (r < 0)
|
|
{
|
|
perror("sm_notify_init failed\n");
|
|
return -1;
|
|
}
|
|
|
|
if ((pid = fork()) < 0)
|
|
{
|
|
perror("fork failed\n");
|
|
return -1;
|
|
}
|
|
|
|
sm_test_begin(argc, argv, "test notify");
|
|
if (pid == 0)
|
|
{
|
|
/* give the parent the chance to setup data */
|
|
sleep(1);
|
|
r = notifytest(false);
|
|
}
|
|
else
|
|
{
|
|
r = notifytest(true);
|
|
}
|
|
SM_TEST(r >= 0);
|
|
return sm_test_end();
|
|
}
|