<?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, $u1);
rg_test_create_user($db, $u2);
rg_test_create_repo($db, $u1, $repo);
$r = test_login($test_url, $u1, $good_sid);
if ($r === FALSE)
exit(1);
rg_log('');
rg_log_enter("Loading bug form...");
$url = "/user/" . $u1['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['tokens']['bug_edit_hl'];
if (empty($token)) {
rg_log("Seems I cannot load a token. See above.");
exit(1);
}
rg_log_exit();
rg_log('');
rg_log_enter("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' => $u2['username'],
'labels' => implode(' ', $labels),
'_test' => 'add bug');
$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'] != $u2['uid']) {
rg_log('assigned_uid is not ' . $u2['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_exit();
rg_log('');
rg_log_enter("Testing adding a note");
rg_log_enter("Loading bug/note form...");
$url = "/user/" . $u1['username'] . "/" . $repo['name'] . "/bug/1";
$data = array('_test' => 'adding a note');
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log("Cannot load bug page.");
exit(1);
}
if (!isset($r['tokens']['note_add'])) {
rg_log('note_add token not present!');
exit(1);
}
$token = $r['tokens']['note_add'];
rg_log_exit();
rg_log_enter("Posting note add form (token=$token)...");
$note = 'This is a note<xss>';
$data = array('note_add_doit' => 1, 'token' => $token,
'note' => $note,
'_test' => 'adding a 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'] != $u1['uid']) {
rg_log('uid is not ok [' . $row['uid'] . '] != [' . $u1['uid'] . ']!');
exit(1);
}
rg_log_exit();
rg_log_exit();
$token = $r['tokens']['close_reopen'];
rg_log('');
rg_log_enter("Posting close bug form (token=$token)...");
$data = array('token' => $token,
'close_reopen' => 1,
'state' => 2,
'_test' => 'closing a bug');
$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);
}
rg_log_exit();
$token = $r['tokens']['close_reopen'];
rg_log('');
rg_log_enter("Posting re-open bug form (token=$token)...");
$data = array('token' => $token,
'close_reopen' => 1,
'state'=> 1,
'_test' => 're-opn bug');
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot post bug request (check http_bug.out for last answer).');
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_exit();
rg_log('');
rg_log_enter("Testing deleting a bug");
for ($i = 0; $i <= 1; $i++) {
$token = $r['tokens']['del_undel'];
rg_log("Posting delete bug form (token=$token)...");
$data = array('token' => $token,
'del_doit' => 1,
'del_undel' => $i + 1,
'_test' => 'deleting a bug (i=' . $i . ')');
$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'] != $u1['uid']) {
rg_log('i=' . $i . ': Seems the deleted_who has not been updated;'
. ' deleted_who=[' . $row['deleted_who'] . ']!');
exit(1);
}
}
rg_log_exit();
rg_log('');
rg_log_enter("Test watching a bug - we need to login as a different user");
$r = test_login($test_url, $u2, $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('_test' => 'load-form-watch-' . $i);
$r = do_req($test_url . $url, $data, $headers);
if ($r === FALSE) {
rg_log('Cannot load bug form.');
exit(1);
}
$token = $r['tokens']['watch_bug'];
rg_log("Posting (un)watch bug form...");
$data = array('token' => $token, 'watch_type' => 'bug',
'watch_doit' => 1, 'watch' => $i,
'_test' => 'post-watch-' . $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'] != $u1['uid'])) {
rg_log_ml('Seems we could not watch the bug; row:'
. print_r($row, TRUE));
exit(1);
}
} else {
$_l = array($u1['uid'], $u2['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_log_exit();
rg_prof_log();
rg_log("OK!");
?>