1*0797b24eSAndroid Build Coastguard Worker /*
2*0797b24eSAndroid Build Coastguard Worker * Copyright (C) 2021 The Android Open Source Project
3*0797b24eSAndroid Build Coastguard Worker *
4*0797b24eSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*0797b24eSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*0797b24eSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*0797b24eSAndroid Build Coastguard Worker *
8*0797b24eSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0
9*0797b24eSAndroid Build Coastguard Worker *
10*0797b24eSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*0797b24eSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*0797b24eSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*0797b24eSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*0797b24eSAndroid Build Coastguard Worker * limitations under the License.
15*0797b24eSAndroid Build Coastguard Worker */
16*0797b24eSAndroid Build Coastguard Worker
17*0797b24eSAndroid Build Coastguard Worker #include "../libnativehelper_lazy.h"
18*0797b24eSAndroid Build Coastguard Worker
19*0797b24eSAndroid Build Coastguard Worker #include <gtest/gtest.h>
20*0797b24eSAndroid Build Coastguard Worker #include "jni.h"
21*0797b24eSAndroid Build Coastguard Worker
22*0797b24eSAndroid Build Coastguard Worker #include "nativehelper/JniInvocation.h"
23*0797b24eSAndroid Build Coastguard Worker #include "nativehelper/JNIHelp.h"
24*0797b24eSAndroid Build Coastguard Worker #include "nativehelper/JNIPlatformHelp.h"
25*0797b24eSAndroid Build Coastguard Worker
26*0797b24eSAndroid Build Coastguard Worker // The tests here are just for the case when libnativehelper.so cannot be loaded by
27*0797b24eSAndroid Build Coastguard Worker // libnativehelper_lazy.
28*0797b24eSAndroid Build Coastguard Worker class LibnativehelperLazyTest : public ::testing::Test {
29*0797b24eSAndroid Build Coastguard Worker protected:
SetUp()30*0797b24eSAndroid Build Coastguard Worker virtual void SetUp() {
31*0797b24eSAndroid Build Coastguard Worker ::testing::Test::SetUp();
32*0797b24eSAndroid Build Coastguard Worker PreventLibnativehelperLazyLoadingForTests();
33*0797b24eSAndroid Build Coastguard Worker }
34*0797b24eSAndroid Build Coastguard Worker };
35*0797b24eSAndroid Build Coastguard Worker
36*0797b24eSAndroid Build Coastguard Worker static const char* kLoadFailed = "Failed to load libnativehelper.so";
37*0797b24eSAndroid Build Coastguard Worker
TEST_F(LibnativehelperLazyTest,NoLibnativehelperIsForJNIPlatformHelp)38*0797b24eSAndroid Build Coastguard Worker TEST_F(LibnativehelperLazyTest, NoLibnativehelperIsForJNIPlatformHelp) {
39*0797b24eSAndroid Build Coastguard Worker C_JNIEnv* env = NULL;
40*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(jniGetNioBufferBaseArray(env, NULL), kLoadFailed);
41*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(jniGetNioBufferBaseArrayOffset(env, NULL), kLoadFailed);
42*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(jniGetNioBufferFields(env, NULL, NULL, NULL, NULL), kLoadFailed);
43*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(jniGetNioBufferPointer(env, NULL), kLoadFailed);
44*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(jniUninitializeConstants(), kLoadFailed);
45*0797b24eSAndroid Build Coastguard Worker }
46*0797b24eSAndroid Build Coastguard Worker
TEST_F(LibnativehelperLazyTest,NoLibnativehelperIsForJniInvocation)47*0797b24eSAndroid Build Coastguard Worker TEST_F(LibnativehelperLazyTest, NoLibnativehelperIsForJniInvocation) {
48*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JniInvocationCreate(), kLoadFailed);
49*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JniInvocationDestroy(NULL), kLoadFailed);
50*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JniInvocationGetLibrary("a", NULL), kLoadFailed);
51*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JniInvocationInit(NULL, "a"), kLoadFailed);
52*0797b24eSAndroid Build Coastguard Worker }
53*0797b24eSAndroid Build Coastguard Worker
TEST_F(LibnativehelperLazyTest,NoLibnativehelperIsForJniApi)54*0797b24eSAndroid Build Coastguard Worker TEST_F(LibnativehelperLazyTest, NoLibnativehelperIsForJniApi) {
55*0797b24eSAndroid Build Coastguard Worker PreventLibnativehelperLazyLoadingForTests();
56*0797b24eSAndroid Build Coastguard Worker
57*0797b24eSAndroid Build Coastguard Worker JavaVM* vm = NULL;
58*0797b24eSAndroid Build Coastguard Worker JNIEnv* env = NULL;
59*0797b24eSAndroid Build Coastguard Worker jsize count = 0;
60*0797b24eSAndroid Build Coastguard Worker
61*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JNI_GetDefaultJavaVMInitArgs(NULL), kLoadFailed);
62*0797b24eSAndroid Build Coastguard Worker EXPECT_DEATH(JNI_CreateJavaVM(&vm, &env, NULL), kLoadFailed);
63*0797b24eSAndroid Build Coastguard Worker EXPECT_EQ(JNI_OK, JNI_GetCreatedJavaVMs(&vm, 1, &count));
64*0797b24eSAndroid Build Coastguard Worker EXPECT_EQ(0, count);
65*0797b24eSAndroid Build Coastguard Worker }
66