Debugging: Add code to print backtrace for guest on SIGSEGV
[nativeclient.git] / tests / contest_issues / issue57.html
blobe7b871e96b2e21ec920da94b5a8300bc23c1494e
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3 <html>
4 <!-- Copyright 2008 Google Inc. All rights reserved. -->
5 <head>
6 <title> SRPC Descriptor Passing Test </title>
7 <style type="text/css">
8 td.notrun { background-color: skyblue }
9 td.pass { background-color: lime }
10 td.fail { background-color: red }
11 </style>
12 <script type="application/x-javascript">
13 <!--
14 var server = 0;
15 var client = 0;
17 var GeneralLog = function(str) {
18 var output = document.getElementById('GeneralOutput');
19 output.innerHTML += str + '<br>';
22 var SocketAddressLog = function(str) {
23 var output = document.getElementById('SocketAddressOutput');
24 output.innerHTML += str + '<br>';
27 var SetTestResult = function(element_id, result) {
28 var element = document.getElementById(element_id);
29 if ('pass' == result) {
30 element.className = 'pass';
31 } else {
32 element.className = 'fail';
35 var SocketAddressNaClToNacl = function() {
36 SocketAddressLog('<b> NaCl to NaCl Test');
37 SocketAddressLog('Invoking server.start_server');
38 var socket_address = server.start_server();
39 SocketAddressLog('Invoking NaCl client.sock_addr_client');
40 client_errors = client.sock_addr_client(socket_address);
41 var server_errors = server.report();
42 if (client_errors == 0 && server_errors == 0) {
43 SocketAddressLog('TEST PASSED');
44 SetTestResult('addr_nacl_nacl', 'pass');
45 } else if (client_errors == 0) {
46 SocketAddressLog('Server errors -- NaClToNaCl TEST FAILED');
47 SetTestResult('addr_nacl_nacl', 'fail');
48 } else {
49 SocketAddressLog('Client errors -- NaClToNaCl TEST FAILED');
50 SetTestResult('addr_nacl_nacl', 'fail');
54 var SocketAddressNaClToBrowser = function() {
55 SocketAddressLog('<b> NaCl to Browser Test');
56 SocketAddressLog('Invoking server.start_server');
57 var socket_address2 = server.start_server();
58 SocketAddressLog('Invoking connect');
59 var con_sock = socket_address2.connect();
60 SocketAddressLog('Invoking getmsg');
61 var retval = con_sock.getmsg(100);
62 var str = '';
63 for (var i = 0; i < retval.length && retval[i] != 0; i++) {
64 str += String.fromCharCode(retval[i]);
67 SocketAddressLog(str);
68 var server_errors = server.report();
69 if (server_errors == 0) {
70 SocketAddressLog('TEST PASSED');
71 SetTestResult('addr_nacl_browser', 'pass');
72 } else {
73 SocketAddressLog('Server errors -- NaClToBrowser TEST FAILED');
74 SetTestResult('addr_nacl_browser', 'fail');
78 var SharedMemoryLog = function(str) {
79 var output = document.getElementById('SharedMemoryOutput');
80 output.innerHTML += str + '<br>';
83 function myObj()
85 this.x = 1;
86 this.y = 2;
89 var SharedMemoryBrowserToBrowser = function() {
90 server.height = new myObj();
91 alert(server.height);
92 if (rval == in_str.substring(test_offset)) {
93 SharedMemoryLog('TEST PASSED');
94 SetTestResult('mem_browser_browser', 'pass');
95 } else {
96 SharedMemoryLog('Strings miscompare: BrowserToBrowser TEST FAILED');
97 SetTestResult('mem_browser_browser', 'fail');
101 var SharedMemoryBrowserToNaCl = function() {
102 // This tests passing of shared memory objects from the browser to NaCl
103 // modules. It creates a shared memory region, writes a string to the region,
104 // invokes a method in the server that checks for the expected string and
105 // writes another string immediately after. It then checks the written
106 // return string and error count.
107 var in_str = 'hello, world';
108 var compare_string = 'Quod erat demonstrandum';
109 var region_size = 65536;
110 SharedMemoryLog('<b> Browser to NaCl Test');
111 // var shared_memory = server.__shmFactory(region_size);
112 SharedMemoryLog('created shared memory region');
113 shared_memory.write(0, in_str.length, in_str);
114 SharedMemoryLog('wrote to shared memory region');
115 var server_errors = server.test_shared_memory(shared_memory, in_str);
116 var rval = shared_memory.read(in_str.length, compare_string.length);
117 if (server_errors == 0 && rval == compare_string) {
118 SharedMemoryLog('TEST PASSED');
119 SetTestResult('mem_browser_nacl', 'pass');
120 } else {
121 SharedMemoryLog('Strings miscompare: BrowserToNaCl TEST FAILED');
122 SetTestResult('mem_browser_nacl', 'fail');
126 var SharedMemoryNaClToBrowser = function() {
127 // This tests passing of shared memory objects from NaCl to the browser.
128 // It invokes a method in client to create a shared memory region and write a
129 // string to the region.
130 var region_size = 65536;
131 SharedMemoryLog('<b> NaCl to Browser Test');
132 var retval = client.shared_memory_client(region_size);
133 var handle = retval[0];
134 var in_str = retval[1];
135 var client_errors = retval[2];
136 SharedMemoryLog('Compare to: ' + in_str);
137 var shared_memory = handle.map();
138 var read_string = shared_memory.read(0, in_str.length);
139 if (client_errors == 0 && in_str == read_string) {
140 SharedMemoryLog('TEST PASSED');
141 SetTestResult('mem_nacl_browser', 'pass');
142 } else {
143 SharedMemoryLog('Strings miscompare: NaClToBrowser TEST FAILED');
144 SetTestResult('mem_nacl_browser', 'fail');
148 var SharedMemoryNaClToNaCl = function() {
149 // This tests passing of shared memory objects from NaCl to NaCl.
150 // It invokes a method in client to create a shared memory region and write a
151 // string to the region. This region is then passed to the server, which
152 // checks the region and writes its own string and an error count.
153 var compare_string = 'Quod erat demonstrandum';
154 var region_size = 65536;
155 SharedMemoryLog('<b> NaCl to NaCl Test');
156 var retval = client.shared_memory_client(region_size);
157 var handle = retval[0];
158 var in_str = retval[1];
159 var client_errors = retval[2];
160 SharedMemoryLog('Compare to: ' + in_str);
161 var shared_memory = handle.map();
162 var server_errors = server.test_shared_memory(shared_memory, in_str);
163 var rval = shared_memory.read(in_str.length, compare_string.length);
164 if (client_errors == 0 && server_errors == 0 && rval == compare_string) {
165 SharedMemoryLog('TEST PASSED');
166 SetTestResult('mem_nacl_nacl', 'pass');
167 } else {
168 SharedMemoryLog('Strings miscompare: NaClToNaCl TEST FAILED');
169 SetTestResult('mem_nacl_nacl', 'fail');
173 var RunAllTests = function() {
174 // socket address passing tests.
175 SocketAddressNaClToBrowser();
176 SocketAddressNaClToNacl();
177 // shared memory passing tests.
178 SharedMemoryBrowserToBrowser();
179 SharedMemoryBrowserToNaCl();
180 SharedMemoryNaClToBrowser();
181 SharedMemoryNaClToNaCl();
184 // Before running tests we need to ensure the Native Client modules are loaded.
185 var startupTimeout;
187 var RunTestsAfterLoad = function() {
188 if (client.__moduleReady && server.__moduleReady) {
189 clearTimeout(startupTimeout);
190 RunAllTests();
191 } else {
192 if (client.__moduleReady == undefined ||
193 server.__moduleReady == undefined) {
194 alert('The Native Client plugin was unable to load');
195 return;
197 GeneralLog('waiting for loads...');
198 startupTimeout = setTimeout(RunTestsAfterLoad, 100);
202 // Init is called when the document has completed loading.
203 var Init = function(boxsize) {
204 // Remember objects to make access to the elements easier.
205 client = document.getElementById('nacl_client');
206 server = document.getElementById('nacl_server');
207 // Run the tests after ensuring loads have completed.
208 RunTestsAfterLoad();
211 </script>
212 </head>
213 <body onload="Init();">
214 <h1> SRPC Descriptor Passing Test </h1>
215 <table border=5 cellpadding=5%
216 summary="A three-column table of test results">
217 <tr>
218 <td align=center>
219 <button type="button" onclick="RunAllTests()"> Run All Tests </button>
220 </td>
221 <td align=center> <b> Socket Address Passing </b> </td>
222 <td align=center> <b> Shared Memory Passing </b> </td>
223 </tr>
224 <tr>
225 <td align=center> <b> Browser to Browser </b> </td>
226 <td align=center> <em> Not applicable </em> </td>
227 <td align=center id="mem_browser_browser" class="notrun">
228 <button type="button" onclick="SharedMemoryBrowserToBrowser()">
229 Run Test
230 </button>
231 </td>
232 </tr>
233 <tr>
234 <td> <b> Browser to NaCl </b> </td>
235 <td align=center> <em> Not applicable </em> </td>
236 <td align=center id="mem_browser_nacl" class="notrun">
237 <button type="button" onclick="SharedMemoryBrowserToNaCl()">
238 Run Test
239 </button>
240 </td>
241 </tr>
242 <tr>
243 <td> <b> NaCl to Browser </b> </td>
244 <td align=center id="addr_nacl_browser" class="notrun">
245 <button type="button" onclick="SocketAddressNaClToBrowser()">
246 Run Test
247 </button>
248 </td>
249 <td align=center id="mem_nacl_browser" class="notrun">
250 <button type="button" onclick="SharedMemoryNaClToBrowser()">
251 Run Test
252 </button>
253 </td>
254 </tr>
255 <tr>
256 <td> <b> NaCl to NaCl </b> </td>
257 <td align=center id="addr_nacl_nacl" class="notrun">
258 <button type="button" onclick="SocketAddressNaClToNacl()">
259 Run Test
260 </button>
261 </td>
262 <td align=center id="mem_nacl_nacl" class="notrun">
263 <button type="button" onclick="SharedMemoryNaClToNaCl()">
264 Run Test
265 </button>
266 </td>
267 </tr>
268 </table>
269 <table summary="The color codes used for identifying test outcomes">
270 <tr> <td align="center"> <em> Legend </em> </td> </tr>
271 <tr> <td align="center" class="notrun"> Test not run </td> </tr>
272 <tr> <td align="center" class="pass"> Test passed </td> </tr>
273 <tr> <td align="center" class="fail"> Test failed </td> </tr>
274 </table>
275 <br/>
277 <b>Note:</b> For the purposes of contest issue #57, clicking
278 on the Browser to Browser, Shared Memory Passing "Run Test" button
279 should remain blue. Clicking on Browser to NaCl, Shared Memory
280 Passing "Run Test" button should also remain blue. The browser
281 should continue to operate properly. If Firebug is running,
282 additional error information should be available. The other blue
283 tests should turn green when individually run.
284 </p>
285 <h2> Output logs </h2>
286 <br/>
287 <table border=5 cellpadding=5% summary="A three-column test output log">
288 <tr>
289 <td> <b> General test output </b> </td>
290 <td> <b> Socket address test output </b> </td>
291 <td> <b> Shared memory test output </b> </td>
292 </tr>
293 <tr>
294 <td valign=top id="GeneralOutput"> </td>
295 <td valign=top id="SocketAddressOutput"> </td>
296 <td valign=top id="SharedMemoryOutput"> </td>
297 </tr>
298 </table>
299 <embed type="application/x-nacl-srpc" id="nacl_client"
300 width="0" height="0" src="srpc_nrd_client.nexe" />
301 <embed type="application/x-nacl-srpc" id="nacl_server"
302 width="0" height="0" src="srpc_nrd_server.nexe" />
303 </body>
304 </html>