xref: /aosp_15_r20/libnativehelper/tests/libnativehelper_lazy_test.cpp (revision 0797b24ee566c78eb48500180cb4bf71f81c8aab)
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