Index: third_party/grpc/tools/run_tests/interop_html_report.template |
diff --git a/third_party/grpc/tools/run_tests/interop_html_report.template b/third_party/grpc/tools/run_tests/interop_html_report.template |
new file mode 100644 |
index 0000000000000000000000000000000000000000..46cce426b7af3e05adfe568a59e150a997a304f5 |
--- /dev/null |
+++ b/third_party/grpc/tools/run_tests/interop_html_report.template |
@@ -0,0 +1,177 @@ |
+<!DOCTYPE html> |
+<html lang="en"> |
+<head><title>Interop Test Result</title></head> |
+<body> |
+ |
+<%def name="fill_one_test_result(shortname, resultset)"> |
+ % if shortname in resultset: |
+ ## Because interop tests does not have runs_per_test flag, each test is |
+ ## run once. So there should only be one element for each result. |
+ <% result = resultset[shortname][0] %> |
+ % if result.state == 'PASSED': |
+ <td bgcolor="green">PASS</td> |
+ % else: |
+ <% |
+ tooltip = '' |
+ if result.returncode > 0 or result.message: |
+ if result.returncode > 0: |
+ tooltip = 'returncode: %d ' % result.returncode |
+ if result.message: |
+ tooltip = '%smessage: %s' % (tooltip, result.message) |
+ %> |
+ % if result.state == 'FAILED': |
+ <td bgcolor="red"> |
+ % if tooltip: |
+ <a href="#" data-toggle="tooltip" data-placement="auto" title="${tooltip | h}">FAIL</a></td> |
+ % else: |
+ FAIL</td> |
+ % endif |
+ % elif result.state == 'TIMEOUT': |
+ <td bgcolor="yellow"> |
+ % if tooltip: |
+ <a href="#" data-toggle="tooltip" data-placement="auto" title="${tooltip | h}">TIMEOUT</a></td> |
+ % else: |
+ TIMEOUT</td> |
+ % endif |
+ % endif |
+ % endif |
+ % else: |
+ <td bgcolor="magenta">Not implemented</td> |
+ % endif |
+</%def> |
+ |
+<%def name="fill_one_http2_test_result(shortname, resultset)"> |
+ ## keep this mostly in sync with the template above |
+ % if shortname in resultset: |
+ ## Because interop tests does not have runs_per_test flag, each test is |
+ ## run once. So there should only be one element for each result. |
+ <% result = resultset[shortname][0] %> |
+ % if result.http2results: |
+ <td bgcolor="white"> |
+ <div style="width:95%; border: 1px solid black; position: relative; padding: 3px;"> |
+ <span style="position: absolute; left: 45%;">${int(result.http2results['percent'] * 100)}%</span> |
+ <div style="height: 20px; |
+ background-color: hsl(${result.http2results['percent'] * 120}, 100%, 50%); |
+ width: ${result.http2results['percent'] * 100}%;" |
+ title="${result.http2results['failed_cases'] | h}"></div> |
+ </div> |
+ </td> |
+ % else: |
+ <td bgcolor="red">No result is found!</td> |
+ % endif |
+ % else: |
+ <td bgcolor="magenta">Not implemented</td> |
+ % endif |
+</%def> |
+ |
+<%def name="display_cloud_to_prod_result(prod_server)"> |
+ ## Each column header is the client language. |
+ <table style="width:100%" border="1"> |
+ <tr bgcolor="#00BFFF"> |
+ <th>Client languages ►<br/>Test Cases ▼</th> |
+ % for client_lang in client_langs: |
+ <th>${client_lang}</th> |
+ % endfor |
+ </tr> |
+ % for test_case in test_cases + auth_test_cases: |
+ <tr><td><b>${test_case}</b></td> |
+ % for client_lang in client_langs: |
+ <% |
+ if test_case in auth_test_cases: |
+ shortname = 'cloud_to_prod_auth:%s:%s:%s' % ( |
+ prod_server, client_lang, test_case) |
+ else: |
+ shortname = 'cloud_to_prod:%s:%s:%s' % ( |
+ prod_server, client_lang, test_case) |
+ %> |
+ ${fill_one_test_result(shortname, resultset)} |
+ % endfor |
+ </tr> |
+ % endfor |
+ </table> |
+</%def> |
+ |
+% if num_failures > 1: |
+ <p><h2><font color="red">${num_failures} tests failed!</font></h2></p> |
+% elif num_failures: |
+ <p><h2><font color="red">${num_failures} test failed!</font></h2></p> |
+% else: |
+ <p><h2><font color="green">All tests passed!</font></h2></p> |
+% endif |
+ |
+% if cloud_to_prod: |
+ % for prod_server in prod_servers: |
+ <h2>Cloud to ${prod_server}</h2> |
+ ${display_cloud_to_prod_result(prod_server)} |
+ % endfor |
+% endif |
+ |
+% if http2_interop: |
+ ## Each column header is the server language. |
+ <h2>HTTP/2 Interop</h2> |
+ <table style="width:100%" border="1"> |
+ <tr bgcolor="#00BFFF"> |
+ <th>Servers ►<br/>Test Cases ▼</th> |
+ % for server_lang in server_langs: |
+ <th>${server_lang}</th> |
+ % endfor |
+ % if cloud_to_prod: |
+ % for prod_server in prod_servers: |
+ <th>${prod_server}</th> |
+ % endfor |
+ % endif |
+ </tr> |
+ % for test_case in http2_cases: |
+ <tr><td><b>${test_case}</b></td> |
+ ## Fill up the cells with test result. |
+ % for server_lang in server_langs: |
+ <% |
+ shortname = 'cloud_to_cloud:http2:%s_server:%s' % ( |
+ server_lang, test_case) |
+ %> |
+ ${fill_one_http2_test_result(shortname, resultset)} |
+ % endfor |
+ % if cloud_to_prod: |
+ % for prod_server in prod_servers: |
+ <% shortname = 'cloud_to_prod:%s:http2:%s' % (prod_server, test_case) %> |
+ ${fill_one_http2_test_result(shortname, resultset)} |
+ % endfor |
+ % endif |
+ </tr> |
+ % endfor |
+ </table> |
+% endif |
+ |
+% if server_langs: |
+ % for test_case in test_cases: |
+ ## Each column header is the client language. |
+ <h2>${test_case}</h2> |
+ <table style="width:100%" border="1"> |
+ <tr bgcolor="#00BFFF"> |
+ <th>Client languages ►<br/>Server languages ▼</th> |
+ % for client_lang in client_langs: |
+ <th>${client_lang}</th> |
+ % endfor |
+ </tr> |
+ ## Each row head is the server language. |
+ % for server_lang in server_langs: |
+ <tr> |
+ <td><b>${server_lang}</b></td> |
+ % for client_lang in client_langs: |
+ <% |
+ shortname = 'cloud_to_cloud:%s:%s_server:%s' % ( |
+ client_lang, server_lang, test_case) |
+ %> |
+ ${fill_one_test_result(shortname, resultset)} |
+ % endfor |
+ </tr> |
+ % endfor |
+ </table> |
+ % endfor |
+% endif |
+ |
+<script> |
+ $(document).ready(function(){$('[data-toggle="tooltip"]').tooltip();}); |
+</script> |
+</body> |
+</html> |