diff --git a/testing/radicale/APKBUILD b/testing/radicale/APKBUILD
index 0e132dd5ee44dc9e7bfd819b7c4b974d0d925b17..60d8607d2965ec2f4ab8bda54b274a81362b5c4c 100644
--- a/testing/radicale/APKBUILD
+++ b/testing/radicale/APKBUILD
@@ -1,19 +1,21 @@
 # Contributor: Sören Tempel <soeren+alpine@soeren-tempel.net>
+# Contributor: Michał Polański <michal@polanski.me>
 # Maintainer: Natanael Copa <ncopa@alpinelinux.org>
 pkgname=radicale
-pkgver=2.1.12
+pkgver=3.0.1
 pkgrel=0
-pkgdesc="A simple CalDAV (calendar) and CardDAV (contact) server"
-url="http://radicale.org"
+pkgdesc="Free and open-source CalDAV and CardDAV server"
+url="https://radicale.org/3.0.html"
 arch="noarch"
 license="GPL-3.0-or-later"
-depends="python3 py3-vobject py3-dateutil py3-setuptools"
+depends="python3 py3-passlib py3-vobject py3-defusedxml py3-dateutil py3-setuptools"
+checkdepends="py3-pytest py3-pytest-flake8 py3-pytest-isort py3-pytest-cov py3-waitress"
 pkgusers="radicale"
 pkggroups="radicale"
 install="$pkgname.pre-install"
-options="!check"  # no test suite
-source="https://files.pythonhosted.org/packages/source/R/Radicale/Radicale-$pkgver.tar.gz
-	$pkgname.initd"
+source="$pkgname-$pkgver.tar.gz::https://github.com/Kozea/Radicale/archive/$pkgver.tar.gz
+	$pkgname.initd
+	$pkgname.confd"
 subpackages="$pkgname-openrc"
 builddir="$srcdir/Radicale-$pkgver"
 
@@ -21,19 +23,28 @@ build() {
 	python3 setup.py build
 }
 
+check() {
+	# install the package to test_install directory for testing
+	python3 setup.py install --root="$PWD"/test_install
+
+	PYTHONPATH="$PWD"/test_install/usr/lib/python3.8/site-packages \
+		pytest
+}
+
 package() {
-	python3 setup.py install --skip-build --prefix=/usr \
-		--root="$pkgdir"
+	python3 setup.py install --skip-build --prefix=/usr --root="$pkgdir"
+
+	install -d -o radicale -g radicale "$pkgdir"/var/lib/radicale \
+		"$pkgdir"/var/log/radicale
 
 	install -d "$pkgdir"/etc/radicale
 	install -m640 -g radicale config "$pkgdir"/etc/radicale/
-	install -m640 -g radicale logging "$pkgdir"/etc/radicale/
+	install -m640 -g radicale rights "$pkgdir"/etc/radicale/
 
-	install -d -o radicale "$pkgdir"/var/lib/radicale \
-		"$pkgdir"/var/log/radicale
-	install -Dm755 "$srcdir"/radicale.initd \
-		"$pkgdir"/etc/init.d/radicale
+	install -Dm755 "$srcdir"/radicale.initd "$pkgdir"/etc/init.d/radicale
+	install -Dm644 "$srcdir"/radicale.confd "$pkgdir"/etc/conf.d/radicale
 }
 
-sha512sums="a708fb1269f7ba8c9e351e101f613a8adb18c12b1239b832ed9e0287476f30aa7ded30f9bc259da9c4b5f3aefe90bbf9980d0d08d98dd07b79cd19930b0e204c  Radicale-2.1.12.tar.gz
-9856e5dbea45a6d2de592191fb97c310453a839e386a81c2ba0f28a9fb6005d8e8284b0ff59e02950bac3f5f1107aadb109baffc6c9445885792b50af959c740  radicale.initd"
+sha512sums="7e8ce9350dad5e90dd5e4e1056f1a5e37fc496227faccc9fbf4877cbff52bc0dd65623fdc11b6bf554224dee540cdb592ac8f187b487a0482b97de9102e4965b  radicale-3.0.1.tar.gz
+f1eb4477ca7d7d8040837b712289f18d6b62c7f862a8e9bea32968a49b8bf4394360b5440c815aa23df48ba0aaac61bcb8c9d6e7575c3b23da2ac05a45eac194  radicale.initd
+09bb6228ba07039b97b317d4547a33b7ebf9c8f47ff72b870fc2f5e46de620e0614d993c5c96d73f0ad6196d469bb0f7206478781abf314af1d598e3132d678e  radicale.confd"
diff --git a/testing/radicale/radicale.confd b/testing/radicale/radicale.confd
new file mode 100644
index 0000000000000000000000000000000000000000..40ec94606c44b8e4aa705abbbb5aa28edc7759e1
--- /dev/null
+++ b/testing/radicale/radicale.confd
@@ -0,0 +1 @@
+radicale_opts=""
diff --git a/testing/radicale/radicale.initd b/testing/radicale/radicale.initd
index 82b8379a63fb7ea809a638465b49bc137d32f4c2..91a523ffb2f4faa411c4ca582eba75f9f04893bb 100644
--- a/testing/radicale/radicale.initd
+++ b/testing/radicale/radicale.initd
@@ -2,21 +2,27 @@
 supervisor=supervise-daemon
 
 name=radicale
-description="A simple CalDAV (calendar) and CardDAV (contact) server"
+description="Free and open-source CalDAV and CardDAV server"
 
 command=/usr/bin/radicale
-command_args_foreground="--foreground"
-
+command_args="$radicale_opts"
 command_user=radicale:radicale
 
+logdir="/var/log/radicale"
+logfile="$logdir/radicale.log"
+supervise_daemon_args="--stderr $logfile"
+
 depend() {
 	use net
 	need localmount
 }
 
 start_pre() {
-	checkpath --directory --owner radicale /var/lib/radicale
-	checkpath --directory --owner radicale /var/log/radicale
-	checkpath --file --owner root:radicale --mode 0640 /etc/radicale/config
-	checkpath --file --owner root:radicale --mode 0640 /etc/radicale/logging
+	checkpath -d -o radicale /var/lib/radicale
+	checkpath -d -o radicale "$logdir"
+	checkpath -f -o radicale "$logfile"
+
+	checkpath -f -o root:radicale -m640 /etc/radicale/config
+	checkpath -f -o root:radicale -m640 /etc/radicale/rights
+	checkpath -f -o root:radicale -m640 /etc/radicale/users
 }
diff --git a/testing/radicale/radicale.pre-install b/testing/radicale/radicale.pre-install
index 147f8851755a052cdc2c6c705af542884d960323..0697d4a2a3fb5581e7df13e0251bd5cb75c0ce52 100644
--- a/testing/radicale/radicale.pre-install
+++ b/testing/radicale/radicale.pre-install
@@ -4,6 +4,5 @@ name=radicale
 
 addgroup -S $name 2>/dev/null
 adduser -S -D -H -h /var/lib/$name -s /sbin/nologin -G $name -g $name $name 2>/dev/null
-addgroup $name $name 2>/dev/null
 
 exit 0