Home | History | Annotate | Download | only in nacl
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include <stdio.h>
      6 #if defined(OS_POSIX)
      7 #include <unistd.h>
      8 #elif defined(OS_WIN)
      9 #include <windows.h>
     10 #endif
     11 
     12 #define TELEMETRY 1
     13 
     14 #include "base/environment.h"
     15 #include "chrome/test/nacl/nacl_browsertest_util.h"
     16 
     17 namespace {
     18 
     19 #if defined(OS_WIN)
     20 // crbug.com/98721
     21 #  define MAYBE_Crash DISABLED_Crash
     22 #  define MAYBE_SysconfNprocessorsOnln DISABLED_SysconfNprocessorsOnln
     23 #else
     24 #  define MAYBE_Crash Crash
     25 #  define MAYBE_SysconfNprocessorsOnln SysconfNprocessorsOnln
     26 #endif
     27 
     28 NACL_BROWSER_TEST_F(NaClBrowserTest, SimpleLoad, {
     29   RunLoadTest(FILE_PATH_LITERAL("nacl_load_test.html"));
     30 })
     31 
     32 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatus0, {
     33   RunNaClIntegrationTest(FILE_PATH_LITERAL(
     34       "pm_exit_status_test.html?trigger=exit0&expected_exit=0"));
     35 })
     36 
     37 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatus254, {
     38   RunNaClIntegrationTest(FILE_PATH_LITERAL(
     39       "pm_exit_status_test.html?trigger=exit254&expected_exit=254"));
     40 })
     41 
     42 NACL_BROWSER_TEST_F(NaClBrowserTest, ExitStatusNeg2, {
     43   RunNaClIntegrationTest(FILE_PATH_LITERAL(
     44       "pm_exit_status_test.html?trigger=exitneg2&expected_exit=254"));
     45 })
     46 
     47 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPICore, {
     48   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppb_core.html"));
     49 })
     50 
     51 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPIPPBInstance, {
     52   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppb_instance.html"));
     53 })
     54 
     55 NACL_BROWSER_TEST_F(NaClBrowserTest, PPAPIPPPInstance, {
     56   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_ppp_instance.html"));
     57 })
     58 
     59 NACL_BROWSER_TEST_F(NaClBrowserTest, ProgressEvents, {
     60   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_progress_events.html"));
     61 })
     62 
     63 NACL_BROWSER_TEST_F(NaClBrowserTest, MAYBE_Crash, {
     64   RunNaClIntegrationTest(FILE_PATH_LITERAL("ppapi_crash.html"));
     65 })
     66 
     67 // Some versions of Visual Studio does not like preprocessor
     68 // conditionals inside the argument of a macro, so we put the
     69 // conditionals on a helper function.  We are already in an anonymous
     70 // namespace, so the name of the helper is not visible in external
     71 // scope.
     72 #if defined(OS_POSIX)
     73 base::FilePath::StringType NumberOfCoresAsFilePathString() {
     74   char string_rep[23];
     75   long nprocessors = sysconf(_SC_NPROCESSORS_ONLN);
     76 #if TELEMETRY
     77   fprintf(stderr, "browser says nprocessors = %ld\n", nprocessors);
     78   fflush(NULL);
     79 #endif
     80   snprintf(string_rep, sizeof string_rep, "%ld", nprocessors);
     81   return string_rep;
     82 }
     83 #elif defined(OS_WIN)
     84 base::FilePath::StringType NumberOfCoresAsFilePathString() {
     85   wchar_t string_rep[23];
     86   SYSTEM_INFO system_info;
     87   GetSystemInfo(&system_info);
     88 #if TELEMETRY
     89   fprintf(stderr, "browser says nprocessors = %d\n",
     90           system_info.dwNumberOfProcessors);
     91   fflush(NULL);
     92 #endif
     93   _snwprintf_s(string_rep, sizeof string_rep / sizeof string_rep[0], _TRUNCATE,
     94                L"%u", system_info.dwNumberOfProcessors);
     95   return string_rep;
     96 }
     97 #endif
     98 
     99 #if TELEMETRY
    100 static void PathTelemetry(base::FilePath::StringType const &path) {
    101 # if defined(OS_WIN)
    102     fwprintf(stderr, L"path = %s\n", path.c_str());
    103 # else
    104     fprintf(stderr, "path = %s\n", path.c_str());
    105 # endif
    106     fflush(NULL);
    107 }
    108 #else
    109 static void PathTelemetry(base::FilePath::StringType const &path) {
    110   (void) path;
    111 }
    112 #endif
    113 
    114 NACL_BROWSER_TEST_F(NaClBrowserTest, MAYBE_SysconfNprocessorsOnln, {
    115     base::FilePath::StringType path =
    116       FILE_PATH_LITERAL("sysconf_nprocessors_onln_test.html?cpu_count=");
    117     path = path + NumberOfCoresAsFilePathString();
    118     PathTelemetry(path);
    119     RunNaClIntegrationTest(path);
    120 })
    121 
    122 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CrossOriginCORS) {
    123   RunLoadTest(FILE_PATH_LITERAL("cross_origin/cors.html"));
    124 }
    125 
    126 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CrossOriginFail) {
    127   RunLoadTest(FILE_PATH_LITERAL("cross_origin/fail.html"));
    128 }
    129 
    130 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, SameOriginCookie) {
    131   RunLoadTest(FILE_PATH_LITERAL("cross_origin/same_origin_cookie.html"));
    132 }
    133 
    134 IN_PROC_BROWSER_TEST_F(NaClBrowserTestStatic, CORSNoCookie) {
    135   RunLoadTest(FILE_PATH_LITERAL("cross_origin/cors_no_cookie.html"));
    136 }
    137 
    138 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    139                        MAYBE_PNACL(PnaclErrorHandling)) {
    140   RunNaClIntegrationTest(FILE_PATH_LITERAL("pnacl_error_handling.html"));
    141 }
    142 
    143 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    144                        MAYBE_PNACL(PnaclNMFOptionsO0)) {
    145   RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_0"));
    146 }
    147 
    148 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    149                        MAYBE_PNACL(PnaclNMFOptionsO2)) {
    150   RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_2"));
    151 }
    152 
    153 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    154                        MAYBE_PNACL(PnaclNMFOptionsOlarge)) {
    155   RunLoadTest(FILE_PATH_LITERAL("pnacl_options.html?use_nmf=o_large"));
    156 }
    157 
    158 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    159                        MAYBE_PNACL(PnaclDyncodeSyscallDisabled)) {
    160   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    161       "pnacl_dyncode_syscall_disabled.html"));
    162 }
    163 
    164 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl,
    165                        MAYBE_PNACL(PnaclExceptionHandlingDisabled)) {
    166   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    167       "pnacl_exception_handling_disabled.html"));
    168 }
    169 
    170 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnacl, PnaclMimeType) {
    171   RunLoadTest(FILE_PATH_LITERAL("pnacl_mime_type.html"));
    172 }
    173 
    174 IN_PROC_BROWSER_TEST_F(NaClBrowserTestPnaclDisabled, PnaclMimeType) {
    175   RunLoadTest(FILE_PATH_LITERAL("pnacl_mime_type.html"));
    176 }
    177 
    178 class NaClBrowserTestNewlibStdoutPM : public NaClBrowserTestNewlib {
    179  public:
    180   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
    181     // Env needs to be set early because nacl_helper is spawned before the test
    182     // body on Linux.
    183     scoped_ptr<base::Environment> env(base::Environment::Create());
    184     env->SetVar("NACL_EXE_STDOUT", "DEBUG_ONLY:dev://postmessage");
    185     NaClBrowserTestNewlib::SetUpInProcessBrowserTestFixture();
    186   }
    187 };
    188 
    189 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectFg0) {
    190   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    191       "pm_redir_test.html?stream=stdout&thread=fg&delay_us=0"));
    192 }
    193 
    194 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectBg0) {
    195   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    196       "pm_redir_test.html?stream=stdout&thread=bg&delay_us=0"));
    197 }
    198 
    199 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectFg1) {
    200   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    201       "pm_redir_test.html?stream=stdout&thread=fg&delay_us=1000000"));
    202 }
    203 
    204 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStdoutPM, RedirectBg1) {
    205   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    206       "pm_redir_test.html?stream=stdout&thread=bg&delay_us=1000000"));
    207 }
    208 
    209 class NaClBrowserTestNewlibStderrPM : public NaClBrowserTestNewlib {
    210  public:
    211   virtual void SetUpInProcessBrowserTestFixture() OVERRIDE {
    212     // Env needs to be set early because nacl_helper is spawned before the test
    213     // body on Linux.
    214     scoped_ptr<base::Environment> env(base::Environment::Create());
    215     env->SetVar("NACL_EXE_STDERR", "DEBUG_ONLY:dev://postmessage");
    216     NaClBrowserTestNewlib::SetUpInProcessBrowserTestFixture();
    217   }
    218 };
    219 
    220 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectFg0) {
    221   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    222       "pm_redir_test.html?stream=stderr&thread=fg&delay_us=0"));
    223 }
    224 
    225 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectBg0) {
    226   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    227       "pm_redir_test.html?stream=stderr&thread=bg&delay_us=0"));
    228 }
    229 
    230 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectFg1) {
    231   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    232       "pm_redir_test.html?stream=stderr&thread=fg&delay_us=1000000"));
    233 }
    234 
    235 IN_PROC_BROWSER_TEST_F(NaClBrowserTestNewlibStderrPM, RedirectBg1) {
    236   RunNaClIntegrationTest(FILE_PATH_LITERAL(
    237       "pm_redir_test.html?stream=stderr&thread=bg&delay_us=1000000"));
    238 }
    239 
    240 }  // namespace
    241