aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tests/sys/kern/unix_dgram.c30
1 files changed, 29 insertions, 1 deletions
diff --git a/tests/sys/kern/unix_dgram.c b/tests/sys/kern/unix_dgram.c
index 93669a30d4c5..9df0d4ca7168 100644
--- a/tests/sys/kern/unix_dgram.c
+++ b/tests/sys/kern/unix_dgram.c
@@ -36,6 +36,7 @@
#include <errno.h>
#include <fcntl.h>
#include <signal.h>
+#include <stdio.h>
#include <stdlib.h>
#include <atf-c.h>
@@ -363,12 +364,39 @@ ATF_TC_BODY(event, tc)
test42(fd[0]);
}
-ATF_TP_ADD_TCS(tp)
+ATF_TC_WITHOUT_HEAD(selfgetpeername);
+ATF_TC_BODY(selfgetpeername, tc)
{
+ struct sockaddr_un sun;
+ const char *name;
+ socklen_t len;
+ int sd;
+
+ name = "selfgetpeername";
+
+ sd = socket(PF_UNIX, SOCK_DGRAM, 0);
+ ATF_REQUIRE(sd != -1);
+
+ memset(&sun, 0, sizeof(sun));
+ sun.sun_len = sizeof(sun);
+ sun.sun_family = AF_UNIX;
+ snprintf(sun.sun_path, sizeof(sun.sun_path), "%s", name);
+ ATF_REQUIRE(bind(sd, (struct sockaddr *)&sun, sizeof(sun)) == 0);
+ ATF_REQUIRE(connect(sd, (struct sockaddr *)&sun, sizeof(sun)) == 0);
+
+ len = sizeof(sun);
+ ATF_REQUIRE(getpeername(sd, (struct sockaddr *)&sun, &len) == 0);
+ ATF_REQUIRE(strcmp(sun.sun_path, name) == 0);
+ ATF_REQUIRE(close(sd) == 0);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
ATF_TP_ADD_TC(tp, basic);
ATF_TP_ADD_TC(tp, one2many);
ATF_TP_ADD_TC(tp, event);
+ ATF_TP_ADD_TC(tp, selfgetpeername);
return (atf_no_error());
}