Skip to content

Latest commit

 

History

History
 
 

reports

Database format
---------------
In db/ folder, there is one file for each PHP version.
The sqlite files CANNOT be access directly (forced to use the report interface).

Each sqlite file has the following schema :

CREATE TABLE failed (
    `id` integer PRIMARY KEY AUTOINCREMENT,
    `id_report` bigint(20) NOT NULL,
    `test_name` varchar(128) NOT NULL,
    `output` STRING NOT NULL,
    `diff` STRING NOT NULL,
    `signature` binary(16) NOT NULL
)
CREATE TABLE reports (
    id integer primary key AUTOINCREMENT,
    date datetime NOT NULL,
    status smallint(1) not null,
    nb_failed unsigned int(10)  NOT NULL,
    nb_expected_fail unsigned int(10)  NOT NULL,
    build_env STRING NOT NULL,
    phpinfo STRING NOT NULL,
    user_email varchar(64) default null
)

The SQLite file is created in parserfunc.php:insertToDb_phpmaketest()
if the sqlite file '$VERSION.sqlite' does not exist.

Each report adds a line in `reports` table with the following fields :
  - id : integer auto incremented
  - date : date the report was sent
  - status : 0 = failed, 1 = success. If status is something else (should not !), we exit()
  - nb_failed : number of tests failed
  - nb_expected_fail : number of expected failed tests
  - build_env : build environment
  - phpinfo : phpinfo() output
  - user_email : email mangled (user at domain dot com)

Then, for each failed test, we add a line in `failed` table :
 - id : integer auto increment
 - id_report : id of the report
 - test_name : path of the test. Example : "/ext/hash/tests/mhash_001.phpt"
 - output : full output of test
 - diff : diff of test compared to what was expected. There may be some glitches with spaces and %s
 - signature : binary(16) built with md5($name.'__'.$test['diff'])
   In URLs, the binary md5 is transformed as base64 (like 03410e89b1d2737ce178a795f298ae64).
   It is used to track differencies between each failed test in DB : we compare only the signature,
   which is simpler than checking every diff.


When do we have new reports ?
-----------------------------
When you do a 'make test' on your PHP sourcedir, you can send a report when something went wrong.
If you do this, the test program will build a flat file containing all failed tests output/diff
and send it to https://qa.php.net/buildtest-process.php (via POST method).
Previously, this page only sent the report to a dedicated mailing list (qa-reports at lists.php.net).
We now add a parser that intercept the data and send it to the function located in
reports/parserfunc.php:parse_phpmaketest()
This function transforms (with much regexp) the data (a big string in php format) to an array.
This array is then given to reports/parserfunc.php:insertToDb_phpmaketest() that insert it to the
sqlite file for this PHP version.


What's planned ?
----------------
So much to do... and so little time (Batman). Please take a look at todo.txt