aboutsummaryrefslogtreecommitdiff
path: root/tests/mock_guest.c
diff options
context:
space:
mode:
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;
+ }
+}
+
+