aboutsummaryrefslogtreecommitdiff
path: root/tests/mock_guest.c
diff options
context:
space:
mode:
authorIftikhar Ahmad <iftikhar.ahmad@gmail.com>2012-10-16 12:51:22 +0000
committerTarmac <>2012-10-16 12:51:22 +0000
commite92b549c49833e3150d60e8773a6731fc49d1249 (patch)
tree5cba1d1b7b7d41784233d4c0ca7724b8d63fc8d1 /tests/mock_guest.c
parentc06ef184d455532c267526f82fb73f00081f70f9 (diff)
parentb17e449c99af738d4cbc8c5d177a1b6943f601d7 (diff)
downloadlibpam-x2go-e92b549c49833e3150d60e8773a6731fc49d1249.tar.gz
libpam-x2go-e92b549c49833e3150d60e8773a6731fc49d1249.tar.bz2
libpam-x2go-e92b549c49833e3150d60e8773a6731fc49d1249.zip
Improving the test coverage.. Approved by David Barth.
Diffstat (limited to 'tests/mock_guest.c')
-rw-r--r--tests/mock_guest.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/tests/mock_guest.c b/tests/mock_guest.c
index 2cf04b3..8bf2c3a 100644
--- a/tests/mock_guest.c
+++ b/tests/mock_guest.c
@@ -9,6 +9,11 @@
#include <errno.h>
#include <unistd.h>
#include <sys/stat.h>
+#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <stdio.h>
static struct passwd guest = { "guest",
"password",
@@ -49,3 +54,69 @@ int chmod(const char *path, mode_t mode)
int chown(const char *path, uid_t owner, gid_t group)
{ return 0; }
+int execvp(const char *file, char *const argv[])
+{
+ return 0;
+}
+/* wrap _exit, to make sure the gcov_exit function installed with atexit()
+ is really called to collect coverage statistics */
+void _exit (int exitcode)
+{
+ exit (exitcode);
+}
+
+
+#define BUFFER_SIZE 512
+
+/*Borrowed this code form socket-sucker.c in lightdm-remote-session-freerdp*/
+int
+socket_sucker ()
+{
+ int socket_fd = 0;
+ int servlen = 0;
+ struct sockaddr_un serv_addr;
+
+ bzero((char *)&serv_addr, sizeof(serv_addr));
+
+ const char * home = getenv("HOME");
+ if (home == NULL) {
+ return -1;
+ }
+
+ serv_addr.sun_family = AF_UNIX;
+
+ int printsize = snprintf(serv_addr.sun_path, sizeof(serv_addr.sun_path) - 1, "%s/%s", home, ".freerdp-socket");
+ if (printsize > sizeof(serv_addr.sun_path) - 1 || printsize < 0) {
+ return -1;
+ }
+
+ servlen = strlen(serv_addr.sun_path) + sizeof(serv_addr.sun_family);
+
+ if ((socket_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
+ return -1;
+ }
+
+ if (connect(socket_fd, (struct sockaddr *)&serv_addr, servlen) < 0) {
+ return -1;
+ }
+
+ char buffer[BUFFER_SIZE + 2];
+ int in = 0;
+ int out = 0;
+
+ in = read(socket_fd, buffer, BUFFER_SIZE);
+
+ if (in > 0) {
+ out = write(1, buffer, in);
+ }
+
+ close(socket_fd);
+
+ if (in > 0 && out > 0 && in == out) {
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
+