Author: cfinck
Date: Wed Feb 25 01:24:06 2009
New Revision: 39743
URL:
http://svn.reactos.org/svn/reactos?rev=39743&view=rev
Log:
- Add a BuildBot aggregator script for getting the test result information from the
BuildBot logs
- Make the WineTest class functions more general, so that they can be used for the
aggregator script
- Show the comment in the results (option added to rosautotest in r39698)
- Add an option to search for test results by user
- Make the result information order consistent
- Support searching for results by pressing the Return key
- Update translations accordingly (Polish translation updated by Mariusz Przybylski,
pay7n(a)o2.pl)
- Add "utils.php" to the Web Service for sharing stuff between different
callers
- Coding style adjustments: Use camelCase for class functions as it's done in
Danny's RosCMS v4
Added:
trunk/web/reactos.org/htdocs/testman/webservice/buildbot_aggregator.php (with
props)
trunk/web/reactos.org/htdocs/testman/webservice/utils.inc.php (with props)
Modified:
trunk/web/reactos.org/htdocs/shared/lang/pl.inc.php
trunk/web/reactos.org/htdocs/testman/ajax-search.php
trunk/web/reactos.org/htdocs/testman/compare.php
trunk/web/reactos.org/htdocs/testman/detail.php
trunk/web/reactos.org/htdocs/testman/index.php
trunk/web/reactos.org/htdocs/testman/js/index.js.php
trunk/web/reactos.org/htdocs/testman/lang/de.inc.php
trunk/web/reactos.org/htdocs/testman/lang/en.inc.php
trunk/web/reactos.org/htdocs/testman/lang/pl.inc.php
trunk/web/reactos.org/htdocs/testman/webservice/index.php
trunk/web/reactos.org/htdocs/testman/webservice/lib/WineTest.class.php
Modified:
trunk/web/reactos.org/htdocs/shared/lang/pl.inc.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/shared/lang…
==============================================================================
---
trunk/web/reactos.org/htdocs/shared/lang/pl.inc.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/shared/lang/pl.inc.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -6,6 +6,7 @@
COPYRIGHT: Copyright 2008-2009 Colin Finck <colin(a)reactos.org>
TRANSLATOR: Maciej Bialas
Olaf Siejka
+ Mariusz Przybylski
charset=utf-8 without BOM
*/
@@ -13,7 +14,7 @@
$shared_langres = array(
"language" => "JÄzyk",
- "rangeinfo" => "Możesz wprowadziÄ numer wersji (np. %s) lub
przedziaÅ wersji (np. %s-%s)",
+ "rangeinfo" => "Możesz wprowadziÄ numer rewizji (np. %s) lub
przedziaÅ rewizji (np. %s-%s)",
"firstpage_title" => "Przejdź do pierwszej strony",
"prevpage_title" => "Poprzednia strona",
Modified:
trunk/web/reactos.org/htdocs/testman/ajax-search.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/aja…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/ajax-search.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/ajax-search.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -8,7 +8,7 @@
header("Content-type: text/xml");
- if(!isset($_GET["startrev"]) || !isset($_GET["endrev"]) ||
!isset($_GET["platform"]))
+ if(!isset($_GET["startrev"]) || !isset($_GET["endrev"]) ||
!isset($_GET["user"]) || !isset($_GET["platform"]))
die("<error>Necessary information not specified!</error>");
@@ -28,28 +28,33 @@
// Prepare the WHERE clause
$where = "";
- if($_GET["startrev"] || $_GET["startid"] ||
$_GET["platform"])
+ if($_GET["startrev"] || $_GET["startid"] || $_GET["user"]
|| $_GET["platform"])
{
// Begin the WHERE clause with "WHERE 1 ", so we can begin all following
statements with AND :-)
$where = "WHERE 1 ";
if($_GET["startrev"])
- $where .= "AND revision >= " . (int)$_GET["startrev"] . "
AND revision <= " . (int)$_GET["endrev"] . " ";
+ $where .= "AND r.revision >= " . (int)$_GET["startrev"] .
" AND r.revision <= " . (int)$_GET["endrev"] . " ";
if($_GET["startid"])
- $where .= "AND id >= " . (int)$_GET["startid"] . "
";
+ $where .= "AND r.id >= " . (int)$_GET["startid"] . "
";
+
+ if($_GET["user"])
+ $where .= "AND u.user_name LIKE " . $dbh->quote($_GET["user"] .
"%") . " ";
if($_GET["platform"])
- $where .= "AND platform LIKE " . $dbh->quote($_GET["platform"]
. "%") . " ";
+ $where .= "AND r.platform LIKE " .
$dbh->quote($_GET["platform"] . "%") . " ";
}
- // Prepare the ORDER clause
+ // Prepare some clauses
+ $tables = "FROM " . DB_TESTMAN . ".winetest_runs r JOIN " .
DB_ROSCMS . ".users u ON r.user_id = u.user_id ";
$order = "ORDER BY revision ASC, id ASC ";
echo "<results>";
// First determine how many results we would get in total with this query
- $stmt = $dbh->query("SELECT COUNT(*) FROM " . DB_TESTMAN .
".winetest_runs " . $where) or die("<error>Query failed
#1</error>");
+ $stmt = $dbh->query("SELECT COUNT(*) " . $tables . $where) or
die("<error>Query failed #1</error>");
+
$result_count = $stmt->fetchColumn();
if($result_count > RESULTS_PER_PAGE)
@@ -76,11 +81,8 @@
if($_GET["resultlist"])
{
$stmt = $dbh->query(
- "SELECT r.id, UNIX_TIMESTAMP(r.timestamp) timestamp, u.user_name, r.revision,
r.platform " .
- "FROM " . DB_TESTMAN . ".winetest_runs r " .
- "JOIN " . DB_ROSCMS . ".users u ON r.user_id = u.user_id " .
- $where .
- $order .
+ "SELECT r.id, UNIX_TIMESTAMP(r.timestamp) timestamp, u.user_name, r.revision,
r.platform, r.comment " .
+ $tables . $where . $order .
"LIMIT " . RESULTS_PER_PAGE
) or die("<error>Query failed #2</error>");
@@ -101,6 +103,7 @@
printf("<user>%s</user>",
htmlspecialchars($row["user_name"]));
printf("<revision>%d</revision>", $row["revision"]);
printf("<platform>%s</platform>",
GetPlatformString($row["platform"]));
+ printf("<comment>%s</comment>",
htmlspecialchars($row["comment"]));
echo "</result>";
$last_revision = $row["revision"];
@@ -109,16 +112,17 @@
else
{
// Get the first and last revision belonging to this call
- $stmt = $dbh->query("SELECT id, revision FROM " . DB_TESTMAN .
".winetest_runs " . $where . $order . "LIMIT 1") or
die("<error>Query failed #3</error>");
+ $stmt = $dbh->query("SELECT r.id, r.revision " . $tables . $where
. $order . "LIMIT 1") or die("<error>Query failed
#3</error>");
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$first_id = $row["id"];
$first_revision = $row["revision"];
- $stmt = $dbh->query("SELECT revision FROM " . DB_TESTMAN .
".winetest_runs " . $where . $order . "LIMIT " . ($result_count - 1) .
", 1") or die("<error>Query failed #4</error>");
+ $stmt = $dbh->query("SELECT r.revision " . $tables . $where . $order .
"LIMIT " . ($result_count - 1) . ", 1") or
die("<error>Query failed #4</error>");
$last_revision = $stmt->fetchColumn();
}
- $stmt = $dbh->query("SELECT id FROM " . DB_TESTMAN . ".winetest_runs
" . $where . $order . "LIMIT " . $result_count . ", 1") or
die("<error>Query failed #5</error>");
+ // Get the next ID (= the first ID after our limit)
+ $stmt = $dbh->query("SELECT r.id " . $tables . $where . $order .
"LIMIT " . $result_count . ", 1") or die("<error>Query
failed #5</error>");
$next_id = $stmt->fetchColumn();
}
Modified:
trunk/web/reactos.org/htdocs/testman/compare.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/com…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/compare.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/compare.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -170,7 +170,7 @@
$row = $stmt->fetch(PDO::FETCH_ASSOC);
echo '<th onmousedown="ResultHead_OnMouseDown(this)">';
- printf($testman_langres["resulthead"], $row["revision"],
GetPlatformString($row["platform"]), $row["user_name"],
GetDateString($row["timestamp"]));
+ printf($testman_langres["resulthead"], $row["revision"],
GetDateString($row["timestamp"]), $row["user_name"],
GetPlatformString($row["platform"]));
echo '</th>';
}
Modified:
trunk/web/reactos.org/htdocs/testman/detail.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/det…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/detail.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/detail.php [iso-8859-1] Wed Feb 25 01:24:06 2009
@@ -53,7 +53,7 @@
// Get information about this result
$stmt = $dbh->prepare(
- "SELECT e.log, e.count, e.todo, e.failures, e.skipped, s.module, s.test,
UNIX_TIMESTAMP(r.timestamp) timestamp, r.revision, r.platform, u.user_name " .
+ "SELECT e.log, e.count, e.todo, e.failures, e.skipped, s.module, s.test,
UNIX_TIMESTAMP(r.timestamp) timestamp, r.revision, r.platform, u.user_name, r.comment
" .
"FROM " . DB_TESTMAN . ".winetest_results e " .
"JOIN " . DB_TESTMAN . ".winetest_suites s ON e.suite_id = s.id "
.
"JOIN " . DB_TESTMAN . ".winetest_runs r ON e.test_id = r.id " .
@@ -106,16 +106,20 @@
<td><?php echo $row["revision"]; ?></td>
</tr>
<tr class="odd" onmouseover="Row_OnMouseOver(this)"
onmouseout="Row_OnMouseOut(this)">
- <td class="info"><?php echo $testman_langres["platform"];
?>:</td>
- <td><?php echo GetPlatformString($row["platform"]);
?></td>
+ <td class="info"><?php echo $testman_langres["date"];
?>:</td>
+ <td><?php echo GetDateString($row["timestamp"]); ?></td>
</tr>
<tr class="even" onmouseover="Row_OnMouseOver(this)"
onmouseout="Row_OnMouseOut(this)">
<td class="info"><?php echo $testman_langres["user"];
?>:</td>
<td><?php echo $row["user_name"]; ?></td>
</tr>
<tr class="odd" onmouseover="Row_OnMouseOver(this)"
onmouseout="Row_OnMouseOut(this)">
- <td class="info"><?php echo $testman_langres["date"];
?>:</td>
- <td><?php echo GetDateString($row["timestamp"]); ?></td>
+ <td class="info"><?php echo $testman_langres["platform"];
?>:</td>
+ <td><?php echo GetPlatformString($row["platform"]);
?></td>
+ </tr>
+ <tr class="even" onmouseover="Row_OnMouseOver(this)"
onmouseout="Row_OnMouseOut(this)">
+ <td class="info"><?php echo $testman_langres["comment"];
?>:</td>
+ <td><?php echo GetPlatformString($row["comment"]); ?></td>
</tr>
</table>
Modified:
trunk/web/reactos.org/htdocs/testman/index.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/ind…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/index.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/index.php [iso-8859-1] Wed Feb 25 01:24:06 2009
@@ -93,10 +93,11 @@
<thead>
<tr class="head">
<th class="TestCheckbox"></th>
+ <th><?php echo $testman_langres["revision"];
?></th>
<th><?php echo $testman_langres["date"]; ?></th>
- <th><?php echo $testman_langres["revision"];
?></th>
<th><?php echo $testman_langres["user"]; ?></th>
<th><?php echo $testman_langres["platform"];
?></th>
+ <th><?php echo $testman_langres["comment"]; ?></th>
</tr>
</thead>
<tbody>
@@ -112,7 +113,7 @@
}
$stmt = $dbh->query(
- "SELECT r.id, UNIX_TIMESTAMP(r.timestamp) timestamp, u.user_name,
r.revision, r.platform " .
+ "SELECT r.id, UNIX_TIMESTAMP(r.timestamp) timestamp, u.user_name,
r.revision, r.platform, r.comment " .
"FROM " . DB_TESTMAN . ".winetest_runs r " .
"JOIN " . DB_ROSCMS . ".users u ON r.user_id = u.user_id "
.
"ORDER BY revision DESC, id DESC " .
@@ -128,10 +129,11 @@
printf('<tr class="%s"
onmouseover="Result_OnMouseOver(this)"
onmouseout="Result_OnMouseOut(this)">', ($oddeven ? "odd" :
"even"));
printf('<td><input
onclick="Result_OnCheckboxClick(this)" type="checkbox"
name="test_%s" /></td>', $row["id"]);
+ printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
$row["revision"]);
printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
GetDateString($row["timestamp"]));
- printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
$row["revision"]);
printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
htmlspecialchars($row["user_name"]));
printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
GetPlatformString($row["platform"]));
+ printf('<td
onclick="Result_OnCellClick(this)">%s</td>',
htmlspecialchars($row["comment"]));
echo "</tr>";
$oddeven = !$oddeven;
@@ -170,17 +172,23 @@
<table id="searchform">
<tr>
- <td><?php echo $testman_langres["search_revision"];
?>:</td>
+ <td><?php echo $testman_langres["revision"];
?>:</td>
<td>
- <input type="text" id="search_revision"
value="" size="12"
onkeyup="SearchRevisionInput_OnKeyUp(this)" /><br />
+ <input type="text" id="search_revision"
value="" size="12"
onkeypress="SearchInputs_OnKeyPress(event)"
onkeyup="SearchRevisionInput_OnKeyUp(this)" /><br />
<img src="../shared/images/info.gif" alt="" />
<?php printf($shared_langres["rangeinfo"], $rev, ($rev - 50), $rev); ?>
</td>
</tr>
<tr>
- <td><?php echo $testman_langres["search_platform"];
?>:</td>
+ <td><?php echo $testman_langres["user"]; ?>:</td>
<td>
- <select id="search_platform" size="1">
+ <input type="text" id="search_user" value=""
size="24" onkeypress="SearchInputs_OnKeyPress(event)" />
+ </td>
+ </tr>
+ <tr>
+ <td><?php echo $testman_langres["platform"];
?>:</td>
+ <td>
+ <select id="search_platform" size="1"
onkeypress="SearchInputs_OnKeyPress(event)">
<option></option>
<option value="reactos">ReactOS</option>
<option value="5.0">Windows 2000</option>
Modified:
trunk/web/reactos.org/htdocs/testman/js/index.js.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/js/…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/js/index.js.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/js/index.js.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -106,6 +106,19 @@
UpdateSelectedResults(checkbox);
}
+function SearchInputs_OnKeyPress(event)
+{
+ // IE vs. other browsers again
+ if(window.event)
+ var KeyCode = window.event.keyCode;
+ else
+ var KeyCode = event.which;
+
+ // Submit the search form in case the user pressed the Return key
+ if(KeyCode == 13)
+ SearchButton_OnClick();
+}
+
function SearchRevisionInput_OnKeyUp(elem)
{
var val = elem.value.replace(/[^[0-9-]/g, "");
@@ -172,12 +185,23 @@
data["startrev"] = inputbox_startrev;
data["endrev"] = inputbox_endrev;
+ data["user"] = document.getElementById("search_user").value;
data["platform"] =
document.getElementById("search_platform").value;
data["resultlist"] = 1;
data["requesttype"] = REQUESTTYPE_FULLLOAD;
SearchCall();
+}
+
+function GetTagData(RootElement, TagName)
+{
+ var Child = RootElement.getElementsByTagName(TagName)[0].firstChild;
+
+ if(!Child)
+ return "";
+
+ return Child.data;
}
function SearchCallback(HttpRequest)
@@ -258,10 +282,11 @@
html += '<thead><tr class="head">';
html += '<th class="TestCheckbox"><\/th>';
+ html += '<th><?php echo
addslashes($testman_langres["revision"]); ?><\/th>';
html += '<th><?php echo addslashes($testman_langres["date"]);
?><\/th>';
- html += '<th><?php echo
addslashes($testman_langres["revision"]); ?><\/th>';
html += '<th><?php echo addslashes($testman_langres["user"]);
?><\/th>';
html += '<th><?php echo
addslashes($testman_langres["platform"]); ?><\/th>';
+ html += '<th><?php echo addslashes($testman_langres["comment"]);
?><\/th>';
html += '<\/tr><\/thead>';
html += '<tbody>';
@@ -277,18 +302,20 @@
for(var i = 0; i < results.length; i++)
{
- var ResultID = results[i].getElementsByTagName("id")[0].firstChild.data;
- var ResultDate =
results[i].getElementsByTagName("date")[0].firstChild.data;
- var ResultUser =
results[i].getElementsByTagName("user")[0].firstChild.data;
- var ResultRevision =
results[i].getElementsByTagName("revision")[0].firstChild.data;
- var ResultPlatform =
results[i].getElementsByTagName("platform")[0].firstChild.data;
+ var ResultID = GetTagData(results[i], "id");
+ var ResultRevision = GetTagData(results[i], "revision");
+ var ResultDate = GetTagData(results[i], "date");
+ var ResultUser = GetTagData(results[i], "user");
+ var ResultPlatform = GetTagData(results[i], "platform");
+ var ResultComment = GetTagData(results[i], "comment");
html += '<tr class="' + (oddeven ? "odd" :
"even") + '" onmouseover="Result_OnMouseOver(this)"
onmouseout="Result_OnMouseOut(this)">';
html += '<td><input onclick="Result_OnCheckboxClick(this)"
type="checkbox" name="test_' + ResultID + '"
\/><\/td>';
+ html += '<td onclick="Result_OnCellClick(this)">' +
ResultRevision + '<\/td>';
html += '<td onclick="Result_OnCellClick(this)">' +
ResultDate + '<\/td>';
- html += '<td onclick="Result_OnCellClick(this)">' +
ResultRevision + '<\/td>';
html += '<td onclick="Result_OnCellClick(this)">' +
ResultUser + '<\/td>';
html += '<td onclick="Result_OnCellClick(this)">' +
ResultPlatform + '<\/td>';
+ html += '<td onclick="Result_OnCellClick(this)">' +
ResultComment + '<\/td>';
html += '<\/tr>';
oddeven = !oddeven;
Modified:
trunk/web/reactos.org/htdocs/testman/lang/de.inc.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/lan…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/lang/de.inc.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/lang/de.inc.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -21,12 +21,11 @@
"revision" => "Revision",
"user" => "Benutzer",
"platform" => "Plattform",
+ "comment" => "Kommentar",
"search_header" => "Nach Testergebnissen suchen",
- "search_revision" => "Revision",
- "search_platform" => "Plattform",
"search_button" => "Suchen",
- "searching" => "Testergebnisse werden gesucht...",
+ "searching" => "Testergebnisse werden gesucht",
"foundresults" => "%s Ergebnisse gefunden!",
"noresults" => "Keine Suchergebnisse!",
@@ -49,13 +48,13 @@
"difference" => "Unterschied zum vorherigen Ergebnis",
"testsuite" => "Test Suite",
- "resulthead" => "Revision %d<br />unter %s<br />von
%s<br />am %s",
+ "resulthead" => "Revision %d<br />am %s<br />von %s<br
/>unter %s",
// Result Details page
"detail_title" => "Ergebnis-Details",
"thisresult" => "Informationen über dieses Ergebnis",
"log" => "Log",
- "associatedtest" => "Information über den zugeordneten Test",
+ "associatedtest" => "Informationen über den zugeordneten
Test",
);
?>
Modified:
trunk/web/reactos.org/htdocs/testman/lang/en.inc.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/lan…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/lang/en.inc.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/lang/en.inc.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -21,11 +21,9 @@
"revision" => "Revision",
"user" => "User",
"platform" => "Platform",
+ "comment" => "Comment",
"search_header" => "Search for Test Results",
- "search_revision" => "Revision",
- "rangeinfo" => "You can enter a revision number (e.g. %s) or a
revision range (e.g. %s-%s)",
- "search_platform" => "Platform",
"search_button" => "Search",
"searching" => "Searching for Test Results",
@@ -50,7 +48,7 @@
"difference" => "Difference to the previous result",
"testsuite" => "Test Suite",
- "resulthead" => "Revision %d<br />under %s<br />by
%s<br />at %s",
+ "resulthead" => "Revision %d<br />at %s<br />by %s<br
/>under %s",
// Result Details page
"detail_title" => "Result Details",
Modified:
trunk/web/reactos.org/htdocs/testman/lang/pl.inc.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/lan…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/lang/pl.inc.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/lang/pl.inc.php [iso-8859-1] Wed Feb 25 01:24:06
2009
@@ -5,6 +5,7 @@
PURPOSE: Translation
COPYRIGHT: Copyright 2008-2009 Colin Finck <colin(a)reactos.org>
TRANSLATOR: Maciej Bialas
+ Mariusz Przybylski
charset=utf-8 without BOM
*/
@@ -16,23 +17,21 @@
"index_intro" => "Ten interfejs pozwala Tobie znaleźÄ, zobaczyÄ i
porównaÄ wyniki przeprowadzanych automatycznie testów regresji.",
"js_disclaimer" => "Musisz wÅÄ
czyÄ obsÅugÄ JavaScriptu, aby używaÄ tego interfejsu!",
- "lastresults_header" => "Ostatnich 10 wyników testów",
+ "lastresults_header" => "10 ostatnich wyników testów",
"date" => "Data",
- "revision" => "Wydanie",
+ "revision" => "Rewizja",
"user" => "Użytkownik",
"platform" => "Platforma",
+ "comment" => "Komentarz",
- "search_header" => "Szukaj w wynikach testów",
- "search_revision" => "Wydanie",
- "rangeinfo" => "Możesz wprowadziÄ numer wydania (np. %s) lub
przedziaÅ (np. %s-%s)",
- "search_platform" => "Platforma",
+ "search_header" => "Szukaj wyników testów",
"search_button" => "Szukaj",
"searching" => "Trwa szukanie w wynikach testów",
"foundresults" => "Znaleziono %s wyników!",
"noresults" => "Brak wyników wyszukiwania!",
- "status" => "<b>%s</b> testów zaznaczonych do
porównania",
+ "status" => "<b>%s</b> testów wybranych do
porównania",
"compare_button" => "Porównaj",
"noselection" => "Nie wybraÅeÅ/aŠżadnych wyników!",
@@ -45,18 +44,18 @@
"legend" => "Legenda",
"totaltests" => "Wszystkie testy",
"failedtests" => "Nieudane",
- "todotests" => "Oznaczone jako ToDo",
+ "todotests" => "Oznaczone jako TODO",
"skippedtests" => "PominiÄte",
"difference" => "Różnica wzglÄdem poprzedniego wyniku",
"testsuite" => "Zestaw testów",
- "resulthead" => "Wydanie %d<br />pod %s<br />przez
%s<br /> %s",
+ "resulthead" => "Rewizja %d<br />dnia %s<br />przez
%s<br /> na %s",
// Result Details page
- "detail_title" => "SzczegóÅy wyników",
+ "detail_title" => "SzczegóÅy wyniku",
- "thisresult" => "Informacje o tych wynikach",
+ "thisresult" => "Informacje o tym wyniku",
"log" => "Dziennik",
- "associatedtest" => "Informacja o powiÄ
zanych testach",
+ "associatedtest" => "Informacje o powiÄ
zanym teÅcie",
);
?>
Added:
trunk/web/reactos.org/htdocs/testman/webservice/buildbot_aggregator.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/web…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/webservice/buildbot_aggregator.php (added)
+++
trunk/web/reactos.org/htdocs/testman/webservice/buildbot_aggregator.php [iso-8859-1]
Wed Feb 25 01:24:06 2009
@@ -1,0 +1,122 @@
+<?php
+/*
+ PROJECT: ReactOS Web Test Manager
+ LICENSE: GNU GPLv2 or any later version as published by the Free Software
Foundation
+ PURPOSE: Aggregator for the Debug Log of ReactOS BuildBot Buildslaves
+ COPYRIGHT: Copyright 2009 Colin Finck <colin(a)reactos.org>
+*/
+
+ require_once("../config.inc.php");
+ require_once("utils.inc.php");
+
+ if(!isset($_GET["username"]) || !isset($_GET["password"]) ||
!isset($_GET["slavename"]) || !is_numeric($_GET["platform"]) ||
!is_numeric($_GET["build"]))
+ die("Necessary information not specified!");
+
+ try
+ {
+ $dbh = new PDO("mysql:host=" . DB_HOST, DB_USER, DB_PASS);
+ }
+ catch(PDOException $e)
+ {
+ // Give no exact error message here, so no server internals are exposed
+ die("Could not establish the DB connection");
+ }
+
+ $user_id = VerifyLogin($_GET["username"], $_GET["password"]);
+
+ // Make sure nobody runs this script multiple times for the same build
+ $stmt = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TESTMAN .
".winetest_runs WHERE comment = :comment");
+ $stmt->bindValue(":comment", "Build " .
$_GET["build"]);
+ $stmt->execute() or die("SQL failed #1");
+
+ if($stmt->fetchColumn())
+ die("The script already processed this build before!");
+
+ // Read the Buildslave test log
+ $fp = @fopen("http://reactos.org:8010/builders/" .
$_GET["slavename"] . "/builds/" . $_GET["build"] .
"/steps/test/logs/stdio/text", "r");
+
+ if(!$fp)
+ die("Could not open the test log!");
+
+ // Get the revision
+ do
+ {
+ $line = fgets($fp);
+ }
+ while(!preg_match("#.+ ReactOS .+ \(Build [0-9]+-r([0-9]+)\)#", $line,
$matches) && !feof($fp));
+
+ $revision = $matches[1];
+
+ if(!$revision)
+ die("Got no revision");
+
+ // Create a WineTest object for accessing the database
+ $t = new WineTest();
+
+
+ // Get the log for each test
+ $line = "";
+ $test_id = 0;
+
+ while(!feof($fp))
+ {
+ // Find the line with the test information
+ while(substr($line, 0, 27) != "Running Wine Test, Module: " &&
!feof($fp))
+ $line = fgets($fp);
+
+ // We might reach end of file here, we're done in this case
+ if(feof($fp))
+ break;
+
+ // Parse the test line
+ if(!preg_match("#Running Wine Test, Module: (.+), Test: (.+)#", $line,
$matches))
+ die("Wine Test line is invalid!");
+
+ // Get a Suite ID for this combination
+ $suite_id = $t->getSuiteId($matches[1], $matches[2]);
+
+ // If an error occured, $suite_id will contain the error message
+ if(!is_numeric($suite_id))
+ die($suite_id);
+
+ // Now get the real log
+ $log = "";
+
+ do
+ {
+ $line = fgets($fp);
+
+ // If this test misses the summary line for some reason, check whether we reached the
next test already.
+ // If so, already break the loop here, so that this line won't be on the log for
this test.
+ if(substr($line, 0, 27) == "Running Wine Test, Module: ")
+ break;
+
+ $log .= $line;
+ }
+ while(strpos($line, " tests executed (") === false && substr($line,
0, 9) != "[SYSREG] " && !feof($fp));
+
+ // Did we already get a Test ID for this run?
+ if(!$test_id)
+ {
+ $test_id = $t->getTestId($revision, "reactos." .
$_GET["platform"], "Build " . $_GET["build"]);
+
+ // If an error occured, $test_id will contain the error message
+ if(!is_numeric($test_id))
+ die($test_id);
+ }
+
+ // Finally submit the log
+ $return = $t->submit($test_id, $suite_id, $log);
+
+ // If an error occured, $return will contain the error message
+ if($return != "OK")
+ die($return);
+ }
+
+ // If we have a Test ID, finish this test run and terminate with the return message from
that function
+ // Otherwise we couldn't find any test information in this log
+ if($test_id)
+ die($t->finish($test_id));
+ else
+ die("Found no test information in this log!");
+?>
Propchange:
trunk/web/reactos.org/htdocs/testman/webservice/buildbot_aggregator.php
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
trunk/web/reactos.org/htdocs/testman/webservice/index.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/web…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/webservice/index.php [iso-8859-1] (original)
+++
trunk/web/reactos.org/htdocs/testman/webservice/index.php [iso-8859-1] Wed Feb 25
01:24:06 2009
@@ -7,27 +7,11 @@
*/
require_once("../config.inc.php");
+ require_once("utils.inc.php");
- // All classes are autoloaded through this magic function
- function __autoload($class)
- {
- require_once("lib/$class.class.php");
- }
-
- // What one of these classes has to look like
- interface Test
- {
- public function GetTestID();
- public function Submit();
- public function Finish();
- }
-
-
- // Entry point
if(!isset($_POST["username"]) || !isset($_POST["password"]) ||
!isset($_POST["testtype"]))
die("Necessary information not specified!");
- // Check the login credentials
try
{
$dbh = new PDO("mysql:host=" . DB_HOST, DB_USER, DB_PASS);
@@ -37,23 +21,8 @@
// Give no exact error message here, so no server internals are exposed
die("Could not establish the DB connection");
}
-
- $stmt = $dbh->prepare("SELECT user_id FROM " . DB_ROSCMS . ".users
WHERE user_name = :username AND user_roscms_password = MD5(:password) AND
user_account_enabled = 'yes'");
- $stmt->bindParam(":username", $_POST["username"]);
- $stmt->bindParam(":password", $_POST["password"]);
- $stmt->execute() or die("SQL failed #1");
- $user_id = (int)$stmt->fetchColumn();
- if(!$user_id)
- die("Invalid Login credentials!");
-
- // Check if the user is permitted to submit test results
- $stmt = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TESTMAN .
".permitted_users WHERE user_id = :userid");
- $stmt->bindParam(":userid", $user_id);
- $stmt->execute() or die("SQL failed #2");
-
- if(!$stmt->fetchColumn())
- die("User is not permitted to submit test results");
+ $user_id = VerifyLogin($_POST["username"], $_POST["password"]);
switch($_POST["testtype"])
{
@@ -68,10 +37,10 @@
// What shall we do?
switch($_POST["action"])
{
- case "gettestid": die($t->GetTestID());
- case "getsuiteid": die($t->GetSuiteID());
- case "submit": die($t->Submit());
- case "finish": die($t->Finish());
+ case "gettestid": die($t->getTestId($_POST["revision"],
$_POST["platform"], $_POST["comment"]));
+ case "getsuiteid": die($t->getSuiteId($_POST["module"],
$_POST["test"]));
+ case "submit": die($t->submit($_POST["testid"],
$_POST["suiteid"], $_POST["log"]));
+ case "finish": die($t->finish($_POST["testid"]));
default:
die("Invalid action");
Modified:
trunk/web/reactos.org/htdocs/testman/webservice/lib/WineTest.class.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/web…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/webservice/lib/WineTest.class.php [iso-8859-1]
(original)
+++
trunk/web/reactos.org/htdocs/testman/webservice/lib/WineTest.class.php [iso-8859-1]
Wed Feb 25 01:24:06 2009
@@ -8,35 +8,36 @@
class WineTest implements Test
{
- public function GetTestID()
+ public function getTestId($revision, $platform, $comment)
{
global $dbh;
global $user_id;
- if(!isset($_POST["revision"]) || !isset($_POST["platform"]))
+ if(!isset($revision) || !isset($platform))
return "Necessary sub-information not specified!";
// Add a new Test ID with the given information
- $stmt = $dbh->prepare("INSERT INTO " . DB_TESTMAN . ".winetest_runs
(user_id, revision, platform) VALUES (:userid, :revision, :platform)");
+ $stmt = $dbh->prepare("INSERT INTO " . DB_TESTMAN . ".winetest_runs
(user_id, revision, platform, comment) VALUES (:userid, :revision, :platform,
:comment)");
$stmt->bindParam(":userid", $user_id);
- $stmt->bindParam(":revision", $_POST["revision"]);
- $stmt->bindParam(":platform", $_POST["platform"]);
+ $stmt->bindParam(":revision", $revision);
+ $stmt->bindParam(":platform", $platform);
+ $stmt->bindParam(":comment", $comment);
$stmt->execute() or die("GetTestID(): SQL failed #1");
return $dbh->lastInsertId();
}
- public function GetSuiteID()
+ public function getSuiteId($module, $test)
{
global $dbh;
- if(!isset($_POST["module"]) || !isset($_POST["test"]))
+ if(!isset($module) || !isset($test))
return "Necessary sub-information not specified!";
// Determine whether we already have a suite ID for this combination
$stmt = $dbh->prepare("SELECT id FROM " . DB_TESTMAN .
".winetest_suites WHERE module = :module AND test = :test");
- $stmt->bindParam(":module", $_POST["module"]);
- $stmt->bindParam(":test", $_POST["test"]);
+ $stmt->bindParam(":module", $module);
+ $stmt->bindParam(":test", $test);
$stmt->execute() or die("GetSuiteID(): SQL failed #1");
$id = $stmt->fetchColumn();
@@ -45,41 +46,48 @@
// Add this combination to the table and return the ID for it
$stmt = $dbh->prepare("INSERT INTO " . DB_TESTMAN .
".winetest_suites (module, test) VALUES (:module, :test)");
- $stmt->bindParam(":module", $_POST["module"]);
- $stmt->bindParam(":test", $_POST["test"]);
+ $stmt->bindParam(":module", $module);
+ $stmt->bindParam(":test", $test);
$stmt->execute() or die("GetSuiteID(): SQL failed #2");
return $dbh->lastInsertId();
}
- public function Submit()
+ public function submit($test_id, $suite_id, $log)
{
global $dbh;
global $user_id;
- if(!isset($_POST["testid"]) || !isset($_POST["suiteid"]) ||
!isset($_POST["log"]))
+ if(!isset($test_id) || !isset($suite_id) || !isset($log))
return "Necessary sub-information not specified!";
// Make sure we may add information to the test with this Test ID
$stmt = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TESTMAN .
".winetest_runs WHERE id = :testid AND finished = 0 AND user_id = :userid");
- $stmt->bindParam(":testid", $_POST["testid"]);
+ $stmt->bindParam(":testid", $test_id);
$stmt->bindParam(":userid", $user_id);
$stmt->execute() or die("Submit(): SQL failed #1");
if(!$stmt->fetchColumn())
return "No such test or no permissions!";
- // Validate and parse the log
- $line = strrchr($_POST["log"], ":");
+ // Parse the log
+ $line = strrchr($log, ":");
- if(sscanf($line, ": %u tests executed (%u marked as todo, %u %s%u skipped.",
$count, $todo, $failures, $ignore, $skipped) != 5)
- return "Log is invalid!";
+ if(!$line || sscanf($line, ": %u tests executed (%u marked as todo, %u %s%u
skipped.", $count, $todo, $failures, $ignore, $skipped) != 5)
+ {
+ // We found no summary line, so the test probably crashed
+ // Indicate this by setting count to -1 and set the rest to zero.
+ $count = -1;
+ $todo = 0;
+ $failures = 0;
+ $skipped = 0;
+ }
// Add the information into the DB
$stmt = $dbh->prepare("INSERT INTO " . DB_TESTMAN .
".winetest_results (test_id, suite_id, log, count, todo, failures, skipped) VALUES
(:testid, :suiteid, :log, :count, :todo, :failures, :skipped)");
- $stmt->bindValue(":testid", (int)$_POST["testid"]);
- $stmt->bindValue(":suiteid", (int)$_POST["suiteid"]);
- $stmt->bindParam(":log", $_POST["log"]);
+ $stmt->bindValue(":testid", (int)$test_id);
+ $stmt->bindValue(":suiteid", (int)$suite_id);
+ $stmt->bindParam(":log", $log);
$stmt->bindParam(":count", $count);
$stmt->bindParam(":todo", $todo);
$stmt->bindParam(":failures", $failures);
@@ -89,18 +97,18 @@
return "OK";
}
- public function Finish()
+ public function finish($test_id)
{
global $dbh;
global $user_id;
- if(!isset($_POST["testid"]))
+ if(!isset($test_id))
return "Necessary sub-information not specified!";
// Mark this test as finished, so no more results can be submitted for it
$stmt = $dbh->prepare("UPDATE " . DB_TESTMAN . ".winetest_runs SET
finished = 1 WHERE id = :testid AND user_id = :userid");
$stmt->bindParam(":userid", $user_id);
- $stmt->bindParam(":testid", $_POST["testid"]);
+ $stmt->bindParam(":testid", $test_id);
$stmt->execute() or die("Finish(): SQL failed #1");
if(!$stmt->rowCount())
Added:
trunk/web/reactos.org/htdocs/testman/webservice/utils.inc.php
URL:
http://svn.reactos.org/svn/reactos/trunk/web/reactos.org/htdocs/testman/web…
==============================================================================
---
trunk/web/reactos.org/htdocs/testman/webservice/utils.inc.php (added)
+++
trunk/web/reactos.org/htdocs/testman/webservice/utils.inc.php [iso-8859-1] Wed Feb 25
01:24:06 2009
@@ -1,0 +1,48 @@
+<?php
+/*
+ PROJECT: ReactOS Web Test Manager
+ LICENSE: GNU GPLv2 or any later version as published by the Free Software
Foundation
+ PURPOSE: Miscellaneous utility functions for the Web Service
+ COPYRIGHT: Copyright 2009 Colin Finck <colin(a)reactos.org>
+*/
+
+ // What one of these classes has to look like
+ interface Test
+ {
+ public function getTestId($revision, $platform, $comment);
+ public function getSuiteId($module, $test);
+ public function submit($test_id, $suite_id, $log);
+ public function finish($test_id);
+ }
+
+ // All classes are autoloaded through this magic function
+ function __autoload($class)
+ {
+ require_once("lib/$class.class.php");
+ }
+
+ function VerifyLogin($username, $password)
+ {
+ global $dbh;
+
+ // Check the login credentials
+ $stmt = $dbh->prepare("SELECT user_id FROM " . DB_ROSCMS . ".users
WHERE user_name = :username AND user_roscms_password = MD5(:password) AND
user_account_enabled = 'yes'");
+ $stmt->bindParam(":username", $username);
+ $stmt->bindParam(":password", $password);
+ $stmt->execute() or die("SQL failed #1");
+ $user_id = (int)$stmt->fetchColumn();
+
+ if(!$user_id)
+ die("Invalid Login credentials!");
+
+ // Check if the user is permitted to submit test results
+ $stmt = $dbh->prepare("SELECT COUNT(*) FROM " . DB_TESTMAN .
".permitted_users WHERE user_id = :userid");
+ $stmt->bindParam(":userid", $user_id);
+ $stmt->execute() or die("SQL failed #2");
+
+ if(!$stmt->fetchColumn())
+ die("User is not permitted to submit test results");
+
+ return $user_id;
+ }
+?>
Propchange:
trunk/web/reactos.org/htdocs/testman/webservice/utils.inc.php
------------------------------------------------------------------------------
svn:eol-style = native