commit:     0e2e2731b6f02a900bf2ab99b03496c10e5da089
Author:     Michał Górny <mgorny <AT> gentoo <DOT> org>
AuthorDate: Thu Jun 11 20:18:16 2020 +0000
Commit:     Michał Górny <mgorny <AT> gentoo <DOT> org>
CommitDate: Thu Jun 11 20:33:02 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=0e2e2731

dev-python/pymysql: Enable tests

Signed-off-by: Michał Górny <mgorny <AT> gentoo.org>

 dev-python/pymysql/pymysql-0.9.3.ebuild | 55 ++++++++++++++++++++++++++++++---
 1 file changed, 51 insertions(+), 4 deletions(-)

diff --git a/dev-python/pymysql/pymysql-0.9.3.ebuild 
b/dev-python/pymysql/pymysql-0.9.3.ebuild
index e0580ba4984..5ab0788a13a 100644
--- a/dev-python/pymysql/pymysql-0.9.3.ebuild
+++ b/dev-python/pymysql/pymysql-0.9.3.ebuild
@@ -13,18 +13,65 @@ MY_P="${MY_PN}-${PV}"
 DESCRIPTION="Pure-Python MySQL Driver"
 HOMEPAGE="https://github.com/PyMySQL/PyMySQL";
 SRC_URI="https://github.com/${MY_PN}/${MY_PN}/archive/v${PV}.tar.gz -> 
${P}.tar.gz"
+S=${WORKDIR}/${MY_P}
 
 LICENSE="MIT"
 SLOT="0"
 KEYWORDS="amd64 ~arm64 x86"
 IUSE="test"
+RESTRICT="!test? ( test )"
 
-S=${WORKDIR}/${MY_P}
+# TODO: support other mysql variants
+BDEPEND="
+       test? ( dev-db/mariadb[server] )"
+
+src_prepare() {
+       find -name '*.py' -exec sed -i -e 's:unittest2:unittest:' {} + || die
+       distutils-r1_src_prepare
+}
+
+src_test() {
+       mkdir -p "${T}"/mysql || die
+       "${BROOT}"/usr/share/mariadb/scripts/mysql_install_db \
+               --no-defaults \
+               --auth-root-authentication-method=normal \
+               --basedir="${BROOT}/usr" \
+               --datadir="${T}"/mysql || die
+       # TODO: random port
+       mysqld \
+               --no-defaults \
+               --character-set-server=utf8 \
+               --bind-address=127.0.0.1 \
+               --port=3306 \
+               --socket="${T}"/mysqld.sock \
+               --datadir="${T}"/mysql &
+       local pid=${!}
 
-DEPEND="dev-python/setuptools[${PYTHON_USEDEP}]"
+       # wait for it to start
+       local i
+       for (( i = 0; i < 10; i++)); do
+               [[ -S ${T}/mysqld.sock ]] && break
+               sleep 1
+       done
+       [[ -S ${T}/mysqld.sock ]] || die "mysqld failed to start"
 
-# While tests exist, they require an unsecure server to run without manual 
config file
-RESTRICT="test"
+       # create test databases
+       mysql -uroot --socket="${T}"/mysqld.sock -e '
+               create database test1 DEFAULT CHARACTER SET utf8mb4;
+               create database test2 DEFAULT CHARACTER SET utf8mb4;
+
+               create user test2 identified by "some password";
+               grant all on test2.* to test2;
+
+               create user test2@localhost identified by "some password";
+               grant all on test2.* to test2@localhost;
+       ' || die
+
+       distutils-r1_src_test
+
+       kill "${pid}"
+       wait "${pid}"
+}
 
 python_test() {
        ${PYTHON} runtests.py || die

Reply via email to