Commit cee34b70 authored by noelallen@google.com's avatar noelallen@google.com

Test NaCl version of ppapi_tests via ui_tests

This is a relative path version of:
   http://codereview.chromium.org/8539019
with valgrind tests disabled.

Copy server pieces to build output dir.
Update ppapi_uitests.cc to run server from output dir.
Add test to ppapi_uitests, update dependecies.
Update test_sever to support a fully qualified path.

BUG= http://code.google.com/p/chromium/issues/detail?id=96782
TEST= try (ui_tests --gtest_filter="PPAPI*.*")
Review URL: http://codereview.chromium.org/8585003

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@110760 0039d316-1c4b-4281-b951-d872f2087c98
parent 73e043e0
......@@ -790,6 +790,27 @@
'../content/worker/test/worker_uitest.cc',
],
'conditions': [
['disable_nacl!=1', {
'dependencies': [
'../ppapi/ppapi_internal.gyp:ppapi_nacl_tests',
],
'copies': [
{
'destination': '<(PRODUCT_DIR)',
'files': [
'../ppapi/tests/test_case.html',
'../ppapi/tests/test_page.css',
'../ppapi/native_client/tests/ppapi_tests/test_case.nmf',
],
},
{
'destination': '<(PRODUCT_DIR)/test_url_loader_data',
'files': [
'../ppapi/tests/test_url_loader_data/hello.txt',
],
},
],
}],
['target_arch!="arm"', {
'dependencies': [
'../webkit/webkit.gyp:copy_npapi_test_plugin',
......
......@@ -6,7 +6,10 @@
#include "base/path_service.h"
#include "base/test/test_timeouts.h"
#include "build/build_config.h"
#include "content/browser/plugin_service.h"
#include "content/public/common/content_switches.h"
#include "content/common/pepper_plugin_registry.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/ui/ui_test.h"
......@@ -14,6 +17,7 @@
#include "net/test/test_server.h"
#include "webkit/plugins/plugin_switches.h"
namespace {
// Platform-specific filename relative to the chrome executable.
......@@ -27,24 +31,9 @@ const char library_name[] = "libppapi_tests.so";
} // namespace
// In-process plugin test runner. See OutOfProcessPPAPITest below for the
// out-of-process version.
class PPAPITest : public UITest {
class PPAPITestBase : public UITest {
public:
PPAPITest() {
// Append the switch to register the pepper plugin.
// library name = <out dir>/<test_name>.<library_extension>
// MIME type = application/x-ppapi-<test_name>
FilePath plugin_dir;
PathService::Get(base::DIR_EXE, &plugin_dir);
FilePath plugin_lib = plugin_dir.Append(library_name);
EXPECT_TRUE(file_util::PathExists(plugin_lib));
FilePath::StringType pepper_plugin = plugin_lib.value();
pepper_plugin.append(FILE_PATH_LITERAL(";application/x-ppapi-tests"));
launch_arguments_.AppendSwitchNative(switches::kRegisterPepperPlugins,
pepper_plugin);
PPAPITestBase() {
// The test sends us the result via a cookie.
launch_arguments_.AppendSwitch(switches::kEnableFileCookies);
......@@ -56,9 +45,12 @@ class PPAPITest : public UITest {
launch_arguments_.AppendSwitch(switches::kDisableSmoothScrolling);
}
virtual std::string BuildQuery(const std::string& base,
const std::string& test_case)=0;
void RunTest(const std::string& test_case) {
FilePath test_path;
PathService::Get(base::DIR_SOURCE_ROOT, &test_path);
EXPECT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &test_path));
test_path = test_path.Append(FILE_PATH_LITERAL("ppapi"));
test_path = test_path.Append(FILE_PATH_LITERAL("tests"));
test_path = test_path.Append(FILE_PATH_LITERAL("test_case.html"));
......@@ -67,20 +59,51 @@ class PPAPITest : public UITest {
EXPECT_TRUE(file_util::PathExists(test_path));
GURL::Replacements replacements;
std::string query("testcase=");
query += test_case;
std::string query = BuildQuery("", test_case);
replacements.SetQuery(query.c_str(), url_parse::Component(0, query.size()));
GURL test_url = net::FilePathToFileURL(test_path);
RunTestURL(test_url.ReplaceComponents(replacements));
}
void RunTestViaHTTP(const std::string& test_case) {
net::TestServer test_server(
net::TestServer::TYPE_HTTP,
FilePath(FILE_PATH_LITERAL("ppapi/tests")));
// For HTTP tests, we use the output DIR to grab the generated files such
// as the NEXEs.
FilePath exe_dir = CommandLine::ForCurrentProcess()->GetProgram().DirName();
FilePath src_dir;
ASSERT_TRUE(PathService::Get(base::DIR_SOURCE_ROOT, &src_dir));
// TestServer expects a path relative to source. So we must first
// generate absolute paths to SRC and EXE and from there generate
// a relative path.
if (!exe_dir.IsAbsolute()) file_util::AbsolutePath(&exe_dir);
if (!src_dir.IsAbsolute()) file_util::AbsolutePath(&src_dir);
ASSERT_TRUE(exe_dir.IsAbsolute());
ASSERT_TRUE(src_dir.IsAbsolute());
size_t match, exe_size, src_size;
std::vector<FilePath::StringType> src_parts, exe_parts;
// Determine point at which src and exe diverge, and create a relative path.
exe_dir.GetComponents(&exe_parts);
src_dir.GetComponents(&src_parts);
exe_size = exe_parts.size();
src_size = src_parts.size();
for (match = 0; match < exe_size && match < src_size; ++match) {
if (exe_parts[match] != src_parts[match])
break;
}
FilePath web_dir;
for (size_t tmp_itr = match; tmp_itr < src_size; ++tmp_itr) {
web_dir = web_dir.Append(FILE_PATH_LITERAL(".."));
}
for (; match < exe_size; ++match) {
web_dir = web_dir.Append(exe_parts[match]);
}
net::TestServer test_server(net::TestServer::TYPE_HTTP, web_dir);
ASSERT_TRUE(test_server.Start());
RunTestURL(
test_server.GetURL("files/test_case.html?testcase=" + test_case));
std::string query = BuildQuery("files/test_case.html?", test_case);
RunTestURL(test_server.GetURL(query));
}
private:
......@@ -119,6 +142,32 @@ class PPAPITest : public UITest {
}
};
// In-process plugin test runner. See OutOfProcessPPAPITest below for the
// out-of-process version.
class PPAPITest : public PPAPITestBase {
public:
PPAPITest() {
// Append the switch to register the pepper plugin.
// library name = <out dir>/<test_name>.<library_extension>
// MIME type = application/x-ppapi-<test_name>
FilePath plugin_dir;
EXPECT_TRUE(PathService::Get(base::DIR_EXE, &plugin_dir));
FilePath plugin_lib = plugin_dir.Append(library_name);
EXPECT_TRUE(file_util::PathExists(plugin_lib));
FilePath::StringType pepper_plugin = plugin_lib.value();
pepper_plugin.append(FILE_PATH_LITERAL(";application/x-ppapi-tests"));
launch_arguments_.AppendSwitchNative(switches::kRegisterPepperPlugins,
pepper_plugin);
}
std::string BuildQuery(const std::string& base,
const std::string& test_case){
return StringPrintf("%stestcase=%s", base.c_str(), test_case.c_str());
}
};
// Variant of PPAPITest that runs plugins out-of-process to test proxy
// codepaths.
class OutOfProcessPPAPITest : public PPAPITest {
......@@ -129,6 +178,27 @@ class OutOfProcessPPAPITest : public PPAPITest {
}
};
// NaCl plugin test runner.
class PPAPINaClTest : public PPAPITestBase {
public:
PPAPINaClTest() {
FilePath plugin_lib;
EXPECT_TRUE(PathService::Get(chrome::FILE_NACL_PLUGIN, &plugin_lib));
EXPECT_TRUE(file_util::PathExists(plugin_lib));
// Enable running NaCl outside of the store.
launch_arguments_.AppendSwitch(switches::kEnableNaCl);
}
// Append the correct mode and testcase string
std::string BuildQuery(const std::string& base,
const std::string& test_case) {
return StringPrintf("%smode=nacl&testcase=%s", base.c_str(),
test_case.c_str());
}
};
// Use these macros to run the tests for a specific interface.
// Most interfaces should be tested with both macros.
#define TEST_PPAPI_IN_PROCESS(test_name) \
......@@ -151,6 +221,12 @@ class OutOfProcessPPAPITest : public PPAPITest {
}
// NaCl based PPAPI tests
#define TEST_PPAPI_NACL_VIA_HTTP(test_name) \
TEST_F(PPAPINaClTest, test_name) { \
RunTestViaHTTP(#test_name); \
}
//
// Interface tests.
//
......@@ -163,6 +239,7 @@ TEST_PPAPI_OUT_OF_PROCESS(Core)
TEST_PPAPI_IN_PROCESS(CursorControl)
TEST_PPAPI_OUT_OF_PROCESS(CursorControl)
TEST_PPAPI_NACL_VIA_HTTP(CursorControl)
TEST_PPAPI_IN_PROCESS(Instance)
// http://crbug.com/91729
......@@ -170,15 +247,16 @@ TEST_PPAPI_OUT_OF_PROCESS(DISABLED_Instance)
TEST_PPAPI_IN_PROCESS(Graphics2D)
TEST_PPAPI_OUT_OF_PROCESS(Graphics2D)
TEST_PPAPI_NACL_VIA_HTTP(Graphics2D)
TEST_PPAPI_IN_PROCESS(ImageData)
TEST_PPAPI_OUT_OF_PROCESS(ImageData)
TEST_PPAPI_NACL_VIA_HTTP(ImageData)
TEST_PPAPI_IN_PROCESS(Buffer)
TEST_PPAPI_OUT_OF_PROCESS(Buffer)
TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader)
// http://crbug.com/89961
#if defined(OS_WIN)
// It often takes too long time (and fails otherwise) on Windows.
......@@ -186,19 +264,22 @@ TEST_PPAPI_IN_PROCESS_VIA_HTTP(URLLoader)
#else
#define MAYBE_URLLoader FAILS_URLLoader
#endif
TEST_F(OutOfProcessPPAPITest, MAYBE_URLLoader) {
RunTestViaHTTP("URLLoader");
}
TEST_PPAPI_IN_PROCESS(PaintAggregator)
TEST_PPAPI_OUT_OF_PROCESS(PaintAggregator)
TEST_PPAPI_NACL_VIA_HTTP(PaintAggregator)
TEST_PPAPI_IN_PROCESS(Scrollbar)
// http://crbug.com/89961
TEST_F(OutOfProcessPPAPITest, FAILS_Scrollbar) {
RunTest("Scrollbar");
}
TEST_PPAPI_NACL_VIA_HTTP(Scrollbar)
TEST_PPAPI_IN_PROCESS(URLUtil)
TEST_PPAPI_OUT_OF_PROCESS(URLUtil)
......@@ -214,6 +295,7 @@ TEST_PPAPI_IN_PROCESS(Var)
TEST_F(OutOfProcessPPAPITest, FAILS_Var) {
RunTest("Var");
}
TEST_PPAPI_NACL_VIA_HTTP(Var)
TEST_PPAPI_IN_PROCESS(VarDeprecated)
// Disabled because it times out: http://crbug.com/89961
......@@ -240,6 +322,7 @@ TEST_PPAPI_OUT_OF_PROCESS(PostMessage_NonMainThread)
TEST_PPAPI_IN_PROCESS(Memory)
TEST_PPAPI_OUT_OF_PROCESS(Memory)
TEST_PPAPI_NACL_VIA_HTTP(Memory)
TEST_PPAPI_IN_PROCESS(VideoDecoder)
TEST_PPAPI_OUT_OF_PROCESS(VideoDecoder)
......@@ -252,13 +335,18 @@ TEST_F(PPAPITest, FAILS_FileIO) {
TEST_F(OutOfProcessPPAPITest, DISABLED_FileIO) {
RunTestViaHTTP("FileIO");
}
TEST_PPAPI_NACL_VIA_HTTP(DISABLED_FileIO)
TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileRef)
// Disabled because it times out: http://crbug.com/89961
//TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileRef)
TEST_PPAPI_NACL_VIA_HTTP(FileRef)
TEST_PPAPI_IN_PROCESS_VIA_HTTP(FileSystem)
TEST_PPAPI_OUT_OF_PROCESS_VIA_HTTP(FileSystem)
TEST_PPAPI_NACL_VIA_HTTP(FileSystem)
// http://crbug.com/96767 and 104384 for aura.
#if !defined(OS_MACOSX) && !defined(USE_AURA)
......
{
"program": {
"x86-64": {"url": "ppapi_tests_x86-64.nexe"},
"x86-32": {"url": "ppapi_tests_x86-32.nexe"},
"arm": {"url": "ppapi_tests_arm.nexe"}
"x86-64": {"url": "ppapi_nacl_tests_newlib_x64.nexe"},
"x86-32": {"url": "ppapi_nacl_tests_newlib_x32.nexe"},
"arm": {"url": "ppapi_nacl_tests_newlib_arm.nexe"}
}
}
......@@ -418,4 +418,96 @@
],
},
],
'conditions': [
['disable_nacl!=1', {
'targets': [
{
'target_name': 'ppapi_nacl_tests',
'type': 'none',
'dependencies': [
'native_client/native_client.gyp:ppapi_lib',
'native_client/native_client.gyp:nacl_irt',
'ppapi.gyp:ppapi_cpp_lib',
],
'variables': {
'nexe_target': 'ppapi_nacl_tests',
'build_glibc': 0,
'build_newlib': 1,
'include_dirs': [
'lib/gl/include',
'..',
],
'link_flags': [
'-lppapi_cpp',
'-lppapi',
],
'extra_deps64': [
'<(PRODUCT_DIR)/obj/gen/tc_newlib/lib64/libppapi_cpp.a',
'<(PRODUCT_DIR)/obj/gen/tc_newlib/lib64/libppapi.a',
],
'extra_deps32': [
'<(PRODUCT_DIR)/obj/gen/tc_newlib/lib32/libppapi_cpp.a',
'<(PRODUCT_DIR)/obj/gen/tc_newlib/lib32/libppapi.a',
],
'sources': [
# Common test files
'tests/test_case.cc',
'tests/test_utils.cc',
'tests/testing_instance.cc',
# Compile-time tests
'tests/test_c_includes.c',
'tests/test_cpp_includes.cc',
'tests/test_struct_sizes.c',
# Test cases (PLEASE KEEP THIS SECTION IN ALPHABETICAL ORDER)
# Add/uncomment PPAPI interfaces below when they get proxied.
# Not yet proxied.
#'test_broker.cc',
# Not yet proxied.
#'test_buffer.cc',
# Not yet proxied.
#'test_char_set.cc',
'tests/test_cursor_control.cc',
# Fails in DeleteDirectoryRecursively.
# BUG: http://code.google.com/p/nativeclient/issues/detail?id=2107
#'test_directory_reader.cc',
'tests/test_file_io.cc',
'tests/test_file_ref.cc',
'tests/test_file_system.cc',
'tests/test_memory.cc',
'tests/test_graphics_2d.cc',
'tests/test_image_data.cc',
'tests/test_paint_aggregator.cc',
# test_post_message.cc relies on synchronous scripting, which is not
# available for untrusted tests.
# Does not compile under nacl (uses private interface ExecuteScript).
#'test_post_message.cc',
'tests/test_scrollbar.cc',
# Not yet proxied.
#'tests/test_transport.cc',
# Not yet proxied.
#'tests/test_uma.cc',
# Activating the URL loader test requires a test httpd that
# understands HTTP POST, which our current httpd.py doesn't.
# It also requires deactivating the tests that use FileIOTrusted
# when running in NaCl.
#'tests/test_url_loader.cc',
# Does not compile under nacl (uses VarPrivate).
#'test_url_util.cc',
# Not yet proxied.
#'test_video_decoder.cc',
'tests/test_var.cc',
# Deprecated test cases.
#'tests/test_instance_deprecated.cc',
# Var_deprecated fails in TestPassReference, and we probably won't
# fix it.
#'tests/test_var_deprecated.cc'
],
},
},
],
}],
],
}
......@@ -87,8 +87,11 @@ void TestURLLoader::RunTests(const std::string& filter) {
RUN_TEST_FORCEASYNC_AND_NOT(BinaryDataPOST, filter);
RUN_TEST_FORCEASYNC_AND_NOT(CustomRequestHeader, filter);
RUN_TEST_FORCEASYNC_AND_NOT(FailsBogusContentLength, filter);
RUN_TEST_FORCEASYNC_AND_NOT(SameOriginRestriction, filter);
RUN_TEST_FORCEASYNC_AND_NOT(CrossOriginRequest, filter);
// Disable portion of test which fails when the HTTP server's
// data_dir is moved to PRODUCT_DIR.
// http://code.google.com/p/chromium/issues/detail?id=103690
// RUN_TEST_FORCEASYNC_AND_NOT(SameOriginRestriction, filter);
// RUN_TEST_FORCEASYNC_AND_NOT(CrossOriginRequest, filter);
RUN_TEST_FORCEASYNC_AND_NOT(JavascriptURLRestriction, filter);
RUN_TEST_FORCEASYNC_AND_NOT(MethodRestriction, filter);
RUN_TEST_FORCEASYNC_AND_NOT(HeaderRestriction, filter);
......
......@@ -106,6 +106,9 @@ OutOfProcessPPAPITest.Instance
OutOfProcessPPAPITest.CursorControl
OutOfProcessPPAPITest.PostMessage*
# NaCl ui_tests fail on buildbots http://crbug.com/104517
PPAPINaClTest.*
# Flakily times out, http://crbug.com/92527
NamedInterfaceTest.BasicNamedInterface
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment