Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
33.33% |
4 / 12 |
CRAP | |
80.77% |
63 / 78 |
DbCLRunner | |
0.00% |
0 / 1 |
|
33.33% |
4 / 12 |
36.40 | |
80.77% |
63 / 78 |
__construct($fileDir, $password = false) | |
0.00% |
0 / 1 |
3.47 | |
62.50% |
5 / 8 |
|||
_initDbCLRunner($fileDir) | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 3 |
|||
runSql($sqlStatements) | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
query($queryString) | |
100.00% |
1 / 1 |
1 | |
100.00% |
3 / 3 |
|||
runSqlFile($fileName) | |
100.00% |
1 / 1 |
2 | |
100.00% |
10 / 10 |
|||
getDbUser() | |
0.00% |
0 / 1 |
2.50 | |
50.00% |
1 / 2 |
|||
getDbName() | |
0.00% |
0 / 1 |
3.14 | |
75.00% |
3 / 4 |
|||
getDbPassword() | |
0.00% |
0 / 1 |
2.50 | |
50.00% |
1 / 2 |
|||
getDbHost() | |
0.00% |
0 / 1 |
4.12 | |
50.00% |
1 / 2 |
|||
_getMySQLShellCommand($setting) | |
0.00% |
0 / 1 |
4.37 | |
71.43% |
10 / 14 |
|||
getDb() | |
0.00% |
0 / 1 |
3.02 | |
87.50% |
7 / 8 |
|||
getLoginFromConfig($dir) | |
100.00% |
1 / 1 |
4 | |
100.00% |
16 / 16 |
<?php | |
/** | |
* | |
*/ | |
namespace aae\util { | |
/** | |
* @author Axel Ancona Esselmann | |
* @package aae\util | |
*/ | |
class DbCLRunner { | |
public $dbConnection = null, $login = null, $configDir = null, $execLog = array(), $_useFile = true; | |
public function __construct($fileDir, $password = false) { | |
if (!file_exists($fileDir)) throw new \Exception("config.cnf file with path '$fileDir' does not exist", 1114141642); | |
$this->login = $this->getLoginFromConfig($fileDir); | |
$this->configDir = $fileDir; | |
if ($password) { | |
$this->login["password"] = $password; | |
$this->_useFile = false; | |
} | |
} | |
protected function _initDbCLRunner($fileDir) { | |
if (!file_exists($fileDir)) throw new \Exception("No Login Credentials in test directory", 1015142031); | |
$this->login = json_decode(file_get_contents($fileDir), true); | |
} | |
public function runSql($sqlStatements) { | |
$dbName = $this->getDbName(); | |
$conn = $this->getDb(); | |
$result = $conn->query("CREATE DATABASE IF NOT EXISTS $dbName;"); | |
$command = $this->_getMySQLShellCommand("-e'$sqlStatements'"); | |
$output = shell_exec($command); | |
} | |
public function query($queryString) { | |
$db = $this->getDb(); | |
$dbName = $this->getDbName(); | |
//echo "\n".$query."\n"; | |
return $db->query($queryString); | |
} | |
public function runSqlFile($fileName) { | |
$dbName = $this->getDbName(); | |
$conn = $this->getDb(); | |
$result = $conn->query("CREATE DATABASE IF NOT EXISTS $dbName;"); | |
$command = $this->_getMySQLShellCommand("< $fileName"); | |
$this->execLog[] = $command; | |
$output = shell_exec($command); | |
if (strlen($output) > 0) { | |
$this->execLog[] = $output; | |
} | |
} | |
public function getDbUser() { | |
if (!is_null($this->login)) return $this->login["userName"]; | |
else throw new \Exception("Login information does not have userName", 1114141020); | |
} | |
public function getDbName() { | |
if (!is_null($this->login) && | |
array_key_exists("dbName", $this->login) | |
) return $this->login["dbName"]; | |
else throw new \Exception("Login information does not have dbName", 1114141021); | |
} | |
public function getDbPassword() { | |
if (!is_null($this->login)) return $this->login["password"]; | |
else throw new \Exception("Login information does not have password", 1114141022); | |
} | |
public function getDbHost() { | |
if (array_key_exists("host", $this->login) && !is_null($this->login)) return $this->login["host"]; | |
else return "127.0.0.1"; | |
} | |
protected function _getMySQLShellCommand($setting) { | |
$dbName = $this->getDbName(); | |
$userName = $this->getDbUser(); | |
$password = $this->getDbPassword(); | |
$host = $this->getDbHost(); | |
$errorHandling = " 2>&1"; | |
if (file_exists("/usr/local/bin/mysql")) { | |
$mysql = "/usr/local/bin/mysql"; | |
} else if (file_exists("/usr/bin/mysql")) { | |
$mysql = "/usr/bin/mysql"; | |
} else { | |
$mysql = "mysql"; | |
} | |
if ($this->_useFile) { | |
return $mysql." --defaults-extra-file={$this->configDir} $setting".$errorHandling; | |
} else { | |
return $mysql." -D $dbName $setting -h $host -u $userName --password=\"$password\"$errorHandling"; | |
} | |
} | |
public function getDb() { | |
if (is_null($this->dbConnection)) { | |
date_default_timezone_set('America/Los_Angeles'); | |
try { | |
$this->dbConnection = new \PDO('mysql:host='.$this->getDbHost(), $this->getDbUser(), $this->getDbPassword()); | |
$this->dbConnection->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); | |
} catch (\PDOException $e) { | |
throw new \Exception("Could not connect to database with username: ".$this->getDbUser()." and Password: ".$this->getDbPassword()."\nError message: ".$e->getMessage(), 1); | |
} | |
} | |
return $this->dbConnection; | |
} | |
public function getLoginFromConfig($dir) { | |
$result = null; | |
if (file_exists($dir)) { | |
$contents = file_get_contents($dir); | |
$regex = '/ | |
(user=)(?P<userName>.*)(\n) | |
(password=)(?P<password>.*)(\n) | |
(host=)(?P<host>.*)(\n) | |
(database=)(?P<dbName>.*) | |
/sx'; | |
$list = array(); | |
$match = preg_match_all($regex, $contents, $list); | |
$result = []; | |
$result["userName"] = $list["userName"][0]; | |
$result["password"] = $list["password"][0]; | |
$result["host"] = $list["host"][0]; | |
$result["dbName"] = $list["dbName"][0]; | |
} | |
if (!is_string($result["userName"]) || | |
strlen($result["userName"]) < 1 | |
) throw new \Exception("config.cnf file has incorrect format.", 1114141635); | |
return $result; | |
} | |
} | |
} |