OSDN Git Service

Remove system/extras/tests/bionic.
authorElliott Hughes <enh@google.com>
Tue, 15 Dec 2015 01:36:29 +0000 (17:36 -0800)
committerElliott Hughes <enh@google.com>
Tue, 15 Dec 2015 01:36:29 +0000 (17:36 -0800)
Everything is now tested better by bionic itself, and as part of CTS.

Change-Id: Ie23e50b5ece911b650ad5abda8230bf7a8d3a452

tests/bionic/libc/Android.mk [deleted file]
tests/bionic/libc/MODULE_LICENSE_BSD_AND_GPL [deleted file]
tests/bionic/libc/README.TXT [deleted file]
tests/bionic/libc/bionic/test_cond.c [deleted file]
tests/bionic/libc/bionic/test_pthread_cond.c [deleted file]
tests/bionic/libc/common/test_pthread_mutex.c [deleted file]
tests/bionic/libc/common/test_pthread_rwlock.c [deleted file]
tests/bionic/libc/run-test.sh [deleted file]

diff --git a/tests/bionic/libc/Android.mk b/tests/bionic/libc/Android.mk
deleted file mode 100644 (file)
index 155a701..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-# Copyright (C) 2008 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Build control file for Bionic's test programs
-# define the BIONIC_TESTS environment variable to build the test programs
-#
-ifdef BIONIC_TESTS
-
-LOCAL_PATH:= $(call my-dir)
-
-# used to define a simple test program and build it as a standalone
-# device executable.
-#
-# you can use EXTRA_CFLAGS to indicate additional CFLAGS to use
-# in the build. the variable will be cleaned on exit
-#
-define device-test
-  $(foreach file,$(1), \
-    $(eval include $(CLEAR_VARS)) \
-    $(eval LOCAL_SRC_FILES := $(file)) \
-    $(eval LOCAL_MODULE := $(notdir $(file:%.c=%))) \
-    $(eval LOCAL_MODULE := $(LOCAL_MODULE:%.cpp=%)) \
-    $(eval LOCAL_CFLAGS += $(EXTRA_CFLAGS)) \
-    $(eval LOCAL_LDFLAGS += $(EXTRA_LDLIBS)) \
-    $(eval LOCAL_MODULE_TAGS := tests) \
-    $(eval include $(BUILD_EXECUTABLE)) \
-  ) \
-  $(eval EXTRA_CFLAGS :=) \
-  $(eval EXTRA_LDLIBS :=)
-endef
-
-# same as 'device-test' but builds a host executable instead
-# you can use EXTRA_LDLIBS to indicate additional linker flags
-#
-define host-test
-  $(foreach file,$(1), \
-    $(eval include $(CLEAR_VARS)) \
-    $(eval LOCAL_SRC_FILES := $(file)) \
-    $(eval LOCAL_MODULE := $(notdir $(file:%.c=%))) \
-    $(eval LOCAL_MODULE := $(LOCAL_MODULE:%.cpp=%)) \
-    $(eval LOCAL_CFLAGS += $(EXTRA_CFLAGS)) \
-    $(eval LOCAL_LDLIBS += $(EXTRA_LDLIBS)) \
-    $(eval LOCAL_MODULE_TAGS := tests) \
-    $(eval include $(BUILD_HOST_EXECUTABLE)) \
-  ) \
-  $(eval EXTRA_CFLAGS :=) \
-  $(eval EXTRA_LDLIBS :=)
-endef
-
-# First, the tests in 'common'
-
-sources := \
-    common/test_pthread_mutex.c \
-    common/test_pthread_rwlock.c \
-
-# _XOPEN_SOURCE=600 is needed to get pthread_mutexattr_settype() on GLibc
-#
-EXTRA_LDLIBS := -lpthread -lrt
-EXTRA_CFLAGS := -D_XOPEN_SOURCE=600 -DHOST
-$(call host-test, $(sources))
-$(call device-test, $(sources))
-
-# Second, the Bionic-specific tests
-
-sources :=  \
-    bionic/test_cond.c \
-    bionic/test_pthread_cond.c \
-
-$(call device-test, $(sources))
-
-endif  # BIONIC_TESTS
diff --git a/tests/bionic/libc/MODULE_LICENSE_BSD_AND_GPL b/tests/bionic/libc/MODULE_LICENSE_BSD_AND_GPL
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/tests/bionic/libc/README.TXT b/tests/bionic/libc/README.TXT
deleted file mode 100644 (file)
index c43f93b..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-This directory contains a set of tests for Android's Bionic C library.
-
-You must define the BIONIC_TESTS environment variable to build these
-test programs. For example, do:
-
-    cd system/extras/tests/bionic/libc
-    mm BIONIC_TESTS=1
-
-All test programs, except those in the 'other' directory, should exit
-with a status code of 0 in case of success, and 1 in case of failure.
-
-The directory layout is simple:
-
-  common/
-    Contains tests that can be compiled either with Bionic or another
-    C library.
-
-  bionic/
-    Contains tests that can *only* be compiled against Bionic
-
-  other/
-    Other unrelated tests. These are not run by the test runner
-    program but will be installed to your device nevertheless.
-    Put benchmarks and various debug/info stuff there.
diff --git a/tests/bionic/libc/bionic/test_cond.c b/tests/bionic/libc/bionic/test_cond.c
deleted file mode 100644 (file)
index 62d9694..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the 
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <pthread.h>
-#include <semaphore.h>
-#include <errno.h>
-#include <stdio.h>
-#include <time.h>
-#include <string.h>
-#include <unistd.h>
-
-static pthread_mutex_t lock = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP;
-static pthread_cond_t  wait = PTHREAD_COND_INITIALIZER;
-
-static void* _thread1(void *__u __attribute__((unused)))
-{
-    printf("1: obtaining mutex\n");
-    pthread_mutex_lock(&lock);
-    printf("1: waiting on condition variable\n");
-    pthread_cond_wait(&wait, &lock);
-    printf("1: releasing mutex\n");
-    pthread_mutex_unlock(&lock);
-    printf("1: exiting\n");    
-    return NULL;
-}
-
-static void* _thread2(void *__u __attribute__((unused)))
-{
-    int cnt = 2;
-    while(cnt--) {
-        printf("2: obtaining mutex\n");
-        pthread_mutex_lock(&lock);
-        printf("2: signaling\n");
-        pthread_cond_signal(&wait);
-        printf("2: releasing mutex\n");
-        pthread_mutex_unlock(&lock);
-    }
-
-    printf("2: exiting\n");
-    return NULL;
-}
-
-typedef void* (*thread_func)(void*);
-static const  thread_func thread_routines[] =
-{
-    &_thread1,
-    &_thread2,
-};
-
-int main(void)
-{
-    pthread_t t[2];
-    int nn;
-    int count = (int)(sizeof t/sizeof t[0]);
-
-    for (nn = 0; nn < count; nn++) {
-        printf("main: creating thread %d\n", nn+1);
-        if (pthread_create( &t[nn], NULL, thread_routines[nn], NULL) < 0) {
-            printf("main: could not create thread %d: %s\n", nn+1, strerror(errno));
-            return -2;
-        }
-    }
-
-    for (nn = 0; nn < count; nn++) {
-        printf("main: joining thread %d\n", nn+1);
-        if (pthread_join(t[nn], NULL)) {
-            printf("main: could not join thread %d: %s\n", nn+1, strerror(errno));
-            return -2;
-        }
-    }
-
-    return 0;
-}
diff --git a/tests/bionic/libc/bionic/test_pthread_cond.c b/tests/bionic/libc/bionic/test_pthread_cond.c
deleted file mode 100644 (file)
index 6b13d77..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#include <pthread.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-
-
-static pthread_cond_t cond1;
-static pthread_cond_t cond2;
-static pthread_mutex_t test_lock = PTHREAD_MUTEX_INITIALIZER;
-
-static void *
-thread1_func(void* arg)
-{
-    printf("Thread 1 (arg=%p tid=%d) entered.\n", arg, gettid());
-    printf("1 waiting for cond1\n");
-    pthread_mutex_lock(&test_lock);
-    pthread_cond_wait(&cond1, &test_lock );
-    pthread_mutex_unlock(&test_lock);
-    printf("Thread 1 done.\n");
-    return 0;
-}
-
-static void *
-thread2_func(void* arg)
-{
-    printf("Thread 2 (arg=%p tid=%d) entered.\n", arg, gettid());
-    printf("2 waiting for cond2\n");
-    pthread_mutex_lock(&test_lock);
-    pthread_cond_wait(&cond2, &test_lock );
-    pthread_mutex_unlock(&test_lock);
-
-    printf("Thread 2 done.\n");
-    return 0;
-}
-
-static void *
-thread3_func(void* arg)
-{
-    printf("Thread 3 (arg=%p tid=%d) entered.\n", arg, gettid());
-    printf("3 waiting for cond1\n");
-    pthread_mutex_lock(&test_lock);
-    pthread_cond_wait(&cond1, &test_lock );
-    pthread_mutex_unlock(&test_lock);
-    printf("3 Sleeping\n");
-    sleep(2);
-    printf("3 signal cond2\n");
-    pthread_cond_signal(&cond2);
-
-    printf("Thread 3 done.\n");
-    return 0;
-}
-
-static void *
-thread4_func(void* arg)
-{
-    printf("Thread 4 (arg=%p tid=%d) entered.\n", arg, gettid());
-    printf("4 Sleeping\n");
-    sleep(5);
-
-    printf("4 broadcast cond1\n");
-    pthread_cond_broadcast(&cond1);
-    printf("Thread 4 done.\n");
-    return 0;
-}
-
-int main(int argc __unused, const char *argv[] __unused)
-{
-    pthread_t t[4];
-
-    pthread_cond_init(&cond1, NULL);
-    pthread_cond_init(&cond2, NULL);
-    pthread_create( &t[0], NULL, thread1_func, (void *)1 );
-    pthread_create( &t[1], NULL, thread2_func, (void *)2 );
-    pthread_create( &t[2], NULL, thread3_func, (void *)3 );
-    pthread_create( &t[3], NULL, thread4_func, (void *)4 );
-
-    pthread_join(t[0], NULL);
-    pthread_join(t[1], NULL);
-    pthread_join(t[2], NULL);
-    pthread_join(t[3], NULL);
-    return 0;
-}
diff --git a/tests/bionic/libc/common/test_pthread_mutex.c b/tests/bionic/libc/common/test_pthread_mutex.c
deleted file mode 100644 (file)
index a84d5be..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the 
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <pthread.h>
-#include <errno.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/* Posix states that EDEADLK should be returned in case a deadlock condition
- * is detected with a PTHREAD_MUTEX_ERRORCHECK lock() or trylock(), but
- * GLibc returns EBUSY instead.
- */
-#ifdef HOST
-#  define ERRNO_PTHREAD_EDEADLK   EBUSY
-#else
-#  define ERRNO_PTHREAD_EDEADLK   EDEADLK
-#endif
-
-static void __attribute__((noreturn))
-panic(const char* func, const char* format, ...)
-{
-    va_list  args;
-    fprintf(stderr, "%s: ", func);
-    va_start(args, format);
-    vfprintf(stderr, format, args);
-    va_end(args);
-    fprintf(stderr, "\n");
-    exit(1);
-}
-
-#define  PANIC(...)   panic(__FUNCTION__,__VA_ARGS__)
-
-static void __attribute__((noreturn))
-error(int  errcode, const char* func, const char* format, ...)
-{
-    va_list  args;
-    fprintf(stderr, "%s: ", func);
-    va_start(args, format);
-    vfprintf(stderr, format, args);
-    va_end(args);
-    fprintf(stderr, " error=%d: %s\n", errcode, strerror(errcode));
-    exit(1);
-}
-
-/* return current time in seconds as floating point value */
-static double
-time_now(void)
-{
-    struct timespec ts[1];
-
-    clock_gettime(CLOCK_MONOTONIC, ts);
-    return (double)ts->tv_sec + ts->tv_nsec/1e9;
-}
-
-static void
-time_sleep(double  delay)
-{
-    struct timespec ts;
-    int             ret;
-
-    ts.tv_sec  = (time_t)delay;
-    ts.tv_nsec = (long)((delay - ts.tv_sec)*1e9);
-
-    do {
-        ret = nanosleep(&ts, &ts);
-    } while (ret < 0 && errno == EINTR);
-}
-
-#define  ERROR(errcode,...)   error((errcode),__FUNCTION__,__VA_ARGS__)
-
-#define  TZERO(cond)   \
-    { int _ret = (cond); if (_ret != 0) ERROR(_ret,"%d:%s", __LINE__, #cond); }
-
-#define  TTRUE(cond)   \
-    { if (!(cond)) PANIC("%d:%s", __LINE__, #cond); }
-
-#define  TFALSE(cond)   \
-    { if (!!(cond)) PANIC("%d:%s", __LINE__, #cond); }
-
-#define  TEXPECT_INT(cond,val) \
-    { int _ret = (cond); if (_ret != (val)) PANIC("%d:%s returned %d (%d expected)", __LINE__, #cond, _ret, (val)); }
-
-/* perform a simple init/lock/unlock/destroy test on a mutex of given attributes */
-static void do_test_mutex_1(pthread_mutexattr_t *attr)
-{
-    int              ret;
-    pthread_mutex_t  lock[1];
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_lock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-}
-
-static void set_mutexattr_type(pthread_mutexattr_t *attr, int type)
-{
-    int  newtype;
-    TZERO(pthread_mutexattr_settype(attr, type));
-    newtype = ~type;
-    TZERO(pthread_mutexattr_gettype(attr, &newtype));
-    TEXPECT_INT(newtype,type);
-}
-
-/* simple init/lock/unlock/destroy on all mutex types */
-static void do_test_1(void)
-{
-    int                  ret, type;
-    pthread_mutexattr_t  attr[1];
-
-    do_test_mutex_1(NULL);
-
-    /* non-shared version */
-
-    TZERO(pthread_mutexattr_init(attr));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_1(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_1(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_1(attr);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-
-    /* shared version */
-    TZERO(pthread_mutexattr_init(attr));
-    TZERO(pthread_mutexattr_setpshared(attr, PTHREAD_PROCESS_SHARED));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_1(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_1(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_1(attr);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-}
-
-/* perform init/trylock/unlock/destroy then init/lock/trylock/destroy */
-static void do_test_mutex_2(pthread_mutexattr_t *attr)
-{
-    pthread_mutex_t  lock[1];
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TEXPECT_INT(pthread_mutex_trylock(lock),EBUSY);
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-}
-
-static void do_test_mutex_2_rec(pthread_mutexattr_t *attr)
-{
-    pthread_mutex_t  lock[1];
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TZERO(pthread_mutex_trylock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-}
-
-static void do_test_mutex_2_chk(pthread_mutexattr_t *attr)
-{
-    pthread_mutex_t  lock[1];
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-
-    TZERO(pthread_mutex_init(lock, attr));
-    TZERO(pthread_mutex_trylock(lock));
-    TEXPECT_INT(pthread_mutex_trylock(lock),ERRNO_PTHREAD_EDEADLK);
-    TZERO(pthread_mutex_unlock(lock));
-    TZERO(pthread_mutex_destroy(lock));
-}
-
-static void do_test_2(void)
-{
-    pthread_mutexattr_t  attr[1];
-
-    do_test_mutex_2(NULL);
-
-    /* non-shared version */
-
-    TZERO(pthread_mutexattr_init(attr));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_2(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_2_rec(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_2_chk(attr);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-
-    /* shared version */
-    TZERO(pthread_mutexattr_init(attr));
-    TZERO(pthread_mutexattr_setpshared(attr, PTHREAD_PROCESS_SHARED));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_2(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_2_rec(attr);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_2_chk(attr);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-}
-
-/* This is more complex example to test contention of mutexes.
- * Essentially, what happens is this:
- *
- * - main thread creates a mutex and locks it
- * - it then creates thread 1 and thread 2
- *
- * - it then record the current time, sleep for a specific 'waitDelay'
- *   then unlock the mutex.
- *
- * - thread 1 locks() the mutex. It shall be stopped for a least 'waitDelay'
- *   seconds. It then unlocks the mutex.
- *
- * - thread 2 trylocks() the mutex. In case of failure (EBUSY), it waits
- *   for a small amount of time (see 'spinDelay') and tries again, until
- *   it succeeds. It then unlocks the mutex.
- *
- * The goal of this test is to verify that thread 1 has been stopped
- * for a sufficiently long time, and that thread 2 has been spinning for
- * the same minimum period. There is no guarantee as to which thread is
- * going to acquire the mutex first.
- */
-typedef struct {
-    pthread_mutex_t  mutex[1];
-    double           t0;
-    double           waitDelay;
-    double           spinDelay;
-} Test3State;
-
-static void* do_mutex_test_3_t1(void* arg)
-{
-    Test3State *s = arg;
-    double      t1;
-
-    TZERO(pthread_mutex_lock(s->mutex));
-    t1 = time_now();
-    //DEBUG ONLY: printf("t1-s->t0=%g waitDelay=%g\n", t1-s->t0, s->waitDelay);
-    TTRUE((t1-s->t0) >= s->waitDelay); 
-    TZERO(pthread_mutex_unlock(s->mutex));
-    return NULL;
-}
-
-static void* do_mutex_test_3_t2(void* arg)
-{
-    Test3State *s = arg;
-    double      t1;
-
-    for (;;) {
-        int ret = pthread_mutex_trylock(s->mutex);
-        if (ret == 0)
-            break;
-        if (ret == EBUSY) {
-            time_sleep(s->spinDelay);
-            continue;
-        }
-    }
-    t1 = time_now();
-    TTRUE((t1-s->t0) >= s->waitDelay);
-    TZERO(pthread_mutex_unlock(s->mutex));
-    return NULL;
-}
-
-
-static void do_test_mutex_3(pthread_mutexattr_t *attr, double delay)
-{
-    Test3State  s[1];
-    pthread_t   th1, th2;
-    void*       dummy;
-
-    TZERO(pthread_mutex_init(s->mutex, attr));
-    s->waitDelay = delay;
-    s->spinDelay = delay/20.;
-
-    TZERO(pthread_mutex_lock(s->mutex));
-
-    pthread_create(&th1, NULL, do_mutex_test_3_t1, s);
-    pthread_create(&th2, NULL, do_mutex_test_3_t2, s);
-
-    s->t0 = time_now();
-    time_sleep(delay);
-
-    TZERO(pthread_mutex_unlock(s->mutex));
-
-    TZERO(pthread_join(th1, &dummy));
-    TZERO(pthread_join(th2, &dummy));
-}
-
-static void do_test_3(double  delay)
-{
-    pthread_mutexattr_t  attr[1];
-
-    do_test_mutex_3(NULL, delay);
-
-    /* non-shared version */
-
-    TZERO(pthread_mutexattr_init(attr));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_3(attr, delay);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_3(attr, delay);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_3(attr, delay);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-
-    /* shared version */
-    TZERO(pthread_mutexattr_init(attr));
-    TZERO(pthread_mutexattr_setpshared(attr, PTHREAD_PROCESS_SHARED));
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_NORMAL);
-    do_test_mutex_3(attr, delay);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_RECURSIVE);
-    do_test_mutex_3(attr, delay);
-
-    set_mutexattr_type(attr, PTHREAD_MUTEX_ERRORCHECK);
-    do_test_mutex_3(attr, delay);
-
-    TZERO(pthread_mutexattr_destroy(attr));
-}
-
-
-int main(void)
-{
-    do_test_1();
-    do_test_2();
-    do_test_3(0.1);
-    return 0;
-}
diff --git a/tests/bionic/libc/common/test_pthread_rwlock.c b/tests/bionic/libc/common/test_pthread_rwlock.c
deleted file mode 100644 (file)
index 4687e01..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in
- *    the documentation and/or other materials provided with the
- *    distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
- * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
- * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
- * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-#include <pthread.h>
-#include <errno.h>
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-/* Posix states that EDEADLK should be returned in case a deadlock condition
- * is detected with a PTHREAD_MUTEX_ERRORCHECK lock() or trylock(), but
- * GLibc returns EBUSY instead.
- */
-#ifdef HOST
-#  define ERRNO_PTHREAD_EDEADLK   EBUSY
-#else
-#  define ERRNO_PTHREAD_EDEADLK   EDEADLK
-#endif
-
-static void __attribute__((noreturn))
-panic(const char* func, const char* format, ...)
-{
-    va_list  args;
-    fprintf(stderr, "%s: ", func);
-    va_start(args, format);
-    vfprintf(stderr, format, args);
-    va_end(args);
-    fprintf(stderr, "\n");
-    exit(1);
-}
-
-#define  PANIC(...)   panic(__FUNCTION__,__VA_ARGS__)
-
-static void __attribute__((noreturn))
-error(int  errcode, const char* func, const char* format, ...)
-{
-    va_list  args;
-    fprintf(stderr, "%s: ", func);
-    va_start(args, format);
-    vfprintf(stderr, format, args);
-    va_end(args);
-    fprintf(stderr, " error=%d: %s\n", errcode, strerror(errcode));
-    exit(1);
-}
-
-/* return current time in seconds as floating point value */
-static double
-time_now(void)
-{
-    struct timespec ts[1];
-
-    clock_gettime(CLOCK_MONOTONIC, ts);
-    return (double)ts->tv_sec + ts->tv_nsec/1e9;
-}
-
-static void
-time_sleep(double  delay)
-{
-    struct timespec ts;
-    int             ret;
-
-    ts.tv_sec  = (time_t)delay;
-    ts.tv_nsec = (long)((delay - ts.tv_sec)*1e9);
-
-    do {
-        ret = nanosleep(&ts, &ts);
-    } while (ret < 0 && errno == EINTR);
-}
-
-#define  ERROR(errcode,...)   error((errcode),__FUNCTION__,__VA_ARGS__)
-
-#define  TZERO(cond)   \
-    { int _ret = (cond); if (_ret != 0) ERROR(_ret,"%d:%s", __LINE__, #cond); }
-
-#define  TTRUE(cond)   \
-    { if (!(cond)) PANIC("%d:%s", __LINE__, #cond); }
-
-#define  TFALSE(cond)   \
-    { if (!!(cond)) PANIC("%d:%s", __LINE__, #cond); }
-
-#define  TEXPECT_INT(cond,val) \
-    { int _ret = (cond); if (_ret != (val)) PANIC("%d:%s returned %d (%d expected)", __LINE__, #cond, _ret, (val)); }
-
-/* perform a simple init/lock/unlock/destroy test on a rwlock of given attributes */
-static void do_test_rwlock_rd1(pthread_rwlockattr_t *attr)
-{
-    int               ret;
-    pthread_rwlock_t  lock[1];
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_rdlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-}
-
-static void do_test_rwlock_wr1(pthread_rwlockattr_t *attr)
-{
-    int               ret;
-    pthread_rwlock_t  lock[1];
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_wrlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-}
-
-static void set_rwlockattr_shared(pthread_rwlockattr_t *attr, int shared)
-{
-    int  newshared;
-    TZERO(pthread_rwlockattr_setpshared(attr, shared));
-    newshared = ~shared;
-    TZERO(pthread_rwlockattr_getpshared(attr, &newshared));
-    TEXPECT_INT(newshared,shared);
-}
-
-/* simple init/lock/unlock/destroy on all rwlock types */
-static void do_test_1(void)
-{
-    int                  ret, type;
-    pthread_rwlockattr_t  attr[1];
-
-    do_test_rwlock_rd1(NULL);
-    do_test_rwlock_wr1(NULL);
-
-    /* non-shared version */
-
-    TZERO(pthread_rwlockattr_init(attr));
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_PRIVATE);
-    do_test_rwlock_rd1(attr);
-    do_test_rwlock_wr1(attr);
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_SHARED);
-    do_test_rwlock_rd1(attr);
-    do_test_rwlock_wr1(attr);
-
-    TZERO(pthread_rwlockattr_destroy(attr));
-}
-
-static void do_test_rwlock_rd2_rec(pthread_rwlockattr_t *attr)
-{
-    pthread_rwlock_t  lock[1];
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_tryrdlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_tryrdlock(lock));
-    TZERO(pthread_rwlock_tryrdlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-}
-
-static void do_test_rwlock_wr2_rec(pthread_rwlockattr_t *attr)
-{
-    pthread_rwlock_t  lock[1];
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_trywrlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-
-    TZERO(pthread_rwlock_init(lock, attr));
-    TZERO(pthread_rwlock_trywrlock(lock));
-#ifdef HOST
-    /* The host implementation (GLibc) does not support recursive
-     * write locks */
-    TEXPECT_INT(pthread_rwlock_trywrlock(lock),EBUSY);
-#else
-    /* Our implementation supports recursive write locks ! */
-    TZERO(pthread_rwlock_trywrlock(lock));
-    TZERO(pthread_rwlock_unlock(lock));
-#endif
-    TZERO(pthread_rwlock_unlock(lock));
-    TZERO(pthread_rwlock_destroy(lock));
-}
-
-static void do_test_2(void)
-{
-    pthread_rwlockattr_t  attr[1];
-
-    do_test_rwlock_rd2_rec(NULL);
-    do_test_rwlock_wr2_rec(NULL);
-
-    /* non-shared version */
-
-    TZERO(pthread_rwlockattr_init(attr));
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_PRIVATE);
-    do_test_rwlock_rd2_rec(attr);
-    do_test_rwlock_wr2_rec(attr);
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_SHARED);
-    do_test_rwlock_rd2_rec(attr);
-    do_test_rwlock_wr2_rec(attr);
-
-    TZERO(pthread_rwlockattr_destroy(attr));
-}
-
-/* This is more complex example to test contention of rwlockes.
- * Essentially, what happens is this:
- *
- * - main thread creates a rwlock and rdlocks it
- * - it then creates thread 1 and thread 2
- *
- * - it then record the current time, sleep for a specific 'waitDelay'
- *   then unlock the rwlock.
- *
- * - thread 1 tryrdlocks() the rwlock. It shall acquire the lock
- *   immediately, then release it, then wrlock().
- *
- * - thread 2 trywrlocks() the rwlock. In case of failure (EBUSY), it waits
- *   for a small amount of time (see 'spinDelay') and tries again, until
- *   it succeeds. It then unlocks the rwlock.
- *
- * The goal of this test is to verify that thread 1 has been stopped
- * for a sufficiently long time (in the wrlock), and that thread 2 has
- * been spinning for the same minimum period. There is no guarantee as
- * to which thread is going to acquire the rwlock first.
- */
-typedef struct {
-    pthread_rwlock_t  rwlock[1];
-    double            t0;
-    double            waitDelay;
-    double            spinDelay;
-} Test3State;
-
-static void* do_rwlock_test_rd3_t1(void* arg)
-{
-    Test3State *s = arg;
-    double      t1;
-
-    /* try-acquire the lock, should succeed immediately */
-    TZERO(pthread_rwlock_tryrdlock(s->rwlock));
-    TZERO(pthread_rwlock_unlock(s->rwlock));
-
-    /* wrlock() the lock, now */
-    TZERO(pthread_rwlock_wrlock(s->rwlock));
-
-    t1 = time_now();
-    //DEBUG ONLY: printf("t1-s->t0=%g waitDelay=%g\n", t1-s->t0, s->waitDelay);
-    TTRUE((t1-s->t0) >= s->waitDelay); 
-    TZERO(pthread_rwlock_unlock(s->rwlock));
-    return NULL;
-}
-
-static void* do_rwlock_test_rd3_t2(void* arg)
-{
-    Test3State *s = arg;
-    double      t1;
-
-    for (;;) {
-        int ret = pthread_rwlock_trywrlock(s->rwlock);
-        if (ret == 0)
-            break;
-        if (ret == EBUSY) {
-            time_sleep(s->spinDelay);
-            continue;
-        }
-    }
-    t1 = time_now();
-    TTRUE((t1-s->t0) >= s->waitDelay);
-    TZERO(pthread_rwlock_unlock(s->rwlock));
-    return NULL;
-}
-
-
-static void do_test_rwlock_rd3(pthread_rwlockattr_t *attr, double delay)
-{
-    Test3State  s[1];
-    pthread_t   th1, th2;
-    void*       dummy;
-
-    TZERO(pthread_rwlock_init(s->rwlock, attr));
-    s->waitDelay = delay;
-    s->spinDelay = delay/20.;
-
-    TZERO(pthread_rwlock_rdlock(s->rwlock));
-
-    pthread_create(&th1, NULL, do_rwlock_test_rd3_t1, s);
-    pthread_create(&th2, NULL, do_rwlock_test_rd3_t2, s);
-
-    s->t0 = time_now();
-    time_sleep(delay);
-
-    TZERO(pthread_rwlock_unlock(s->rwlock));
-
-    TZERO(pthread_join(th1, &dummy));
-    TZERO(pthread_join(th2, &dummy));
-}
-
-static void do_test_3(double  delay)
-{
-    pthread_rwlockattr_t  attr[1];
-
-    do_test_rwlock_rd3(NULL, delay);
-
-    /* non-shared version */
-
-    TZERO(pthread_rwlockattr_init(attr));
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_PRIVATE);
-    do_test_rwlock_rd3(attr, delay);
-
-    set_rwlockattr_shared(attr, PTHREAD_PROCESS_SHARED);
-    do_test_rwlock_rd3(attr, delay);
-
-    TZERO(pthread_rwlockattr_destroy(attr));
-}
-
-
-int main(void)
-{
-    do_test_1();
-    do_test_2();
-    do_test_3(0.1);
-    return 0;
-}
diff --git a/tests/bionic/libc/run-test.sh b/tests/bionic/libc/run-test.sh
deleted file mode 100755 (executable)
index c88c6fe..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2010 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#  This shell script is used to run one test on a device emulator.
-#
-
-PROGDIR=`dirname $0`
-
-#
-# Parse options
-#
-VERBOSE=no
-VERBOSE2=no
-ADB_CMD=adb
-
-while [ -n "$1" ]; do
-    opt="$1"
-    optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
-    case "$opt" in
-        --help|-h|-\?)
-            OPTION_HELP=yes
-            ;;
-        --verbose)
-            if [ "$VERBOSE" = "yes" ] ; then
-                VERBOSE2=yes
-            else
-                VERBOSE=yes
-            fi
-            ;;
-        --adb=*)
-            ADB_CMD="$optarg"
-            ;;
-        -*) # unknown options
-            echo "ERROR: Unknown option '$opt', use --help for list of valid ones."
-            exit 1
-        ;;
-        *)  # Simply record parameter
-            if [ -z "$PARAMETERS" ] ; then
-                PARAMETERS="$opt"
-            else
-                PARAMETERS="$PARAMETERS $opt"
-            fi
-            ;;
-    esac
-    shift
-done
-
-if [ "$OPTION_HELP" = "yes" ] ; then
-    echo "Usage: $PROGNAME [options] <test-name>"
-    echo ""
-    echo "Run one C library test on a device/emulator through ADB."
-    echo ""
-    echo "Valid options:"
-    echo ""
-    echo "    --help|-h|-?      Print this help"
-    echo "    --verbose         Enable verbose mode"
-    echo "    --adb=<file>      Specify adb executable for device tests"
-    echo ""
-    exit 0
-fi
-
-if [ -z "$ANDROID_PRODUCT_OUT" ] ; then
-    echo "ERROR: ANDROID_PRODUCT_OUT not defined. Please run the 'lunch' command"
-    exit 1
-fi
-
-if [ ! -f "$ANDROID_PRODUCT_OUT/system.img" ] ; then
-    echo "ERROR: Missing file: $ANDROID_PRODUCT_OUT/system.img"
-    echo "Are you sure you built the proper system image?"
-    exit 1
-fi
-
-EXEC_ROOT_PATH="$ANDROID_PRODUCT_OUT/obj/EXECUTABLES"
-if [ ! -d "$EXEC_ROOT_PATH" ] ; then
-    echo "ERROR: Missing directory: $EXEC_ROOT_PATH"
-    echo "Are you sure you built the proper system image?"
-    exit 1
-fi
-
-if [ -z "$PARAMETERS" ] ; then
-    echo "ERROR: Please specify test name."
-    echo "Must be one of the following:"
-    for FILE in `cd $EXEC_ROOT_PATH && ls -d test_*`; do
-        TEST=`echo "$FILE" | sed -e "s!test_\(.*\)_intermediates!\\1!g"`
-        echo "  $TEST"
-    done
-    exit 1
-fi
-
-TEST="$PARAMETERS"
-# Normalize test name, i.e. remove test_ prefix
-TEST=`echo "$TEST" | sed -e "s!^test_!!g"`
-
-TESTDIR="$EXEC_ROOT_PATH/test_${TEST}_intermediates"
-if [ ! -d "$TESTDIR" ] ; then
-    echo "ERROR: No test by that name: test_$TEST!"
-    exit 1
-fi
-
-TESTNAME="test_$TEST"
-TESTEXE="$TESTDIR/$TESTNAME"
-if [ ! -f "$TESTEXE" ] ; then
-    echo "ERROR: Missing file: $TESTEXE"
-    echo "Are you sure your last test build was complete?"
-    exit 1
-fi
-
-# Run a command in ADB and return 0 in case of success, or 1 otherwise.
-# This is needed because "adb shell" does not return the proper status
-# of the launched command.
-#
-# NOTE: You must call set_adb_cmd_log before that to set the location
-#        of the temporary log file that will be used.
-#
-adb_cmd ()
-{
-    local RET
-    if [ -z "$ADB_CMD_LOG" ] ; then
-        dump "INTERNAL ERROR: ADB_CMD_LOG not set!"
-        exit 1
-    fi
-    if [ $VERBOSE = "yes" ] ; then
-        echo "$ADB_CMD shell $@"
-        $ADB_CMD shell $@ "&&" echo OK "||" echo KO | tee $ADB_CMD_LOG
-    else
-        $ADB_CMD shell $@ "&&" echo OK "||" echo KO > $ADB_CMD_LOG
-    fi
-    # Get last line in log, should be OK or KO
-    RET=`tail -n1 $ADB_CMD_LOG`
-    # Get rid of \r at the end of lines
-    RET=`echo "$RET" | sed -e 's![[:cntrl:]]!!g'`
-    [ "$RET" = "OK" ]
-}
-
-set_adb_cmd_log ()
-{
-    ADB_CMD_LOG="$1"
-}
-
-# Returns 0 if a variable containing one or more items separated
-# by spaces contains a given value.
-# $1: variable name (e.g. FOO)
-# $2: value to test
-var_list_contains ()
-{
-    echo `var_value $1` | tr ' ' '\n' | fgrep -q -e "$2"
-}
-
-TMPDIR=/tmp/bionic-tests
-mkdir -p $TMPDIR
-set_adb_cmd_log $TMPDIR/adb.log.txt
-
-DEVICE_TEST_DIR=/data/local/bionic-test
-DEVICE_TEST=$DEVICE_TEST_DIR/$TESTNAME
-adb_cmd mkdir $DEVICE_TEST_DIR
-$ADB_CMD push $TESTEXE $DEVICE_TEST_DIR/
-if [ $? != 0 ] ; then
-    echo "ERROR: Can't push test to device!"
-    exit 1
-fi
-
-adb_cmd chmod 0755 $DEVICE_TEST &&
-adb_cmd $DEVICE_TEST
-RET=$?
-adb_cmd rm -r $DEVICE_TEST_DIR
-
-if [ "$RET" != 0 ] ; then
-    echo "FAIL!"
-else
-    echo "OK!"
-fi
-exit 0