Skip to content

Commit

Permalink
merge code
Browse files Browse the repository at this point in the history
  • Loading branch information
jingjingxyk committed Sep 12, 2024
1 parent 142de90 commit 65c1881
Show file tree
Hide file tree
Showing 4 changed files with 503 additions and 53 deletions.
125 changes: 74 additions & 51 deletions sapi/src/UnitTest/SwoolePGSQLTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,21 @@
namespace SwooleCli\UnitTest;

use PHPUnit\Framework\TestCase;
use Swoole\Runtime;
use Swoole\Coroutine\PostgreSQL;

use function Swoole\Coroutine\run;

final class SwoolePGSQLTest extends TestCase
error_reporting(E_ALL);
ini_set("display_errors", "on");

final class SwoolePGSQLTestV5x extends TestCase
{
private $pg = null;
private $pg_master = null;

public function testSwoolePGSQL(): void
{
$oriErrorLevel = error_reporting(E_ALL);
$oriFlags = Runtime::getHookFlags();
Runtime::setHookFlags(SWOOLE_HOOK_PDO_PGSQL);

run(function () {
$this->createDataBase();
$this->createTable();
Expand All @@ -29,18 +31,19 @@ public function testSwoolePGSQL(): void
$this->dropDatabase();
$this->pg_master = null;
});
Runtime::setHookFlags($oriFlags);
error_reporting($oriErrorLevel);
}

protected function createDataBase()

public function createDataBase()
{
$dbh = new \PDO("pgsql:dbname=postgres;host=127.0.0.1;port=5432", "postgres", "example");
$this->assertEquals(NULL, $dbh->errorCode(), 'pgsql connection postgres Error ,Error Info : ' . $dbh->errorInfo()[2]);

$this->pg_master = $dbh;
$res = $dbh->query("SELECT * FROM pg_database WHERE datname = 'user_center'", \PDO::FETCH_ASSOC);
$arr = $res->fetchAll();
$pg = new PostgreSQL();
$conn = $pg->connect("host=127.0.0.1 port=5432 dbname=postgres user=postgres password=example");
$this->assertTrue($conn, 'pgsql connection postgres Error ,Error Info : ' . $pg->error);

$this->pg_master = $pg;
$stmt = $pg->query("SELECT * FROM pg_database WHERE datname = 'user_center'");
$arr = $stmt->fetchAll();
if (!empty($arr)) {
$this->dropDatabase();
}
Expand All @@ -58,18 +61,20 @@ protected function createDataBase()
IS_TEMPLATE = False
EOF;
echo $sql . PHP_EOL;
$res = $dbh->exec($sql);
$this->assertEquals(0, $res, 'create database user_center Error ,Error Info : ' . $dbh->errorInfo()[2]);
$pg->query($sql);
$this->assertEquals(0, $pg->errCode, 'create database user_center Error ,Error Info : ' . $pg->error);
}

protected function createTable()
public function createTable()
{
$dbh = new \PDO("pgsql:dbname=user_center;host=127.0.0.1;port=5432", "postgres", "example");
$this->assertEquals(NULL, $dbh->errorCode(), 'connection database user_center Error ,Error Info : ' . $dbh->errorInfo()[2]);
$pg = new PostgreSQL();

$this->pg = $dbh;
$conn = $pg->connect("host=127.0.0.1 port=5432 dbname=user_center user=postgres password=example");
$this->assertTrue($conn, 'connection database user_center Error ,Error Info : ' . $pg->error);

$this->pg = $pg;
$sql = "select * from pg_tables where schemaname = 'public' and tablename='users'";
$stmt = $this->pg->query($sql, \PDO::FETCH_ASSOC);
$stmt = $pg->query($sql);
$res = $stmt->fetchAll();
if (empty($res)) {
# USER 是PGSQL 关键字,不能用作表名
Expand Down Expand Up @@ -102,12 +107,12 @@ protected function createTable()

EOF;
echo $table . PHP_EOL;
$res = $this->pg->exec($table);
$this->assertEquals(0, $res, 'create table users Error ,Error Info : ' . $dbh->errorInfo()[2]);
$pg->query($table);
$this->assertEquals(0, $pg->errCode, 'create table users Error ,Error Info : ' . $pg->error);
}
}

protected function insertTableData()
public function insertTableData()
{
$password = 'example';
$salt = bin2hex(openssl_random_pseudo_bytes(rand(4, 20)));
Expand All @@ -119,30 +124,49 @@ protected function insertTableData()
$sql = <<<EOF
INSERT INTO public.users(
username, nickname, password, salt, avatar, email, mobile, updated_at, login_channel)
VALUES (:username, :nickname, :password, :salt, :avatar, :email, :mobile, :updated_at, :login_channel);
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9);
EOF;

$list = [
[
"username1",
"example1",
"{$password}",
"{$salt}",
"https://wenda.swoole.com/dist/skin1/images/logo.png",
"example1@qq.com",
"861888888888",
"{$time}",
"1"
],
[
"username2",
"example2",
"{$password}",
"{$salt}",
"https://wenda.swoole.com/dist/skin1/images/logo.png",
"example2@qq.com",
"861888888888",
"{$time}",
"1"
]
];
echo $sql . PHP_EOL;
$stmt = $this->pg->prepare($sql);
// :username, :nickname, :password, :salt, :avatar, :email, :mobile, :updated_at, :login_channel
$stmt->bindValue(':username', "username", \PDO::PARAM_STR);
$stmt->bindValue(':nickname', "example", \PDO::PARAM_STR);
$stmt->bindValue(':password', $password, \PDO::PARAM_STR);
$stmt->bindValue(':salt', $salt, \PDO::PARAM_STR);
$stmt->bindValue(':avatar', "https://wenda.swoole.com/dist/skin1/images/logo.png", \PDO::PARAM_STR);
$stmt->bindValue(':email', "example2@qq.com", \PDO::PARAM_STR);
$stmt->bindValue(':mobile', "861888888888", \PDO::PARAM_STR);
$stmt->bindValue(':updated_at', $time, \PDO::PARAM_STR);
$stmt->bindValue(':login_channel', 1, \PDO::PARAM_INT);
$res = $stmt->execute();

$this->assertTrue($res, 'insert data Error ,Error Info : ' . $this->pg->errorInfo()[2]);
$i = 30;
while ($i >= 1) {
foreach ($list as $data) {
$res = $stmt->execute($data);
}
$i--;
}
$this->assertGreaterThanOrEqual(1, $stmt->affectedRows(), 'insert data Error ,Error Info : ' . $this->pg->error);
}
protected function selectTableData()
public function selectTableData()
{
$sql = <<<EOF
SELECT * FROM public.users
Expand All @@ -154,28 +178,27 @@ protected function selectTableData()

$stmt = $this->pg->query($sql);
$list = $stmt->fetchAll();
$this->assertGreaterThan(0, count($list), 'select data Error ,Error Info : ' . $stmt->errorInfo()[2]);
$this->assertGreaterThan(1, count($list), 'select data Error ,Error Info : ' . $this->pg->error);
}

