From de92b2c9934b922735f2ccfee020196a1c80c9af Mon Sep 17 00:00:00 2001 From: "Levy A." Date: Sat, 14 Jun 2025 03:08:53 -0300 Subject: [PATCH 1/3] add ci --- .github/workflows/ci.yml | 55 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..a736d12 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,55 @@ +name: Tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + workflow_dispatch: + inputs: + libsql-server-release: + description: 'LibSQL Server Release' + required: false + default: 'libsql-server-v0.24.32' + +jobs: + test: + name: Tests on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + + steps: + + - uses: actions/checkout@v4 + + - name: Install sqld + run: | + curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/libsql/releases/download/${{ github.event.inputs.libsql-server-release || 'libsql-server-v0.24.32' }}/libsql-server-installer.sh | sh + echo "$HOME/.sqld/bin" >> $GITHUB_PATH + sqld --version + + - name: Start sqld server + run: | + sqld & + while ! curl -s http://localhost:8080/health > /dev/null; do + echo "Waiting for sqld..." + sleep 1 + done + echo "sqld is ready!" + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + coverage: none + + - name: Install Composer Dependencies + run: composer install --prefer-dist --no-progress + + - name: Run Tests + env: + TURSO_URL: "http://localhost:8080" + TURSO_AUTH_TOKEN: "" + run: vendor/bin/phpunit tests/ \ No newline at end of file From 85f42d659fa5cc4bd68c0181324816953646636c Mon Sep 17 00:00:00 2001 From: "Levy A." Date: Sat, 14 Jun 2025 03:35:05 -0300 Subject: [PATCH 2/3] skip remote tests when env var is unset --- tests/Test.php | 63 +++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 49 insertions(+), 14 deletions(-) diff --git a/tests/Test.php b/tests/Test.php index 79dabc7..06fb0ed 100644 --- a/tests/Test.php +++ b/tests/Test.php @@ -92,10 +92,17 @@ public function testNull(): void public function testEmbeddedReplica(): void { + $url = getenv('TURSO_URL'); + $authToken = getenv('TURSO_AUTH_TOKEN'); + + if ($url == false) { + $this->markTestSkipped(); + } + $db = new Database( path: 'test.db', - url: getenv('TURSO_URL'), - authToken: getenv('TURSO_AUTH_TOKEN'), + url: $url, + authToken: $authToken, syncInterval: 100, ); $conn = $db->connect(); @@ -117,16 +124,23 @@ public function testEmbeddedReplica(): void foreach ($conn->query('select * from test') as $i => $row) { $this->assertSame($row->i, $i); - $this->assertSame($row->r, exp($i / 10)); - $this->assertSame($row->t, strval(exp($i / 10))); + $this->assertLessThanOrEqual(abs($row->r - exp($i / 10)), 0.0e-12); + $this->assertLessThanOrEqual(abs($row->t - strval(exp($i / 10))), 0.0e-12); } } public function testRemoteReplica(): void { + $url = getenv('TURSO_URL'); + $authToken = getenv('TURSO_AUTH_TOKEN'); + + if ($url == false) { + $this->markTestSkipped(); + } + $db = new Database( - url: getenv('TURSO_URL'), - authToken: getenv('TURSO_AUTH_TOKEN'), + url: $url, + authToken: $authToken, ); $conn = $db->connect(); @@ -163,11 +177,18 @@ public function testBlob(): void public function testTransactions(): void { + $url = getenv('TURSO_URL'); + $authToken = getenv('TURSO_AUTH_TOKEN'); + + if ($url == false) { + $this->markTestSkipped(); + } + $db = new Database( - path: 'test.db', - url: getenv('TURSO_URL'), - authToken: getenv('TURSO_AUTH_TOKEN'), - syncInterval: 100, + // path: 'test.db', + url: $url, + authToken: $authToken, + // syncInterval: 100, ); $conn = $db->connect(); @@ -200,8 +221,15 @@ public function testStatementColumnCount(): void public function testPDORemote(): void { - $pdo = new \Libsql\PDO(password: getenv('TURSO_AUTH_TOKEN'), options: [ - 'url' => getenv('TURSO_URL'), + $url = getenv('TURSO_URL'); + $authToken = getenv('TURSO_AUTH_TOKEN'); + + if (!$url) { + $this->markTestSkipped(); + } + + $pdo = new \Libsql\PDO(password: $authToken, options: [ + 'url' => $url, ]); $statement = $pdo->prepare('select ?'); @@ -214,8 +242,15 @@ public function testPDORemote(): void public function testPDORemoteFetchObj(): void { - $pdo = new \Libsql\PDO(password: getenv('TURSO_AUTH_TOKEN'), options: [ - 'url' => getenv('TURSO_URL'), + $url = getenv('TURSO_URL'); + $authToken = getenv('TURSO_AUTH_TOKEN'); + + if ($url == false) { + $this->markTestSkipped(); + } + + $pdo = new \Libsql\PDO(password: $authToken, options: [ + 'url' => $url, ]); $statement = $pdo->prepare('select * from test'); From c90a915914256a85351e83a7a214b7e8b0b5c644 Mon Sep 17 00:00:00 2001 From: "Levy A." Date: Sat, 14 Jun 2025 03:38:14 -0300 Subject: [PATCH 3/3] add tests on windows --- .github/workflows/ci.yml | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a736d12..1bff833 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -52,4 +52,24 @@ jobs: env: TURSO_URL: "http://localhost:8080" TURSO_AUTH_TOKEN: "" - run: vendor/bin/phpunit tests/ \ No newline at end of file + run: vendor/bin/phpunit tests/ + + test-window: + name: Tests on windows-latest + runs-on: windows-latest + steps: + + - uses: actions/checkout@v4 + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: '8.3' + coverage: none + extensions: ffi + + - name: Install Composer Dependencies + run: composer install --prefer-dist --no-progress + + - name: Run Tests + run: vendor/bin/phpunit tests/