<?php
error_reporting(E_ALL | E_STRICT);
ini_set("track_errors", "On");
$INC = dirname(__FILE__) . "/../inc";
require_once(dirname(__FILE__) . "/config.php");
require_once($INC . "/init.inc.php");
require_once($INC . "/util.inc.php");
require_once("helpers.inc.php");
require_once("http.inc.php");
rg_log_set_file("http_bug.log");
$rg_sql = "host=localhost user=rocketgit dbname=rocketgit connect_timeout=10";
$rg_no_db = TRUE;
require_once("common.php");
$_testns = 'http_bug';
$rg_cache_enable = TRUE;
rg_test_create_user($db, $rg_ui);
rg_test_create_user($db, $rg_ui2);
rg_test_create_repo($db, $rg_ui, $repo);
$r = test_login($test_url, $rg_ui, $good_sid);
if ($r === FALSE)
exit(1);
rg_log("Loading bug form...");
$url = "/user/" . $rg_ui['username'] . "/" . $repo['name'] . "/bug/add";
$headers = array("Cookie: sid=" . $good_sid);
$data = array();
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot load add bug form.');
exit(1);
}
$token = $r['token'];
if (empty($token)) {
rg_log_ml(print_r($r, TRUE));
rg_log("Seems I cannot load a token. See above.");
exit(1);
}
rg_log("Posting bug form (token=$token)...");
$labels = array('a/b', 'uu::bb', '<xss>'); sort($labels);
$data = array('doit' => 1, 'edit' => 1, 'token' => $token,
'title' => 'Title1 space<xss>',
'body' => 'aasasasassa<xss>',
'state' => 1,
'assigned_to' => $rg_ui2['username'],
'labels' => implode(' ', $labels));
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request.');
exit(1);
}
$sql = 'SELECT * FROM bugs WHERE repo_id = ' . $repo['repo_id'];
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
rg_sql_free_result($res);
if ($row['bug_id'] != 1) {
rg_log("Seems the bugs do not start at 1, but " . $row['bug_id']);
exit(1);
}
if ($row['assigned_uid'] != $rg_ui2['uid']) {
rg_log('assigned_uid is not ' . $rg_ui2['uid']
. ', but ' . $row['assigned_uid'] . '!');
exit(1);
}
if ($row['state'] != 1) {
rg_log('State is not 1 but ' . $row['state'] . '!');
exit(1);
}
$sql = 'SELECT * FROM bug_labels WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$g = array();
while (($row = rg_sql_fetch_array($res))) {
$g[] = $row['label'];
}
rg_sql_free_result($res);
sort($g);
$p1 = implode(' ', $labels);
$p2 = implode(' ', $g);
if (strcmp($p1, $p2) != 0) {
rg_log('Labels are different [' . $p1 . '] != [' . $p2 . ']!');
exit(1);
}
rg_log("Testing adding a note");
rg_log("Loading bug/note form...");
$url = "/user/" . $rg_ui['username'] . "/" . $repo['name'] . "/bug/1";
$data = array();
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log("Cannot load bug page.");
exit(1);
}
$token = $r['token'];
rg_log("Posting note add form (token=$token)...");
$note = 'This is a note<xss>';
$data = array('note_add_doit' => 1, 'token' => $token,
'note' => $note);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request.');
exit(1);
}
$sql = 'SELECT * FROM bug_notes WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
rg_sql_free_result($res);
if ($row['note'] != $note) {
rg_log('Note is not ok [' . $note . '] != [' . $row['note'] . ']!');
exit(1);
}
if ($row['uid'] != $rg_ui['uid']) {
rg_log('uid is not ok [' . $row['uid'] . '] != [' . $rg_ui['uid'] . ']!');
exit(1);
}
// Test closing a bug
$token = $r['token'];
rg_log("Posting close bug form...");
$data = array('token' => $token,
'close_reopen' => 1,
'state' => 2);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request.');
exit(1);
}
$sql = 'SELECT * FROM bugs WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
rg_sql_free_result($res);
if ($row['state'] != 2) {
rg_log('Seems we could not close the bug; state= [' . $row['state']);
exit(1);
}
// Test re-opening a bug
$token = $r['token'];
rg_log("Posting re-open bug form...");
$data = array('token' => $token,
'close_reopen' => 1,
'state'=> 1);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request.');
exit(1);
}
$sql = 'SELECT * FROM bugs WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
rg_sql_free_result($res);
if ($row['state'] != 1) {
rg_log('Seems we could not re-open the bug;'
. ' state= [' . $row['state'] . ']!');
exit(1);
}
rg_log("Testing deleting a bug");
for ($i = 0; $i <= 1; $i++) {
$token = $r['token'];
rg_log("Posting delete bug form...");
$data = array('token' => $token,
'del_undel' => $i + 1);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request.');
exit(1);
}
$sql = 'SELECT * FROM bugs WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$row = rg_sql_fetch_array($res);
rg_sql_free_result($res);
if ($i == 0)
$test = $row['deleted'] > 0;
else
$test = $row['deleted'] == 0;
if (!$test) {
rg_log('i=' . $i . ': Seems we could not delete/undelete the bug;'
. ' deleted= [' . $row['deleted'] . ']!');
exit(1);
}
if ($row['deleted_who'] != $rg_ui['uid']) {
rg_log('i=' . $i . ': Seems the deleted_who was not updated;'
. ' deleted_who= [' . $row['deleted_who'] . ']!');
exit(1);
}
}
// Test watching a bug - we need to login as a different user
$r = test_login($test_url, $rg_ui2, $good_sid);
if ($r === FALSE)
exit(1);
$headers = array("Cookie: sid=" . $good_sid);
// We are already in the watch list because the asignee is automatically added
for ($i = 0; $i <= 1; $i++) {
rg_log("Loading bug form (i=$i)...");
$data = array();
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot load bug form.');
exit(1);
}
$token = $r['token'];
rg_log("Posting (un)watch bug form...");
$data = array('token' => $token, 'watch' => $i, 'unwatch' => 1 - $i);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post watch bug request.');
exit(1);
}
$sql = 'SELECT uid FROM watch_bug WHERE repo_id = ' . $repo['repo_id']
. ' AND bug_id = 1';
$res = rg_sql_query($db, $sql);
$rows = rg_sql_num_rows($res);
$row = array();
while (($r = rg_sql_fetch_array($res)))
$row[] = $r;
rg_sql_free_result($res);
if ($i == 0) { // unwatch - only rg_ui[uid] should be present
if (($rows != 1) || ($row[0]['uid'] != $rg_ui['uid'])) {
rg_log_ml('Seems we could not watch the bug; row:'
. print_r($row, TRUE));
exit(1);
}
} else {
$_l = array($rg_ui['uid'], $rg_ui2['uid']);
for ($j = 0; $j <= 1; $j++) {
if (!in_array($row[$j]['uid'], $_l)) {
rg_log('Seems I cannot unwatch a bug'
. ' (' . $row[$j]['uid']
. ' is not in the expected list)!');
exit(1);
}
}
}
}
rg_prof_log();
rg_log("OK!");
?>