From 00b077ab14736a5dda598db0521bf1205922fd9b Mon Sep 17 00:00:00 2001
From: qwerty2501 <939468+qwerty2501@users.noreply.github.com>
Date: Fri, 20 Oct 2023 06:54:01 +0900
Subject: [PATCH] Is tests/x.py maintained? And I tried fix it. (#2754)

* chore:Added ipaddr extension library to gitignore

* fix:In a Linux environment, shared libraries in the current directory are not loaded, so add the current directory to the LD_LIBRARY_PATH environment variable.

* fix: Since confrict primary key when running multiple sqlite tests, removed specific primary key in insert.

* chore: Since avoid git modified targeting, copy the db file to new test db file.

* fix: Since docker mysql 5.7 using yaSSL(It only supports TLSv1.1), avoid running when using rustls.
---
 .gitignore              |  4 ++++
 tests/docker.py         |  7 ++++++-
 tests/sqlite/.gitignore |  2 +-
 tests/sqlite/any.rs     |  3 +--
 tests/x.py              | 23 ++++++++++++++++-------
 5 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8b6fd2c2..9e71baaa 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,7 @@ target/
 # Shared-memory and WAL files created by SQLite.
 *-shm
 *-wal
+
+# Integration testing extension library for SQLite.
+ipaddr.dylib
+ipaddr.so
diff --git a/tests/docker.py b/tests/docker.py
index 427ed98a..b1b81b07 100644
--- a/tests/docker.py
+++ b/tests/docker.py
@@ -2,6 +2,7 @@ import subprocess
 import sys
 import time
 from os import path
+import shutil
 
 # base dir of sqlx workspace
 dir_workspace = path.dirname(path.dirname(path.realpath(__file__)))
@@ -13,8 +14,12 @@ dir_tests = path.join(dir_workspace, "tests")
 # start database server and return a URL to use to connect
 def start_database(driver, database, cwd):
     if driver == "sqlite":
+        database = path.join(cwd, database)
+        (base_path, ext) = path.splitext(database)
+        new_database = f"{base_path}.test{ext}"
+        shutil.copy(database, new_database)
         # short-circuit for sqlite
-        return f"sqlite://{path.join(cwd, database)}"
+        return f"sqlite://{path.join(cwd, new_database)}"
 
     res = subprocess.run(
         ["docker-compose", "up", "-d", driver],
diff --git a/tests/sqlite/.gitignore b/tests/sqlite/.gitignore
index 02a6711c..df6bab3f 100644
--- a/tests/sqlite/.gitignore
+++ b/tests/sqlite/.gitignore
@@ -1,2 +1,2 @@
-sqlite.db
+sqlite.test.db
 
diff --git a/tests/sqlite/any.rs b/tests/sqlite/any.rs
index 601f171e..f96274a3 100644
--- a/tests/sqlite/any.rs
+++ b/tests/sqlite/any.rs
@@ -6,8 +6,7 @@ async fn it_encodes_bool_with_any() -> anyhow::Result<()> {
     sqlx::any::install_default_drivers();
     let mut conn = new::<Any>().await?;
 
-    let res = sqlx::query("INSERT INTO accounts VALUES (?, ?, ?)")
-        .bind(87)
+    let res = sqlx::query("INSERT INTO accounts (name, is_active) VALUES (?, ?)")
         .bind("Harrison Ford")
         .bind(true)
         .execute(&mut conn)
diff --git a/tests/x.py b/tests/x.py
index 2d211db4..8aca890f 100755
--- a/tests/x.py
+++ b/tests/x.py
@@ -79,6 +79,12 @@ def run(command, comment=None, env=None, service=None, tag=None, args=None, data
                 environ["RUSTFLAGS"] += " --cfg sqlite_ipaddr"
             else:
                 environ["RUSTFLAGS"] = "--cfg sqlite_ipaddr"
+            if platform.system() == "Linux":
+                if os.environ.get("LD_LIBRARY_PATH"):
+                    environ["LD_LIBRARY_PATH"]= os.environ.get("LD_LIBRARY_PATH") + ":"+ os.getcwd()
+                else:
+                    environ["LD_LIBRARY_PATH"]=os.getcwd()
+
 
     if service is not None:
         database_url = start_database(service, database="sqlite/sqlite.db" if service == "sqlite" else "sqlx", cwd=dir_tests)
@@ -110,7 +116,7 @@ def run(command, comment=None, env=None, service=None, tag=None, args=None, data
             *command.split(" "),
             *command_args
         ],
-        env=dict(**os.environ, **environ),
+        env=dict(list(os.environ.items()) + list(environ.items())),
         cwd=cwd,
     )
 
@@ -201,12 +207,15 @@ for runtime in ["async-std", "tokio"]:
         #
 
         for version in ["8", "5_7"]:
-            run(
-                f"cargo test --no-default-features --features any,mysql,macros,_unstable-all-types,runtime-{runtime},tls-{tls}",
-                comment=f"test mysql {version}",
-                service=f"mysql_{version}",
-                tag=f"mysql_{version}" if runtime == "async-std" else f"mysql_{version}_{runtime}",
-            )
+            # Since docker mysql 5.7 using yaSSL(It only supports TLSv1.1), avoid running when using rustls.
+            # https://github.com/docker-library/mysql/issues/567
+            if not(version == "5_7" and tls == "rustls"):
+                run(
+                    f"cargo test --no-default-features --features any,mysql,macros,_unstable-all-types,runtime-{runtime},tls-{tls}",
+                    comment=f"test mysql {version}",
+                    service=f"mysql_{version}",
+                    tag=f"mysql_{version}" if runtime == "async-std" else f"mysql_{version}_{runtime}",
+                )
 
             ## +client-ssl
             if tls != "none" and not(version == "5_7" and tls == "rustls"):