998d0baab0
Reviewed-by: jwaters, gli, coleenp, lmesnik
184 lines
4.9 KiB
Plaintext
184 lines
4.9 KiB
Plaintext
Copyright (c) 2003, 2024, Oracle and/or its affiliates. All rights reserved.
|
|
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
|
|
This code is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License version 2 only, as
|
|
published by the Free Software Foundation.
|
|
|
|
This code is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
version 2 for more details (a copy is included in the LICENSE file that
|
|
accompanied this code).
|
|
|
|
You should have received a copy of the GNU General Public License version
|
|
2 along with this work; if not, write to the Free Software Foundation,
|
|
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
|
|
Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
or visit www.oracle.com if you need additional information or have any
|
|
questions.
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
This directory contains source files of testbase_nsk native
|
|
framework, which provides support for native tests.
|
|
|
|
Source files:
|
|
nsk_tools.hpp
|
|
nsk_tools.cpp
|
|
|
|
Naming conventions:
|
|
macroses: NSK_*
|
|
functions: nsk_*
|
|
|
|
Also this directory provides support for running native threads
|
|
in a platform independent manner.
|
|
|
|
Source files:
|
|
native_thread.hpp
|
|
native_thread.cpp
|
|
|
|
Naming conventions:
|
|
functions: THREAD_*
|
|
|
|
The following source files declares a set of functions which
|
|
provides support for lists of various objects
|
|
|
|
Source files:
|
|
nsk_list.hpp
|
|
nsk_list.cpp
|
|
|
|
Naming conventions:
|
|
functions: nsk_list_*
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
nsk_tools.hpp
|
|
|
|
Provides functions and macroses for the most usefull actions:
|
|
|
|
- print error message with arguments
|
|
|
|
NSK_COMPLAINn(format, arg1, ..., argn)
|
|
|
|
- print verbose message with arguments
|
|
|
|
NSK_DISPLAYn(format, arg1, ..., argn)
|
|
|
|
- trace action execution
|
|
|
|
NSK_TRACE(action)
|
|
|
|
- trace action, check result for true/false and print error if required
|
|
|
|
NSK_VERIFY(action)
|
|
NSK_VERIFY_NEGATIVE(action)
|
|
|
|
- set verbose and trace mode of test output
|
|
|
|
void nsk_setVerboseMode(int verbose);
|
|
int nsk_getVerboseMode();
|
|
|
|
void nsk_setTraceMode(int mode);
|
|
int nsk_getTraceMode();
|
|
|
|
- miscelaneous functions for printing messages
|
|
(hidden by above mentioned macroses)
|
|
|
|
Typical example of using the NSK_VERIFY macro
|
|
for accesing JVM native environment:
|
|
|
|
// jvm->GetEnv(jvm, &env, version)
|
|
if (!NSK_VERIFY(
|
|
jvm->GetEnv(&env, JNI_VERSION_1_2) == JNI_OK)) {
|
|
return JNI_ERR;
|
|
}
|
|
|
|
For more specific checks in invocations of JNI and JVMTI functions
|
|
use special macroses defined in share/jni and share/jvmti frameworks.
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
native_thread.hpp
|
|
|
|
Provides platform-independent support for running native threads:
|
|
|
|
- manage native threads
|
|
|
|
void* THREAD_new(PROCEDURE procedure, void* context);
|
|
void* THREAD_start(void* thread);
|
|
void THREAD_waitFor(void* thread);
|
|
void THREAD_sleep(int seconds);
|
|
|
|
- get status of native threads
|
|
|
|
int THREAD_isStarted(void* thread);
|
|
int THREAD_hasFinished(void* thread);
|
|
int THREAD_status(void* thread);
|
|
|
|
---------------------------------------------------------------------------------
|
|
|
|
nsk_list.hpp
|
|
|
|
Provides support for lists of various objects:
|
|
|
|
- managing list
|
|
const void* nsk_list_Create();
|
|
int nsk_list_Destroy(const void *plist);
|
|
|
|
- managing elements
|
|
const void* nsk_list_Add(const void *plist, const void *p);
|
|
int nsk_list_Delete(const void *plist, int ind);
|
|
|
|
- getting element info
|
|
int nsk_list_getCount(const void *plist);
|
|
const void* nsk_list_Get(const void *plist, int ind);
|
|
|
|
Typical example:
|
|
|
|
int TOTAL_COUNT = 10;
|
|
typedef struct recordStruct {
|
|
int field1;
|
|
int field2;
|
|
} record;
|
|
|
|
main() {
|
|
int i;
|
|
record *rec;
|
|
const void *plist;
|
|
|
|
/* creating list */
|
|
plist = nsk_list_create();
|
|
|
|
/* adding new elements */
|
|
for (i = 0; i < TOTAL_COUNT; i ++) {
|
|
rec = (record *)malloc(sizeof(record));
|
|
rec->field1 = i;
|
|
rec->field2 = i * 10;
|
|
if (!nsk_list_add(plist, rec)) {
|
|
free((void *)rec);
|
|
}
|
|
}
|
|
|
|
/* getting elements */
|
|
for (i = 0; i < TOTAL_COUNT; i ++) {
|
|
rec = (record *)nsk_list_get(plist, i);
|
|
printf("%3d %3d\n", rec->field1, rec->field2);
|
|
}
|
|
|
|
/* deleteing elements */
|
|
for (i = 0; i < TOTAL_COUNT; i ++) {
|
|
rec = (record *)nsk_list_get(plist, i);
|
|
free(rec);
|
|
nsk_list_remove(plist, 0);
|
|
}
|
|
|
|
/* destroying list */
|
|
nsk_list_destroy(plist);
|
|
|
|
}
|
|
|
|
---------------------------------------------------------------------------------
|
|
|