protected function deleteTableData()
public function deleteTableData()
{
$sql = <<<'EOF'
DELETE FROM users
WHERE username=:username
WHERE username=$1

EOF;

echo $sql . PHP_EOL;

$stmt = $this->pg->prepare($sql);
$stmt->bindValue(":username", "username", \PDO::PARAM_STR);

$stmt->execute();
$stmt->execute(['username2']);

$this->assertGreaterThan(0, $stmt->rowCount(), 'delete data Error ,Error Info : ' . $this->pg->errorInfo()[2]);
$this->assertGreaterThan(10, $stmt->affectedRows(), 'delete data Error ,Error Info : ' . $this->pg->error);
}

protected function dropTable()
public function dropTable()
{
$sql = <<<'EOF'
Expand All @@ -184,19 +207,19 @@ protected function dropTable()
EOF;

echo $sql . PHP_EOL;
$res = $this->pg->exec($sql);
$this->assertEquals(0, $res, 'drop table users Error ,Error Info : ' . $this->pg->errorInfo()[2]);
$this->pg->query($sql);
$this->assertEquals(0, $this->pg->errCode, 'drop table users Error ,Error Info : ' . $this->pg->error);
}

protected function dropDatabase()
public function dropDatabase()
{
$sql = <<<'EOF'
DROP DATABASE IF EXISTS user_center
EOF;

echo $sql . PHP_EOL;
$this->pg_master->exec($sql);
$this->assertEquals("00000", $this->pg_master->errorCode(), 'drop database user_center Error ,Error Info : ' . $this->pg_master->errorInfo()[2]);
$this->pg_master->query($sql);
$this->assertEquals(0, $this->pg_master->errCode, 'drop database user_center Error ,Error Info : ' . $this->pg_master->error);
}
}
Loading

0 comments on commit 65c1881

Please sign in to comment.