derick          Sat Oct 12 15:29:57 2002 EDT

  Modified files:              
    /php4       run-tests.php 
  Log:
  - woohooo! Automatic build test submits!
  
  
Index: php4/run-tests.php
diff -u php4/run-tests.php:1.68 php4/run-tests.php:1.69
--- php4/run-tests.php:1.68     Thu Oct 10 12:08:15 2002
+++ php4/run-tests.php  Sat Oct 12 15:29:56 2002
@@ -13,25 +13,22 @@
    | obtain it through the world-wide-web, please send a note to          |
    | [EMAIL PROTECTED] so we can mail you a copy immediately.               |
    +----------------------------------------------------------------------+
-   | Authors: Preston L. Bannister <[EMAIL PROTECTED]>                   |
-   |          Sander Roobol <[EMAIL PROTECTED]>                              |
+   | Authors: Ilia Alshanetsky <[EMAIL PROTECTED]>                             |
+   |          Preston L. Bannister <[EMAIL PROTECTED]>                   |
    |          Marcus Boerger <[EMAIL PROTECTED]>                              |
+   |          Derick Rethans <[EMAIL PROTECTED]>                             |
+   |          Sander Roobol <[EMAIL PROTECTED]>                              |
    | (based on version by: Stig Bakken <[EMAIL PROTECTED]>)                     |
    | (based on the PHP 3 test framework by Rasmus Lerdorf)                |
    +----------------------------------------------------------------------+
  */
 
 /*
-
        Require exact specification of PHP executable to test (no guessing!).
-
        Die if any internal errors encountered in test script.
-
        Regularized output for simpler post-processing of output.
-
        Optionally output error lines indicating the failing test source and log
        for direct jump with MSVC or Emacs.
-
 */
 
 /*
@@ -106,6 +103,7 @@
 $test_to_run = array();
 $test_files = array();
 $test_results = array();
+$GLOBALS['__PHP_FAILED_TESTS__'] = array();
 
 // If parameters given assume they represent selected tests to run.
 if (isset($argc) && $argc > 1) {
@@ -227,6 +225,92 @@
 =====================================================================
 ";
 
+define('PHP_QA_EMAIL', '[EMAIL PROTECTED]');
+define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php');
+
+/* We got failed Tests, offer the user to send and e-mail to QA team */
+if ($sum_results['FAILED']) {
+       $fp = fopen("php://stdin", "r+");
+       fwrite($fp, "Some tests have failed, would you like to send the\nreport to 
+PHP's QA team? [Yn]: ");
+       fflush($fp);
+       $user_input = fgets($fp, 10);
+       
+       if (strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') {
+               /*  
+                * Collect information about the host system for our report
+                * Fetch phpinfo() output so that we can see the PHP enviroment
+                * Make an archive of all the failed tests
+                * Send an email
+                */
+               
+               $failed_tests_data = '';
+               $sep = "\n" . str_repeat('=', 80) . "\n";
+               
+               $failed_tests_data .= "Automake:\n". shell_exec('automake --version'). 
+"\n";
+               $failed_tests_data .= "Autoconf:\n". shell_exec('autoconf --version'). 
+"\n";
+               $failed_tests_data .= "Libtool:\n". shell_exec('libtool --version'). 
+"\n";
+               $failed_tests_data .= "Bison:\n". shell_exec('bison --version'). "\n";
+               $failed_tests_data .= "Compiler:\n". shell_exec('cc --version'). "\n";
+               $failed_tests_data .= "\n\n";
+               
+               foreach ($GLOBALS['__PHP_FAILED_TESTS__'] as $test_info) {
+                       $failed_tests_data .= $sep . $test_info['name'];
+                       $failed_tests_data .= $sep . 
+file_get_contents(realpath($test_info['output']));
+                       $failed_tests_data .= $sep . 
+file_get_contents(realpath($test_info['diff']));
+                       $failed_tests_data .= $sep . "\n\n";
+               }
+               
+               $failed_tests_data .= $sep . "PHPINFO" . $sep;
+               $failed_tests_data .= shell_exec($php.' -i');
+               
+               $compression = 0;
+               
+               if (!mail_qa_team($failed_tests_data, $compression)) {
+                       $output_file = 'php_test_results_' . date('Ymd') . ( 
+$compression ? '.txt.gz' : '.txt' );
+                       $fp = fopen($output_file, "w");
+                       fwrite($fp, $failed_tests_data);
+                       fclose($fp);
+               
+                       echo "\nThe test script was unable to automatically send the 
+report to PHP's QA Team\nPlease send ".$output_file." to ".PHP_QA_EMAIL." manually, 
+thank you.\n";
+               } else {
+                       fwrite($fp, "\nThank you for helping to make PHP better.\n");
+                       fclose($fp);
+               }       
+       }
+}
+ 
+//
+// Send Email to QA Team
+//
+
+function mail_qa_team($data, $compression)
+{
+       $url_bits = parse_url(QA_SUBMISSION_PAGE);
+       if (empty($url_bits['port'])) $url_bits['port'] = 80;
+       
+       $data = urlencode(base64_encode(preg_replace("/[\\x00]/", "[0x0]", $data)));
+       $data_length = strlen($data);
+       
+       $fs = fsockopen($url_bits['host'], $url_bits['port'], $errno, $errstr, 10);
+       if (!$fs) {
+               return FALSE;
+       }
+
+       echo "Posting to {$url_bits['host']} {$url_bits['path']}\n";
+       fwrite($fs, "POST ".$url_bits['path']." HTTP/1.1\r\n");
+       fwrite($fs, "Host: ".$url_bits['host']."\r\n");
+       fwrite($fs, "User-Agent: QA Browser 0.1\r\n");
+       fwrite($fs, "Content-Type: application/x-www-form-urlencoded\r\n");
+       fwrite($fs, "Content-Length: ".$data_length."\r\n\r\n");
+       fwrite($fs, "php_test_data=".$data);
+       fwrite($fs, "\r\n\r\n");
+       fflush($fs);
+       fclose($fs);
+
+       return 1;
+} 
+ 
+ 
 //
 //  Write the given text to a temporary file, and return the filename.
 //
@@ -343,8 +427,23 @@
                }
        }
 
+       // Default ini settings
+       $settings = array (
+               "-d 'open_basedir='",
+               "-d 'disable_functions='",
+               "-d 'error_reporting=2047'",
+               "-d 'display_errors=1'",
+               "-d 'html_errors=0'",
+               "-d 'docref_root=/phpmanual/'",
+               "-d 'docref_ext=.html'",
+               "-d 'error_prepend_string='",
+               "-d 'error_append_string='",
+               "-d 'auto_append_file='",
+               "-d 'auto_prepend_file='",
+       );
+       $ini_settings = ' '. join (' ', $settings);
+
        // Any special ini settings
-       $ini_settings = '';
        if (array_key_exists('INI', $section_text)) {
                foreach(preg_split( "/[\n\r]+/", $section_text['INI']) as $setting) {
                        if (strlen($setting)) {
@@ -441,6 +540,11 @@
        // Test failed so we need to report details.
        echo "FAIL $tested\n";
 
+       $GLOBALS['__PHP_FAILED_TESTS__'][] = array(
+                                               'name' => $file,
+                                               'output' => 
+ereg_replace('\.phpt$','.log', $file),
+                                               'diff'   => 
+ereg_replace('\.phpt$','.diff', $file)
+                                               );
 
        // write .exp
        if (strpos($log_format,'E') !== FALSE) {



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to