Commit: 08df867a88572e8703c28867d03f87ad55a6aa52
Author: v-maf...@microsoft.com <v-maf...@microsoft.com> Thu, 20 Mar
2014 00:29:55 -0700
Parents: 816a7ce7721eca4747c68bca69f43b0700a4b3ae
Branches: master
Link:
http://git.php.net/?p=web/qa.git;a=commitdiff;h=08df867a88572e8703c28867d03f87ad55a6aa52
Log:
Publish PFTT Reports
Changed paths:
A build.php
A list_builds.php
A pftt.php
A pftt_report.php
diff --git a/build.php b/build.php
new file mode 100755
index 0000000..515d174
--- /dev/null
+++ b/build.php
@@ -0,0 +1,105 @@
+<?php
+
+define('BASE_REPORT_DIR',
dirname($_SERVER['SCRIPT_FILENAME'])."/pftt-reports/");
+
+$branch = $_GET['branch'];
+$revision = $_GET['revision'];
+if (substr($branch, 0, 3)!='PHP') {
+ $branch = "PHP_5_6";
+}
+if (substr($revision, 0, 1)!='r') {
+ $revision = "";
+}
+
+
+include("include/functions.php");
+
+$TITLE = "PHP: QA: PFTT: $branch: $revision";
+$SITE_UPDATE = date("D M d H:i:s Y T", filectime(__FILE__));
+/* $Id$ */
+
+common_header();
+
+
+
+?>
+<h1><a href="list_builds.php?branch=<?php echo $branch; ?>"><?php echo
$branch; ?></a> <?php echo $revision; ?></h1>
+
+<h2>Summary</h2>
+
+<table>
+ <tr>
+ <td><?php echo $branch; ?> <?php echo $revision; ?> <?php echo
$build_type; ?> <?php echo $cpu; ?></td>
+ </tr>
+</table>
+
+<br/>
+
+<h2>Comparison Reports</h2>
+
+<table>
+ <tr>
+ <td><strong>PHPT</strong> <a href="howto_phpt.htm"
target="_blank">How to</a></td>
+ </tr>
+ <?php
+
+foreach ( scandir(BASE_REPORT_DIR."/$branch/$revision") as $report ) {
+ if (substr($report, 0, 4)=="PHPT" &&
is_file(BASE_REPORT_DIR."/$branch/$revision/$report")) {
+
+ ?>
+ <tr>
+ <td>with <a href="<?php echo dirname($_SERVER['PHP_SELF']);
?>/pftt-reports/<?php echo $branch; ?>/<?php echo $revision; ?>/<?php echo
$report; ?>" target="_blank"><?php echo $report; ?></a></td>
+ </tr>
+ <?php
+
+ } // end if
+}
+
+ ?>
+</table>
+<br/>
+<table>
+ <tr>
+ <td><strong>PhpUnit</strong> <a href="howto_phpunit.htm"
target="_blank">How to</a></td>
+ </tr>
+ <?php
+
+foreach ( scandir(BASE_REPORT_DIR."/$branch/$revision") as $report ) {
+ if (substr($report, 0, 7)=="PhpUnit" &&
is_file(BASE_REPORT_DIR."/$branch/$revision/$report")) {
+
+ ?>
+ <tr>
+ <td>with <a href="<?php echo dirname($_SERVER['PHP_SELF']);
?>/pftt-reports/<?php echo $branch; ?>/<?php echo $revision; ?>/<?php echo
$report; ?>" target="_blank"><?php echo $report; ?></a></td>
+ </tr>
+ <?php
+
+ } // end if
+}
+
+?>
+</table>
+<br/>
+<h2>Abbreviations</h2>
+<p><b>NTS</b> - Non-Thread Safe build, use for CLI or IIS (PHP on Windows uses
2 types of builds, TS and NTS)</p>
+<p><b>TS</b> - Thread Safe build, use for CLI or Apache mod_php on Windows</p>
+<p><b>VC11</b> - Build compiled using VC11 (Visual Studio 2012)</p>
+<p><b>VC9</b> - Build compiled using VC9 (Visual Studio 2008)</p>
+<p><b>GCC</b> - Build compiled using GCC</p>
+<br/>
+<h2>Common Scenario Sets</h2>
+<p><b>Local-FileSystem_MySQL_Apache-ModPHP-ApacheLounge-2.4.4-VC9-OpenSS</b> -
Tests run on local file system, using Apache with MySQL</p>
+<p><b>Local-FileSystem_MySQL_CLI</b> - Tests run on local file system on CLI
with MySQL</p>
+<p><b>Opcache_Local-FileSystem_MySQL_Apache-ModPHP-ApacheLounge-2</b> - Tests
run on local file system, using Apache with Opcache, MySQL</p>
+<p><b>Opcache_Local-FileSystem_MySQL_CLI</b> - Tests run on local file system
on CLI with MySQL</p>
+<p><b>Opcache_Local-FileSystem_MySQL_CLI_WinCacheU</b> - Tests run on local
file system on CLI with Opcache, MySQL and WinCache (user & file caches)</p>
+<p><b>SMB-DFS_MySQL_Apache-ModPHP-ApacheLounge-2.4.4-VC9-OpenSS</b> - Tests
run on remote DFS file system, using Apache with MySQL</p>
+<p><b>SMB-DFS_MySQL_CLI</b> - Tests run on remote DFS file system on CLI with
MySQL</p>
+<p><b>Opcache_SMB-DFS_MySQL_Apache-ModPHP-ApacheLounge-2</b> - Tests run on
remote DFS file system, using Apache with Opcache, MySQL</p>
+<p><b>Opcache_SMB-DFS_MySQL_CLI</b> - Tests run on remote DFS file system on
CLI with MySQL</p>
+<p><b>Opcache_SMB-DFS_MySQL_CLI_WinCacheU</b> - Tests run on remote DFS file
system on CLI with Opcache, MySQL and WinCache (user & file caches)</p>
+
+<?php
+
+common_footer();
+
+?>
\ No newline at end of file
diff --git a/list_builds.php b/list_builds.php
new file mode 100755
index 0000000..f091d0a
--- /dev/null
+++ b/list_builds.php
@@ -0,0 +1,78 @@
+<?php
+
+define('BASE_REPORT_DIR',
dirname($_SERVER['SCRIPT_FILENAME'])."/pftt-reports/");
+
+$branch = $_GET['branch'];
+if (substr($branch, 0, 3)!='PHP') {
+ $branch = "PHP_5_6";
+}
+
+
+include("include/functions.php");
+
+$TITLE = "PHP: QA: PFTT: $branch";
+$SITE_UPDATE = date("D M d H:i:s Y T", filectime(__FILE__));
+/* $Id$ */
+
+common_header();
+
+
+?>
+<h1><a href="pftt.php"><?php echo $branch; ?></a></h1>
+
+<p>Choose a PHP revision or build</p>
+<?php
+
+$latest_revision = '';
+$mtime = 0;
+
+foreach ( scandir(BASE_REPORT_DIR."/$branch") as $revision ) {
+ if ($revision=="." or $revision=="..")
+ continue;
+ if (is_dir(BASE_REPORT_DIR."/$branch/$revision")) {
+ $mtime = stat(BASE_REPORT_DIR."/$branch/$revision")[9];
+ if ($mtime > $latest_revision_mtime) {
+ $latest_revision = $revision;
+ $latest_revision_mtime = $mtime;
+ }
+ }
+}
+
+?>
+<table>
+ <tr>
+ <td>Latest:</td>
+ <td><a href="build.php?branch=<?php echo $branch;
?>&revision=<?php echo $revision; ?>"><?php echo $latest_revision; ?></a></td>
+ </tr>
+<?php /* <tr>
+ <td>New Failures:</td>
+ <td>New Crashes:</td>
+ </tr> */ ?>
+</table>
+<br/>
+<table>
+ <?php
+
+foreach ( scandir(BASE_REPORT_DIR."/$branch") as $revision ) {
+ if ($revision=="." or $revision=="..")
+ continue;
+ if (is_dir(BASE_REPORT_DIR."/$branch/$revision")) {
+
+
+ ?>
+ <tr>
+ <td><a href="build.php?branch=<?php echo $branch;
?>&revision=<?php echo $revision; ?>"><?php echo $revision; ?></a></td>
+ </tr>
+ <?php
+
+ } // end if
+}
+
+
+ ?>
+</table>
+<?php
+
+common_footer();
+
+?>
\ No newline at end of file
diff --git a/pftt.php b/pftt.php
new file mode 100755
index 0000000..cef7cef
--- /dev/null
+++ b/pftt.php
@@ -0,0 +1,60 @@
+<?php
+
+include("include/functions.php");
+
+$TITLE = "PHP: QA: PFTT";
+$SITE_UPDATE = date("D M d H:i:s Y T", filectime(__FILE__));
+/* $Id$ */
+
+common_header();
+
+define('BASE_REPORT_DIR',
dirname($_SERVER['SCRIPT_FILENAME'])."/pftt-reports/");
+
+?>
+<h1>PFTT</h1>
+
+<p>Choose a PHP Branch</p>
+
+<?php
+
+foreach ( scandir(BASE_REPORT_DIR) as $branch ) {
+ if ($branch=="." or $branch=="..")
+ continue;
+ if (is_dir(BASE_REPORT_DIR."/$branch")) {
+ $latest_revision = '';
+ $mtime = 0;
+
+ foreach ( scandir(BASE_REPORT_DIR."/$branch") as $revision ) {
+ if ($revision=="." or $revision=="..")
+ continue;
+ if (is_dir(BASE_REPORT_DIR."/$branch/$revision")) {
+ $mtime =
stat(BASE_REPORT_DIR."/$branch/$revision")[9];
+ if ($mtime > $latest_revision_mtime) {
+ $latest_revision = $revision;
+ $latest_revision_mtime = $mtime;
+ }
+ }
+ }
+
+?>
+<table>
+ <tr>
+ <td colspan="2"><a href="list_builds.php?branch=<?php echo
$branch; ?>"><?php echo $branch; ?></a></td>
+ <td>Latest:</td>
+ <td><a href="build.php?branch=<?php echo $branch;
?>&revision=<?php echo $latest_revision; ?>"><?php echo $latest_revision;
?></a></td>
+ </tr>
+<?php /* <tr>
+ <td>New Failures:</td>
+ <td></td>
+ <td>New Crashes:</td>
+ <td></td>
+ </tr>*/ ?>
+</table>
+<br/>
+<?php
+
+ } // end if
+}
+
+common_footer();
+?>
\ No newline at end of file
diff --git a/pftt_report.php b/pftt_report.php
new file mode 100755
index 0000000..6f8e48e
--- /dev/null
+++ b/pftt_report.php
@@ -0,0 +1,109 @@
+<?php
+
+// input via POST
+// 3 parameters: branch, revision and the report file contents/name
+// -branch
+// -revision
+// -report_file
+//
+// all this script does is generate a directory for the branch+revision and
store the (validated) report file in it
+//
+// the report file will either be for PHPT or PhpUnit reports generated by
PFTT (see: git.php.net/pftt2.git )
+//
+// reports are stored as flat-files in pftt-reports/$branch/$revision (this is
just a simple file upload script)
+//
+//
+// INSTALL NOTE: web server user needs write access to `pftt-reports` directory
+//
+// the report file is pre-generated by PFTT and uploaded, instead of
generating the report on upload
+// or generating it when the user wants to view it. this is done because:
+// 1. the result-packs (decompressed) are a lot of data
+// 2. which is needed to get the output of failing tests to include in the
report
+// 3. simplifies the process of publishing reports as PFTT already generates
reports comparing 2 builds
+// 4. even just comparing the list of failing tests across multiple hosts
and scenarios can be a lot of data
+// (even if it was uploaded separately from the compressed result-packs)
+// 5. doing the comparison is more complex meaning more error prone and
since access to qa.php.net is limited to git,
+// debugging, fixing and cleaning up errors in that process could be
difficult
+
+// TODO limit number of revisions
+// TODO limit number of reports per revision
+
+
+function exit_error($msg='') {
+ header('HTTP/1.0 400 Bad Request');
+ echo $msg;
+ exit;
+}
+
+if (md5($_POST['token'])!="b1cab611a6a4ae40693c0f0f9df16692") {
+ exit_error("Invalid Token");
+}
+
+$branch = strtoupper($_POST['branch']);
+$revision = strtolower($_POST['revision']);
+
+// do a bunch of validation on the input
+switch($branch) {
+case "PHP_5_3":
+case "PHP_5_4":
+case "PHP_5_5":
+case "PHP_5_6":
+case "PHP_5_7":
+case "PHP_6_0":
+case "PHP_MASTER":
+case "MASTER":
+case "STR_SIZE_AND_INT64":
+ // valid
+ break;
+default:
+ exit_error('Invalid branch');
+}
+
+// revisions must either have a . (fe 5.5.10) or start with 'r'
+if ((strpos($revision, ".")===FALSE and substr($revision, 0, 1)!="r") or
strlen($revision)>20) {
+ exit_error('Invalid revision');
+}
+
+// validate report_file
+if ($_FILES['report_file']['size'] > 100000 or $_FILES['report_file']['size']
< 100 ) {
+ exit_error('Invalid report file size');
+} else if ($_FILES['report_file']['type']!="text/html") {
+ exit_error('Invalid report type');
+}
+
+$file_contents = file_get_contents($_FILES['report_file']['tmp_name']);
+
+// validate file contents
+if (substr($file_contents, 0, 6)!="<html>" or strpos($file_contents,
"PFTT")===FALSE) {
+ exit_error('Invalid report file content');
+}
+
+// everything valid, now store it
+
+// cleanup report filename
+// will be named either:
+//
PHPT_CMP_PHP_5_5-r31d67bd-NTS-X64-VC11_Local-FileSystem_CLI_v_PHP_5_5-rda84f3a-N.html
+//
PhpUnit_CMP_PHP_5_5-r31d67bd-NTS-X64-VC11_Local-FileSystem_CLI_Symfony_v_PHP_5_5-rda84f3a-N.html
+//
+$report_name = trim($_FILES['report_file']['name']);
+if (strlen($report_name) > 80) {
+ $report_name = substr($report_name, 0, 80);
+}
+if (substr($report_name, -5) != ".html") {
+ $report_name .= ".html";
+}
+
+// decide where to store it
+$report_file = dirname($_SERVER['SCRIPT_FILENAME']) .
"/pftt-reports/$branch/$revision/$report_name";
+$report_dir = dirname($report_file);
+
+// ensure dir exists
+@mkdir($report_dir, 0644, TRUE);
+
+// report_file is stored locally in a temporary file, move that file to the
permanent location
+move_uploaded_file($_FILES['report_file']['tmp_name'], $report_file);
+
+// done, successfully
+echo "Uploaded to $report_file";
+
+?>
\ No newline at end of file
--
PHP Quality Assurance Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php