You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by da...@apache.org on 2006/02/13 10:39:28 UTC
svn commit: r377328 - in /webservices/axis2/trunk/c/test/util: test_thread.c
test_thread.h
Author: damitha
Date: Mon Feb 13 01:39:26 2006
New Revision: 377328
URL: http://svn.apache.org/viewcvs?rev=377328&view=rev
Log:
test cases for theads and mutexes
Added:
webservices/axis2/trunk/c/test/util/test_thread.c (with props)
webservices/axis2/trunk/c/test/util/test_thread.h
Added: webservices/axis2/trunk/c/test/util/test_thread.c
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/test/util/test_thread.c?rev=377328&view=auto
==============================================================================
--- webservices/axis2/trunk/c/test/util/test_thread.c (added)
+++ webservices/axis2/trunk/c/test/util/test_thread.c Mon Feb 13 01:39:26 2006
@@ -0,0 +1,264 @@
+/*
+ * Copyright 2004,2005 The Apache Software Foundation.
+ *
+ * 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.
+ */
+
+
+#include <stdio.h>
+#include <axis2_error_default.h>
+#include <axis2_log.h>
+#include <axis2_log_default.h>
+#include <axis2_allocator.h>
+#include <axis2.h>
+#include <axis2_thread_mutex.h>
+#include "test_thread.h"
+
+
+static axis2_thread_mutex_t *thread_lock = NULL;
+static axis2_thread_once_t *control = NULL;
+static int x = 0;
+static int value = 0;
+
+static axis2_thread_t *t1 = NULL;
+static axis2_thread_t *t2 = NULL;
+
+/*for detach tests*/
+static axis2_thread_t *t3 = NULL;
+static axis2_thread_t *t4 = NULL;
+
+static void init_func(void)
+{
+ value++;
+}
+
+static void thread_init(axis2_env_t *env)
+{
+ axis2_allocator_t *allocator = NULL;
+ axis2_status_t rv;
+
+
+ allocator = env->allocator;
+
+ rv = axis2_thread_once_init(&control, allocator);
+
+ if (AXIS2_SUCCESS == rv) printf("success - thread_init - axis2_thread_once_init \n");
+ else printf("failure - thread_init - axis2_thread_once_init \n");
+
+ thread_lock = axis2_thread_mutex_create(allocator, AXIS2_THREAD_MUTEX_UNNESTED);
+
+ if (NULL != thread_lock) printf("success - thread_init - axis2_thread_mutex_create \n");
+ else printf("failure - thread_init - axis2_thread_mutex_create \n");
+}
+
+void * AXIS2_CALL test_function(axis2_thread_t *td,void *param)
+{
+ int i;
+ i = *((int*)param);
+ printf("thread data = %d \n",i);
+
+ axis2_thread_once(control, init_func);
+
+ axis2_thread_mutex_lock(thread_lock);
+ printf ("x = %d \n",++x);
+ axis2_thread_mutex_unlock(thread_lock);
+
+ axis2_thread_exit(td);
+
+ return (void*)1;
+}
+
+
+void test_axis2_thread_create(axis2_env_t *env)
+{
+ axis2_status_t rv = AXIS2_FAILURE;
+ axis2_allocator_t *allocator = NULL;
+ int *i = NULL, *j = NULL;
+
+ allocator = env->allocator;
+ i = AXIS2_MALLOC(allocator,sizeof(int));
+ *i = 5;
+ t1 = axis2_thread_create(allocator,NULL,test_function,(void*)i);
+
+ if (t1) printf("success - test_axis2_thread_create - axis2_thread_create \n");
+ else printf("failure - test_axis2_thread_create - axis2_thread_create \n");
+
+ j = AXIS2_MALLOC(allocator,sizeof(int));
+ *j = 25;
+
+ t2 = axis2_thread_create(allocator,NULL,test_function,(void*)j);
+
+ if (t2) printf("success - test_axis2_thread_create - axis2_thread_create \n");
+ else printf("failure - test_axis2_thread_create - axis2_thread_create \n");
+
+
+ rv = axis2_thread_join(t1);
+
+ if (AXIS2_SUCCESS == rv) printf("success - test_axis2_thread_create - axis2_thread_join \n");
+ else printf("failure - thread_init - test_axis2_thread_create - axis2_thread_join \n");
+
+ rv = axis2_thread_join(t2);
+
+ if (AXIS2_SUCCESS == rv) printf("success - test_axis2_thread_create - axis2_thread_join \n");
+ else printf("failure - thread_init - test_axis2_thread_create - axis2_thread_join \n");
+
+}
+
+void * AXIS2_CALL test_function2(axis2_thread_t *td,void *param)
+{
+ printf("thread \n");
+ axis2_thread_exit(td);
+
+ return (void*)1;
+}
+
+void test_axis2_thread_detach(axis2_env_t *env)
+{
+ axis2_threadattr_t *attr = NULL;
+ axis2_allocator_t *allocator = NULL;
+ axis2_status_t rv = AXIS2_FAILURE;
+
+ allocator = env->allocator;
+ attr = axis2_threadattr_create(allocator);
+ if (!attr)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+ rv = axis2_threadattr_detach_set(attr,1);
+
+ if (AXIS2_SUCCESS != rv)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+ t3 = axis2_thread_create(allocator,attr,test_function2,NULL);
+
+ if (!t3)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+
+ /*
+ * thread is already detached - should return AXIS2_FAILURE
+ */
+ rv = axis2_thread_detach(t3);
+
+ if (AXIS2_FAILURE != rv)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+
+ /*
+ * thread is already detached - should return AXIS2_FAILURE
+ * cannot join detached threads
+ */
+ rv = axis2_thread_join(t3);
+ if (AXIS2_FAILURE != rv)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+ printf("success - test_axis2_thread_detach\n");
+}
+
+void test_axis2_thread_detach2(axis2_env_t *env)
+{
+ axis2_threadattr_t *attr = NULL;
+ axis2_allocator_t *allocator = NULL;
+ axis2_status_t rv = AXIS2_FAILURE;
+
+ allocator = env->allocator;
+ attr = axis2_threadattr_create(allocator);
+ if (!attr)
+ {
+ printf("failure - test_axis2_thread_detach2\n");
+ return;
+ }
+
+ t4 = axis2_thread_create(allocator,attr,test_function2,NULL);
+
+ if (!t4)
+ {
+ printf("failure - test_axis2_thread_detach2\n");
+ return;
+ }
+
+ /*
+ * thread is not detached yet - should return AXIS2_SUCCESS
+ */
+ rv = axis2_thread_detach(t4);
+
+ if (AXIS2_SUCCESS != rv)
+ {
+ printf("failure - test_axis2_thread_detach\n");
+ return;
+ }
+
+ /*
+ * thread is already detached - should return AXIS2_FAILURE
+ * cannot join detached threads
+ */
+ rv = axis2_thread_join(t4);
+ if (AXIS2_FAILURE != rv)
+ {
+ printf("failure - test_axis2_thread_detach2\n");
+ return;
+ }
+ printf("success - test_axis2_thread_detach2\n");
+}
+
+static void check_locks()
+{
+ if (2 == x) printf ("success - check_locks \n");
+ else printf ("failure - check_locks \n");
+
+}
+
+static void check_thread_once()
+{
+ if (1 == value) printf ("success - check_thread_once \n");
+ else printf ("failure - check_thread_once \n");
+}
+
+void run_test_thread(axis2_env_t *env)
+{
+ thread_init(env);
+ test_axis2_thread_create(env);
+ check_locks();
+ check_thread_once();
+ test_axis2_thread_detach(env);
+ test_axis2_thread_detach2(env);
+
+#if defined (WIN32)
+ Sleep(1000);/*to give time for detached threads to execute*/
+#else
+ sleep(1);
+#endif
+
+ axis2_thread_mutex_destroy(thread_lock);
+}
+/*
+int main (void)
+{
+ axis2_env_t *env = create_env_with_error_log();
+
+ if (!env)
+ return -1;
+ run_test_thread(env);
+
+ return 0;
+}
+*/
Propchange: webservices/axis2/trunk/c/test/util/test_thread.c
------------------------------------------------------------------------------
svn:executable = *
Added: webservices/axis2/trunk/c/test/util/test_thread.h
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/c/test/util/test_thread.h?rev=377328&view=auto
==============================================================================
--- webservices/axis2/trunk/c/test/util/test_thread.h (added)
+++ webservices/axis2/trunk/c/test/util/test_thread.h Mon Feb 13 01:39:26 2006
@@ -0,0 +1,20 @@
+#ifndef TEST_LOG_H
+#define TEST_LOG_H
+
+#include <axis2_env.h>
+#include <axis2_thread.h>
+
+
+static void init_func(void);
+static void thread_init(axis2_env_t *env);
+void * AXIS2_CALL test_function(axis2_thread_t *td,void *param);
+void test_axis2_thread_create(axis2_env_t *env);
+void * AXIS2_CALL test_function2(axis2_thread_t *td,void *param);
+void test_axis2_thread_detach(axis2_env_t *env);
+void test_axis2_thread_detach2(axis2_env_t *env);
+static void check_locks();
+/*call this method from main*/
+void run_test_thread(axis2_env_t *env);
+
+#endif
+