diff options
author | 2019-10-09 13:29:16 +0100 | |
---|---|---|
committer | 2019-10-11 09:57:02 +0000 | |
commit | 9b16e344b246096d228dd4b41ff711884bcfcb3e (patch) | |
tree | ff93f416fcc59fb831202e80b5fb8c8ede99d500 /libnativebridge/tests/PreInitializeNativeBridge_test.cpp | |
parent | e828ea0553b3106598071239e8215fca63b15c9b (diff) |
Move libnative{bridge,loader} to art/
This change moves system/core/libnative{bridge,loader} under art/.
Bug: 137364733
Test: m
Change-Id: I9be7333d00fcd3f36cd80520e50a30ea840187ad
Diffstat (limited to 'libnativebridge/tests/PreInitializeNativeBridge_test.cpp')
-rw-r--r-- | libnativebridge/tests/PreInitializeNativeBridge_test.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/libnativebridge/tests/PreInitializeNativeBridge_test.cpp b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp new file mode 100644 index 0000000000..cd5a8e24bb --- /dev/null +++ b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2014 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. + */ + +#include <dlfcn.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <sys/mount.h> +#include <sys/stat.h> + +#include <cstdio> +#include <cstring> + +#include <android/log.h> + +#include "NativeBridgeTest.h" + +namespace android { + +TEST_F(NativeBridgeTest, PreInitializeNativeBridge) { + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); +#if !defined(__APPLE__) // Mac OS does not support bind-mount. +#if !defined(__ANDROID__) // Cannot write into the hard-wired location. + static constexpr const char* kTestData = "PreInitializeNativeBridge test."; + + // Try to create our mount namespace. + if (unshare(CLONE_NEWNS) != -1) { + // Create a dummy file. + FILE* cpuinfo = fopen("./cpuinfo", "w"); + ASSERT_NE(nullptr, cpuinfo) << strerror(errno); + fprintf(cpuinfo, kTestData); + fclose(cpuinfo); + + ASSERT_TRUE(PreInitializeNativeBridge("does not matter 1", "short 2")); + + // Read /proc/cpuinfo + FILE* proc_cpuinfo = fopen("/proc/cpuinfo", "r"); + ASSERT_NE(nullptr, proc_cpuinfo) << strerror(errno); + char buf[1024]; + EXPECT_NE(nullptr, fgets(buf, sizeof(buf), proc_cpuinfo)) << "Error reading."; + fclose(proc_cpuinfo); + + EXPECT_EQ(0, strcmp(buf, kTestData)); + + // Delete the file. + ASSERT_EQ(0, unlink("./cpuinfo")) << "Error unlinking temporary file."; + // Ending the test will tear down the mount namespace. + } else { + GTEST_LOG_(WARNING) << "Could not create mount namespace. Are you running this as root?"; + } +#endif +#endif +} + +} // namespace android |