<?php error_reporting(E_ALL | E_STRICT); ini_set("track_errors", "On"); $INC = "../inc"; require_once($INC . "/init.inc.php"); require_once($INC . "/repo.inc.php"); require_once($INC . "/sql.inc.php"); require_once($INC . "/struct.inc.php"); rg_log_set_file("repo.log"); $rg_sql_debug = 1; // defaults $rg_repo_max_len = 100; $rg_repos = "/base"; rg_log("name2base1"); $rr = array("prefix" => "/user", "user" => "user1", "repo" => "junk"); $e = "/base/users/u/s/user1/repos/"; $c = rg_repo_name2base($rr); if (strcmp($c, $e) != 0) { rg_log("name2base1 is not working correctly: c=$c e=$e."); exit(1); } rg_log("name2base2"); $rr = array("prefix" => "", "user" => "u", "repo" => "junk"); $e = "/base/orgs/u/_/u/repos/"; $c = rg_repo_name2base($rr); if (strcmp($c, $e) != 0) { rg_log("name2base2 is not working correctly: c=$c e=$e."); exit(1); } rg_log("test if repo_allow works correctly (0)"); $rg_repo_allow = '/^[A-Za-z0-9]*$/'; $v = "xx"; $c = rg_repo_ok($v); if ($c !== TRUE) { rg_log("repo_allow problem for valid repo [$v] (c=$c)."); exit(1); } rg_log("test if repo_allow works correctly (1)"); $rg_repo_allow = '/^[A-Za-z0-9]*$/'; $v = "eyhtmcmet_"; $c = rg_repo_ok($v); if ($c !== FALSE) { rg_log("repo_allow problem for '_' in [$v] (c=$c)."); exit(1); } rg_log("test if repo_allow works correctly (2)"); $rg_repo_allow = '/^[A-Za-z0-9_.-]*$/'; $v = ".e&y.h-tmcmet&_.-"; $c = rg_repo_ok($v); if ($c !== FALSE) { rg_log("repo_allow problem for '&'."); exit(1); } rg_log("check if we allow '..'"); $rg_repo_allow = '/^[A-Za-z0-9_.-]*$/'; $v = "a..b"; $c = rg_repo_ok($v); if ($c !== FALSE) { rg_log("repo_allow problem for '..'."); exit(1); } rg_log("check len test"); $v = "0123456789A"; $rg_repo_allow = '/^[A-Za-z0-9]*$/'; $rg_repo_max_len = 10; $c = rg_repo_ok($v); if ($c !== FALSE) { rg_log("repo_ok: max length is not enforced!"); exit(1); } $db = rg_sql_open("dbname=trg"); if ($db === FALSE) { rg_log("Cannot create a database (" . rg_sql_error() . ")!"); exit(1); } $r = rg_sql_struct_update($db, RG_DROP_TABLES|RG_IGNORE_ERRORS); if ($r !== TRUE) { rg_log("Cannot create struct (" . rg_sql_error() . ")!"); exit(1); } $uid = time(); rg_log("Inserting a fake user"); $sql = "INSERT INTO users (uid, username, realname, salt, pass, email, itime, suspended" . ", rights)" . " VALUES ($uid, 'user-$uid', 'realname-$uid', '', '', '', $uid, 0" . ", '')"; $res = rg_sql_query($db, $sql); if ($res === FALSE) { rg_log("Cannot insert a user (" . rg_sql_error() . ")!"); exit(1); } $repo_id = time(); $repo_name = "repo-" . $repo_id; rg_log("Inserting a fake repo"); $sql = "INSERT INTO repos (repo_id, name, uid, itime" . ", disk_quota_mb, max_commit_size" . ", master, description, git_dir_done, default_rights)" . " VALUES ($repo_id, '$repo_name', $uid, 0, 0, 0, 0, 'bla bla desc', 1, 'F')"; $res = rg_sql_query($db, $sql); if ($res === FALSE) { rg_log("Cannot insert a repo (" . rg_sql_error() . ")!"); exit(1); } rg_log("test giving rights"); $rr = array("repo_id" => $repo_id); $ri = rg_repo_info($db, $rr); if ($ri['exists'] != 1) { rg_log("ri: " . print_r($ri, TRUE)); rg_log("Cannot lookup repo_id $repo_id!"); exit(1); } $tuid = 10; $v = rg_repo_rights_set($db, $ri, $tuid, "P"); if ($v === FALSE) { rg_log("Cannot give rights (1)!"); exit(1); } rg_log("owner gets all rights"); $e = rg_rights_all("repo"); $r = rg_repo_rights_get($db, $ri, $uid, 0); $c = $r['rights']; if (strcmp($c, $e) != 0) { rg_log("Owner did not get all rights: c=$c e=$e."); exit(1); } rg_log("non-owner gets correct rights: F gets from default rights."); $xuid = 12; $r = rg_repo_rights_set($db, $ri, $xuid, "P"); if ($r !== TRUE) { rg_log("Cannot set rights (" . rg_repo_error() . ")!"); exit(1); } $e = "FP"; $r = rg_repo_rights_get($db, $ri, $xuid, 0); $c = $r['rights']; if (strcmp($c, $e) != 0) { rg_log("Non-owner did not get correct rights: c=$c e=$e."); exit(1); } rg_log("owner can set separate rights for him"); $v = rg_repo_rights_set($db, $ri, $uid, "A"); if ($v === FALSE) { rg_log("Owner cannot set separate rights for him!"); exit(1); } rg_log("list1"); $r = rg_repo_rights_load($db, $ri); if ($r === FALSE) { rg_log("Cannot list rights (" . rg_repo_error() . ")"); exit(1); } // TODO: we should test if expected fields are returned! rg_log("disk1"); $ri['disk_quota_mb'] = 10; $ri['disk_used_mb'] = 20; $r = rg_repo_over_limit($ri); if ($r !== TRUE) { rg_log("Over limit is wrong (1)!"); exit(1); } rg_log("disk2"); $ri['disk_quota_mb'] = 20; $ri['disk_used_mb'] = 10; $r = rg_repo_over_limit($ri); if ($r !== FALSE) { rg_log("Over limit is wrong (2)!"); exit(1); } // test stats $rg_state_dir = "repos"; $a = array( "itime" => time(), "ip" => "IPIPIPIPIPIP1", "repo_id" => 3000, "old_rev" => "abcdef", "new_rev" => "434343", "refname" => "refs/heads/xxx"); $f = rg_repo_stats_push2file($a); if ($f === FALSE) { echo "push2file returned FALSE!\n"; exit(1); } $r = unserialize(file_get_contents($rg_state_dir . "/qstats/$f")); if ($r === FALSE) { echo "Cannot get file or unserialize!\n"; exit(1); } if ($r['repo_id'] != 3000) { print_r($r); echo "rg_repo_stats_push2file is not working right!\n"; exit(1); } rg_sql_close($db); echo "repo: OK!\n"; ?>