diff options
Diffstat (limited to 'libnativebridge/tests')
-rw-r--r-- | libnativebridge/tests/Android.mk | 46 | ||||
-rw-r--r-- | libnativebridge/tests/Android.nativebridge-dummy.mk | 34 | ||||
-rw-r--r-- | libnativebridge/tests/CodeCacheCreate_test.cpp | 51 | ||||
-rw-r--r-- | libnativebridge/tests/CodeCacheExists_test.cpp | 54 | ||||
-rw-r--r-- | libnativebridge/tests/CompleteFlow_test.cpp | 46 | ||||
-rw-r--r-- | libnativebridge/tests/DummyNativeBridge.cpp | 53 | ||||
-rw-r--r-- | libnativebridge/tests/InvalidCharsNativeBridge_test.cpp | 40 | ||||
-rw-r--r-- | libnativebridge/tests/NativeBridgeTest.h | 36 | ||||
-rw-r--r-- | libnativebridge/tests/NeedsNativeBridge_test.cpp | 48 | ||||
-rw-r--r-- | libnativebridge/tests/PreInitializeNativeBridgeFail1_test.cpp | 38 | ||||
-rw-r--r-- | libnativebridge/tests/PreInitializeNativeBridgeFail2_test.cpp | 37 | ||||
-rw-r--r-- | libnativebridge/tests/PreInitializeNativeBridge_test.cpp | 66 | ||||
-rw-r--r-- | libnativebridge/tests/ReSetupNativeBridge_test.cpp | 30 | ||||
-rw-r--r-- | libnativebridge/tests/UnavailableNativeBridge_test.cpp | 29 | ||||
-rw-r--r-- | libnativebridge/tests/ValidNameNativeBridge_test.cpp | 35 |
15 files changed, 643 insertions, 0 deletions
diff --git a/libnativebridge/tests/Android.mk b/libnativebridge/tests/Android.mk new file mode 100644 index 0000000..f28c490 --- /dev/null +++ b/libnativebridge/tests/Android.mk @@ -0,0 +1,46 @@ +# Build the unit tests. +LOCAL_PATH := $(call my-dir) + +include $(LOCAL_PATH)/Android.nativebridge-dummy.mk + +include $(CLEAR_VARS) + +# Build the unit tests. +test_src_files := \ + CodeCacheCreate_test.cpp \ + CodeCacheExists_test.cpp \ + CompleteFlow_test.cpp \ + InvalidCharsNativeBridge_test.cpp \ + NeedsNativeBridge_test.cpp \ + PreInitializeNativeBridge_test.cpp \ + PreInitializeNativeBridgeFail1_test.cpp \ + PreInitializeNativeBridgeFail2_test.cpp \ + ReSetupNativeBridge_test.cpp \ + UnavailableNativeBridge_test.cpp \ + ValidNameNativeBridge_test.cpp + + +shared_libraries := \ + liblog \ + libnativebridge \ + libnativebridge-dummy + +$(foreach file,$(test_src_files), \ + $(eval include $(CLEAR_VARS)) \ + $(eval LOCAL_CLANG := true) \ + $(eval LOCAL_CPPFLAGS := -std=gnu++11) \ + $(eval LOCAL_SHARED_LIBRARIES := $(shared_libraries)) \ + $(eval LOCAL_SRC_FILES := $(file)) \ + $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \ + $(eval include $(BUILD_NATIVE_TEST)) \ +) + +$(foreach file,$(test_src_files), \ + $(eval include $(CLEAR_VARS)) \ + $(eval LOCAL_CLANG := true) \ + $(eval LOCAL_CPPFLAGS := -std=gnu++11) \ + $(eval LOCAL_SHARED_LIBRARIES := $(shared_libraries)) \ + $(eval LOCAL_SRC_FILES := $(file)) \ + $(eval LOCAL_MODULE := $(notdir $(file:%.cpp=%))) \ + $(eval include $(BUILD_HOST_NATIVE_TEST)) \ +) diff --git a/libnativebridge/tests/Android.nativebridge-dummy.mk b/libnativebridge/tests/Android.nativebridge-dummy.mk new file mode 100644 index 0000000..1caf50a --- /dev/null +++ b/libnativebridge/tests/Android.nativebridge-dummy.mk @@ -0,0 +1,34 @@ +LOCAL_PATH:= $(call my-dir) + +NATIVE_BRIDGE_COMMON_SRC_FILES := \ + DummyNativeBridge.cpp + +# Shared library for target +# ======================================================== +include $(CLEAR_VARS) + +LOCAL_MODULE:= libnativebridge-dummy + +LOCAL_SRC_FILES:= $(NATIVE_BRIDGE_COMMON_SRC_FILES) +LOCAL_CLANG := true +LOCAL_CFLAGS += -Werror -Wall +LOCAL_CPPFLAGS := -std=gnu++11 -fvisibility=protected +LOCAL_LDFLAGS := -ldl +LOCAL_MULTILIB := both + +include $(BUILD_SHARED_LIBRARY) + +# Shared library for host +# ======================================================== +include $(CLEAR_VARS) + +LOCAL_MODULE:= libnativebridge-dummy + +LOCAL_SRC_FILES:= $(NATIVE_BRIDGE_COMMON_SRC_FILES) +LOCAL_CLANG := true +LOCAL_CFLAGS += -Werror -Wall +LOCAL_CPPFLAGS := -std=gnu++11 -fvisibility=protected +LOCAL_LDFLAGS := -ldl +LOCAL_MULTILIB := both + +include $(BUILD_HOST_SHARED_LIBRARY) diff --git a/libnativebridge/tests/CodeCacheCreate_test.cpp b/libnativebridge/tests/CodeCacheCreate_test.cpp new file mode 100644 index 0000000..58270c4 --- /dev/null +++ b/libnativebridge/tests/CodeCacheCreate_test.cpp @@ -0,0 +1,51 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <errno.h> +#include <sys/stat.h> +#include <unistd.h> + +namespace android { + +// Tests that the bridge initialization creates the code_cache if it doesn't +// exists. +TEST_F(NativeBridgeTest, CodeCacheCreate) { + // Make sure that code_cache does not exists + struct stat st; + ASSERT_EQ(-1, stat(kCodeCache, &st)); + ASSERT_EQ(ENOENT, errno); + + // Init + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); + ASSERT_TRUE(PreInitializeNativeBridge(".", "isa")); + ASSERT_TRUE(InitializeNativeBridge(nullptr, nullptr)); + ASSERT_TRUE(NativeBridgeAvailable()); + ASSERT_FALSE(NativeBridgeError()); + + // Check that code_cache was created + ASSERT_EQ(0, stat(kCodeCache, &st)); + ASSERT_TRUE(S_ISDIR(st.st_mode)); + + // Clean up + UnloadNativeBridge(); + ASSERT_EQ(0, rmdir(kCodeCache)); + + ASSERT_FALSE(NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/CodeCacheExists_test.cpp b/libnativebridge/tests/CodeCacheExists_test.cpp new file mode 100644 index 0000000..8ba0158 --- /dev/null +++ b/libnativebridge/tests/CodeCacheExists_test.cpp @@ -0,0 +1,54 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <errno.h> +#include <sys/stat.h> +#include <unistd.h> + +namespace android { + +// Tests that the bridge is initialized without errors if the code_cache already +// exists. +TEST_F(NativeBridgeTest, CodeCacheExists) { + // Make sure that code_cache does not exists + struct stat st; + ASSERT_EQ(-1, stat(kCodeCache, &st)); + ASSERT_EQ(ENOENT, errno); + + // Create the code_cache + ASSERT_EQ(0, mkdir(kCodeCache, S_IRWXU | S_IRWXG | S_IXOTH)); + + // Init + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); + ASSERT_TRUE(PreInitializeNativeBridge(".", "isa")); + ASSERT_TRUE(InitializeNativeBridge(nullptr, nullptr)); + ASSERT_TRUE(NativeBridgeAvailable()); + ASSERT_FALSE(NativeBridgeError()); + + // Check that the code cache is still there + ASSERT_EQ(0, stat(kCodeCache, &st)); + ASSERT_TRUE(S_ISDIR(st.st_mode)); + + // Clean up + UnloadNativeBridge(); + ASSERT_EQ(0, rmdir(kCodeCache)); + + ASSERT_FALSE(NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/CompleteFlow_test.cpp b/libnativebridge/tests/CompleteFlow_test.cpp new file mode 100644 index 0000000..cf06d2c --- /dev/null +++ b/libnativebridge/tests/CompleteFlow_test.cpp @@ -0,0 +1,46 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <unistd.h> + +namespace android { + +TEST_F(NativeBridgeTest, CompleteFlow) { + // Init + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); + ASSERT_TRUE(NativeBridgeAvailable()); + ASSERT_TRUE(PreInitializeNativeBridge(".", "isa")); + ASSERT_TRUE(NativeBridgeAvailable()); + ASSERT_TRUE(InitializeNativeBridge(nullptr, nullptr)); + ASSERT_TRUE(NativeBridgeAvailable()); + + // Basic calls to check that nothing crashes + ASSERT_FALSE(NativeBridgeIsSupported(nullptr)); + ASSERT_EQ(nullptr, NativeBridgeLoadLibrary(nullptr, 0)); + ASSERT_EQ(nullptr, NativeBridgeGetTrampoline(nullptr, nullptr, nullptr, 0)); + + // Unload + UnloadNativeBridge(); + ASSERT_FALSE(NativeBridgeAvailable()); + ASSERT_FALSE(NativeBridgeError()); + + // Clean-up code_cache + ASSERT_EQ(0, rmdir(kCodeCache)); +} + +} // namespace android diff --git a/libnativebridge/tests/DummyNativeBridge.cpp b/libnativebridge/tests/DummyNativeBridge.cpp new file mode 100644 index 0000000..b9894f6 --- /dev/null +++ b/libnativebridge/tests/DummyNativeBridge.cpp @@ -0,0 +1,53 @@ +/* + * 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. + */ + +// A dummy implementation of the native-bridge interface. + +#include "nativebridge/native_bridge.h" + +// NativeBridgeCallbacks implementations +extern "C" bool native_bridge_initialize(const android::NativeBridgeRuntimeCallbacks* /* art_cbs */, + const char* /* app_code_cache_dir */, + const char* /* isa */) { + return true; +} + +extern "C" void* native_bridge_loadLibrary(const char* /* libpath */, int /* flag */) { + return nullptr; +} + +extern "C" void* native_bridge_getTrampoline(void* /* handle */, const char* /* name */, + const char* /* shorty */, uint32_t /* len */) { + return nullptr; +} + +extern "C" bool native_bridge_isSupported(const char* /* libpath */) { + return false; +} + +extern "C" const struct android::NativeBridgeRuntimeValues* native_bridge_getAppEnv( + const char* /* abi */) { + return nullptr; +} + +android::NativeBridgeCallbacks NativeBridgeItf { + .version = 1, + .initialize = &native_bridge_initialize, + .loadLibrary = &native_bridge_loadLibrary, + .getTrampoline = &native_bridge_getTrampoline, + .isSupported = &native_bridge_isSupported, + .getAppEnv = &native_bridge_getAppEnv +}; diff --git a/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp b/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp new file mode 100644 index 0000000..8f7973d --- /dev/null +++ b/libnativebridge/tests/InvalidCharsNativeBridge_test.cpp @@ -0,0 +1,40 @@ +/* + * 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 "NativeBridgeTest.h" + +namespace android { + +static const char* kTestName = "../librandom$@-bridge_not.existing.so"; + +TEST_F(NativeBridgeTest, InvalidChars) { + // Do one test actually calling setup. + EXPECT_EQ(false, NativeBridgeError()); + LoadNativeBridge(kTestName, nullptr); + // This should lead to an error for invalid characters. + EXPECT_EQ(true, NativeBridgeError()); + + // Further tests need to use NativeBridgeNameAcceptable, as the error + // state can't be changed back. + EXPECT_EQ(false, NativeBridgeNameAcceptable(".")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("..")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("_")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("-")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("lib@.so")); + EXPECT_EQ(false, NativeBridgeNameAcceptable("lib$.so")); +} + +} // namespace android diff --git a/libnativebridge/tests/NativeBridgeTest.h b/libnativebridge/tests/NativeBridgeTest.h new file mode 100644 index 0000000..6a5c126 --- /dev/null +++ b/libnativebridge/tests/NativeBridgeTest.h @@ -0,0 +1,36 @@ +/* + * 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. + */ + +#ifndef NATIVE_BRIDGE_TEST_H_ +#define NATIVE_BRIDGE_TEST_H_ + +#define LOG_TAG "NativeBridge_test" + +#include <nativebridge/native_bridge.h> +#include <gtest/gtest.h> + +constexpr const char* kNativeBridgeLibrary = "libnativebridge-dummy.so"; +constexpr const char* kCodeCache = "./code_cache"; + +namespace android { + +class NativeBridgeTest : public testing::Test { +}; + +}; // namespace android + +#endif // NATIVE_BRIDGE_H_ + diff --git a/libnativebridge/tests/NeedsNativeBridge_test.cpp b/libnativebridge/tests/NeedsNativeBridge_test.cpp new file mode 100644 index 0000000..e1c0876 --- /dev/null +++ b/libnativebridge/tests/NeedsNativeBridge_test.cpp @@ -0,0 +1,48 @@ +/* + * 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 "NativeBridgeTest.h" + +namespace android { + +static const char* kISAs[] = { "arm", "arm64", "mips", "x86", "x86_64", "random", "64arm", "64_x86", + "64_x86_64", "", "reallylongstringabcd", nullptr }; + +#if defined(__arm__) +static const char* kRuntimeISA = "arm"; +#elif defined(__aarch64__) +static const char* kRuntimeISA = "arm64"; +#elif defined(__mips__) +static const char* kRuntimeISA = "mips"; +#elif defined(__i386__) +static const char* kRuntimeISA = "x86"; +#elif defined(__x86_64__) +static const char* kRuntimeISA = "x86_64"; +#else +static const char* kRuntimeISA = "unknown"; +#endif + +TEST_F(NativeBridgeTest, NeedsNativeBridge) { + EXPECT_EQ(false, NeedsNativeBridge(kRuntimeISA)); + + const size_t kISACount = sizeof(kISAs)/sizeof(kISAs[0]); + for (size_t i = 0; i < kISACount; i++) { + EXPECT_EQ(kISAs[i] == nullptr ? false : strcmp(kISAs[i], kRuntimeISA) != 0, + NeedsNativeBridge(kISAs[i])); + } +} + +} // namespace android diff --git a/libnativebridge/tests/PreInitializeNativeBridgeFail1_test.cpp b/libnativebridge/tests/PreInitializeNativeBridgeFail1_test.cpp new file mode 100644 index 0000000..69c30a1 --- /dev/null +++ b/libnativebridge/tests/PreInitializeNativeBridgeFail1_test.cpp @@ -0,0 +1,38 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <cstdio> +#include <cstring> +#include <cutils/log.h> +#include <dlfcn.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <sys/mount.h> +#include <sys/stat.h> + +namespace android { + +TEST_F(NativeBridgeTest, PreInitializeNativeBridgeFail1) { + // Needs a valid application directory. + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); + ASSERT_FALSE(PreInitializeNativeBridge(nullptr, "isa")); + ASSERT_TRUE(NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/PreInitializeNativeBridgeFail2_test.cpp b/libnativebridge/tests/PreInitializeNativeBridgeFail2_test.cpp new file mode 100644 index 0000000..74e96e0 --- /dev/null +++ b/libnativebridge/tests/PreInitializeNativeBridgeFail2_test.cpp @@ -0,0 +1,37 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <cstdio> +#include <cstring> +#include <cutils/log.h> +#include <dlfcn.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <sys/mount.h> +#include <sys/stat.h> + +namespace android { + +TEST_F(NativeBridgeTest, PreInitializeNativeBridgeFail2) { + // Needs LoadNativeBridge() first + ASSERT_FALSE(PreInitializeNativeBridge(nullptr, "isa")); + ASSERT_TRUE(NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/PreInitializeNativeBridge_test.cpp b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp new file mode 100644 index 0000000..cec26ce --- /dev/null +++ b/libnativebridge/tests/PreInitializeNativeBridge_test.cpp @@ -0,0 +1,66 @@ +/* + * 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 "NativeBridgeTest.h" + +#include <cstdio> +#include <cstring> +#include <cutils/log.h> +#include <dlfcn.h> +#include <errno.h> +#include <fcntl.h> +#include <stdio.h> +#include <sys/mount.h> +#include <sys/stat.h> + +namespace android { + +static constexpr const char* kTestData = "PreInitializeNativeBridge test."; + +TEST_F(NativeBridgeTest, PreInitializeNativeBridge) { + ASSERT_TRUE(LoadNativeBridge(kNativeBridgeLibrary, nullptr)); +#ifndef __APPLE__ // Mac OS does not support bind-mount. +#ifndef HAVE_ANDROID_OS // Cannot write into the hard-wired location. + // 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 diff --git a/libnativebridge/tests/ReSetupNativeBridge_test.cpp b/libnativebridge/tests/ReSetupNativeBridge_test.cpp new file mode 100644 index 0000000..944e5d7 --- /dev/null +++ b/libnativebridge/tests/ReSetupNativeBridge_test.cpp @@ -0,0 +1,30 @@ +/* + * 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 "NativeBridgeTest.h" + +namespace android { + +TEST_F(NativeBridgeTest, ReSetup) { + EXPECT_EQ(false, NativeBridgeError()); + LoadNativeBridge("", nullptr); + EXPECT_EQ(false, NativeBridgeError()); + LoadNativeBridge("", nullptr); + // This should lead to an error for trying to re-setup a native bridge. + EXPECT_EQ(true, NativeBridgeError()); +} + +} // namespace android diff --git a/libnativebridge/tests/UnavailableNativeBridge_test.cpp b/libnativebridge/tests/UnavailableNativeBridge_test.cpp new file mode 100644 index 0000000..ad374a5 --- /dev/null +++ b/libnativebridge/tests/UnavailableNativeBridge_test.cpp @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2011 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 "NativeBridgeTest.h" + +namespace android { + +TEST_F(NativeBridgeTest, NoNativeBridge) { + EXPECT_EQ(false, NativeBridgeAvailable()); + // Try to initialize. This should fail as we are not set up. + EXPECT_EQ(false, InitializeNativeBridge(nullptr, nullptr)); + EXPECT_EQ(true, NativeBridgeError()); + EXPECT_EQ(false, NativeBridgeAvailable()); +} + +} // namespace android diff --git a/libnativebridge/tests/ValidNameNativeBridge_test.cpp b/libnativebridge/tests/ValidNameNativeBridge_test.cpp new file mode 100644 index 0000000..690be4a --- /dev/null +++ b/libnativebridge/tests/ValidNameNativeBridge_test.cpp @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2011 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 <NativeBridgeTest.h> + +namespace android { + +static const char* kTestName = "librandom-bridge_not.existing.so"; + +TEST_F(NativeBridgeTest, ValidName) { + // Check that the name is acceptable. + EXPECT_EQ(true, NativeBridgeNameAcceptable(kTestName)); + + // Now check what happens on LoadNativeBridge. + EXPECT_EQ(false, NativeBridgeError()); + LoadNativeBridge(kTestName, nullptr); + // This will lead to an error as the library doesn't exist. + EXPECT_EQ(true, NativeBridgeError()); + EXPECT_EQ(false, NativeBridgeAvailable()); +} + +} // namespace android |