aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/tests
diff options
context:
space:
mode:
authorDavid 'Digit' Turner <digit@android.com>2011-04-14 14:13:44 +0200
committerDavid 'Digit' Turner <digit@android.com>2011-04-14 14:13:44 +0200
commit9bdeb24279a840dc75379b76828e6904f7edcd79 (patch)
tree0e07fca5dc5b39ee5e4a45d98118964dcb7cae76 /emulator/tests
parent58f6f27bacf15d066e5f453f40c8a9630119ba63 (diff)
downloadsdk-9bdeb24279a840dc75379b76828e6904f7edcd79.zip
sdk-9bdeb24279a840dc75379b76828e6904f7edcd79.tar.gz
sdk-9bdeb24279a840dc75379b76828e6904f7edcd79.tar.bz2
Revert 183675b74e5a58211e5d9a90a9ca86546ed3e245
Unfortunately, we need to keep the duplicate libraries here to prevent breaking a few internal branches for now. Remove obsolete emulator modules The corresponding modules have all been moved to development/tools/emulator/system/ already. Note that we use a global variable Make trick to prevent the same module from being built twice, so removing these files doesn't break the builds. Another patch should remove the global variable Make trick from development/tools/emulator/system after this patch. Change-Id: I97332216b311608de61919cb75f4b760b249c0d9
Diffstat (limited to 'emulator/tests')
-rw-r--r--emulator/tests/Android.mk17
-rw-r--r--emulator/tests/test-qemud-pipes.c113
2 files changed, 130 insertions, 0 deletions
diff --git a/emulator/tests/Android.mk b/emulator/tests/Android.mk
new file mode 100644
index 0000000..04917f4
--- /dev/null
+++ b/emulator/tests/Android.mk
@@ -0,0 +1,17 @@
+# This directory contains various host tests to be used with the emulator
+# NOTE: Most of these are only built and run on Linux.
+
+LOCAL_PATH := $(call my-dir)
+
+# The test-qemud-pipes program is used to check the execution of QEMUD Pipes
+# See external/qemu/docs/ANDROID-QEMUD-PIPES.TXT for details.
+#
+ifeq ($(HOST_OS),XXXXlinux)
+
+include $(CLEAR_VARS)
+LOCAL_MODULE := test-qemud-pipes
+LOCAL_SRC_FILES := test-qemud-pipes.c
+LOCAL_MODULE_TAGS := debug
+include $(BUILD_HOST_EXECUTABLE)
+
+endif # HOST_OS == linux \ No newline at end of file
diff --git a/emulator/tests/test-qemud-pipes.c b/emulator/tests/test-qemud-pipes.c
new file mode 100644
index 0000000..f5db531
--- /dev/null
+++ b/emulator/tests/test-qemud-pipes.c
@@ -0,0 +1,113 @@
+/* This program is used to test the QEMUD fast pipes.
+ * See external/qemu/docs/ANDROID-QEMUD-PIPES.TXT for details.
+ *
+ * The program acts as a simple TCP server that accepts data and sends
+ * them back to the client.
+ */
+
+#include <sys/socket.h>
+#include <net/inet.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <string.h>
+
+#define DEFAULT_PORT 8012
+
+static void
+socket_close(int sock)
+{
+ int old_errno = errno;
+ close(sock);
+ errno = old_errno;
+}
+
+static int
+socket_loopback_server( int port, int type )
+{
+ struct sockaddr_in addr;
+
+ int sock = socket(AF_INET, type, 0);
+ if (sock < 0) {
+ return -1;
+ }
+
+ memset(&addr, 0, sizeof(addr));
+ addr.sin_family = AF_INET;
+ addr.sin_port = htons(port);
+ addr.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ int n = 1;
+ setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n));
+
+ if (TEMP_FAILURE_RETRY(bind(sock, &addr, sizeof(addr))) < 0) {
+ socket_close(sock);
+ return -1;
+ }
+
+ if (type == SOCK_STREAM) {
+ if (TEMP_FAILURE_RETRY(listen(sock, 4)) < 0) {
+ socket_close(sock);
+ return -1;
+ }
+ }
+
+ return sock;
+}
+
+int main(void)
+{
+ int sock, client;
+ int port = DEFAULT_PORT;
+
+ printf("Starting pipe test server on local port %d\n", port);
+ sock = socket_loopback_server( port, SOCK_STREAM );
+ if (sock < 0) {
+ fprintf(stderr, "Could not start server: %s\n", strerror(errno));
+ return 1;
+ }
+
+ client = accept(sock, NULL, NULL);
+ if (client < 0) {
+ fprintf(stderr, "Server error: %s\n", strerror(errno));
+ return 2;
+ }
+ printf("Client connected!\n");
+
+ /* Now, accept any incoming data, and send it back */
+ for (;;) {
+ char buff[1024], *p;
+ int ret, count;
+
+ do {
+ ret = read(client, buff, sizeof(buff));
+ } while (ret < 0 && errno == EINTR);
+
+ if (ret < 0) {
+ fprintf(stderr, "Client read error: %s\n", strerror(errno));
+ close(client);
+ return 3;
+ }
+ count = ret;
+ p = buff;
+ printf(" received: %d bytes\n", count);
+
+ while (count > 0) {
+ do {
+ ret = write(client, p, count);
+ } while (ret < 0 && errno == EINTR);
+
+ if (ret < 0) {
+ fprintf(stderr, "Client write error: %s\n", strerror(errno));
+ close(client);
+ return 4;
+ }
+ printf(" sent: %d bytes\n", ret);
+
+ p += ret;
+ count -= ret;
+ }
+ }
+
+ return 0;
+}