diff --git a/test/data/sources/org.osbuild.librepo/cases/404-metalink.json b/test/data/sources/org.osbuild.librepo/cases/404-metalink.json
new file mode 100644
index 00000000..aff17105
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/cases/404-metalink.json
@@ -0,0 +1,39 @@
+{
+ "expects": "success",
+ "org.osbuild.librepo": {
+ "items": {
+ "sha256:99fa21f1b67fea84dcb9b3c7f7e09a4f150095cfa7163a19d03972fd7c826f00": {
+ "path": "Packages/a/a",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:77e6ed0bed2d720e44d77643f66b05f0eb42b06379990e5ef658ef314c415827": {
+ "path": "Packages/b/b",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:e99efe314a66334179236e5fb6a2e6a6431daf6aeb516162e01517a0ac708252": {
+ "path": "Packages/c/c",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ },
+ "sha256:354fe7c89ac014ed6479bf162fa7b9e8b37eddc7e46719ebd4349699d4e92c8c": {
+ "path": "Packages/d/d",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ }
+ },
+ "options": {
+ "mirrors": {
+ "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/one404.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ },
+ "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/updates.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ }
+ }
+ }
+ }
+}
diff --git a/test/data/sources/org.osbuild.librepo/cases/bad-metalink-checksum.json b/test/data/sources/org.osbuild.librepo/cases/bad-metalink-checksum.json
new file mode 100644
index 00000000..c8c64418
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/cases/bad-metalink-checksum.json
@@ -0,0 +1,39 @@
+{
+ "expects": "error",
+ "org.osbuild.librepo": {
+ "items": {
+ "sha256:99fa21f1b67fea84dcb9b3c7f7e09a4f150095cfa7163a19d03972fd7c826f00": {
+ "path": "Packages/a/a",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:77e6ed0bed2d720e44d77643f66b05f0eb42b06379990e5ef658ef314c415827": {
+ "path": "Packages/b/b",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa": {
+ "path": "Packages/c/c",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ },
+ "sha256:354fe7c89ac014ed6479bf162fa7b9e8b37eddc7e46719ebd4349699d4e92c8c": {
+ "path": "Packages/d/d",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ }
+ },
+ "options": {
+ "mirrors": {
+ "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/fedora.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ },
+ "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/updates.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ }
+ }
+ }
+ }
+}
diff --git a/test/data/sources/org.osbuild.librepo/cases/one-metalink.json b/test/data/sources/org.osbuild.librepo/cases/one-metalink.json
new file mode 100644
index 00000000..80a9b1af
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/cases/one-metalink.json
@@ -0,0 +1,25 @@
+{
+ "expects": "success",
+ "org.osbuild.librepo": {
+ "items": {
+ "sha256:99fa21f1b67fea84dcb9b3c7f7e09a4f150095cfa7163a19d03972fd7c826f00": {
+ "path": "Packages/a/a",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:77e6ed0bed2d720e44d77643f66b05f0eb42b06379990e5ef658ef314c415827": {
+ "path": "Packages/b/b",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ }
+ },
+ "options": {
+ "mirrors": {
+ "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/fedora.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ }
+ }
+ }
+ }
+}
diff --git a/test/data/sources/org.osbuild.librepo/cases/two-metalink.json b/test/data/sources/org.osbuild.librepo/cases/two-metalink.json
new file mode 100644
index 00000000..752ff607
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/cases/two-metalink.json
@@ -0,0 +1,39 @@
+{
+ "expects": "success",
+ "org.osbuild.librepo": {
+ "items": {
+ "sha256:99fa21f1b67fea84dcb9b3c7f7e09a4f150095cfa7163a19d03972fd7c826f00": {
+ "path": "Packages/a/a",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:77e6ed0bed2d720e44d77643f66b05f0eb42b06379990e5ef658ef314c415827": {
+ "path": "Packages/b/b",
+ "mirror": "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2"
+ },
+ "sha256:e99efe314a66334179236e5fb6a2e6a6431daf6aeb516162e01517a0ac708252": {
+ "path": "Packages/c/c",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ },
+ "sha256:354fe7c89ac014ed6479bf162fa7b9e8b37eddc7e46719ebd4349699d4e92c8c": {
+ "path": "Packages/d/d",
+ "mirror": "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703"
+ }
+ },
+ "options": {
+ "mirrors": {
+ "0cde5945566ff3feb627eaa84e31223d2b8be54fb446222cded36fc5e5debcc2": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/fedora.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ },
+ "d68132295d14ad03bd676009c4fe8727f5040adfb91e20ac9919101d14ff4703": {
+ "url": "http://localhost/sources/org.osbuild.librepo/data/metalink/updates.xml",
+ "type": "metalink",
+ "fastest-mirror": true,
+ "name": "metalink"
+ }
+ }
+ }
+ }
+}
diff --git a/test/data/sources/org.osbuild.librepo/data/Packages/a/a b/test/data/sources/org.osbuild.librepo/data/Packages/a/a
new file mode 100644
index 00000000..3b7706ba
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/Packages/a/a
@@ -0,0 +1 @@
+DUMMY PACKAGE a
diff --git a/test/data/sources/org.osbuild.librepo/data/Packages/b/b b/test/data/sources/org.osbuild.librepo/data/Packages/b/b
new file mode 100644
index 00000000..f978a8da
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/Packages/b/b
@@ -0,0 +1 @@
+DUMMY PACKAGE b
diff --git a/test/data/sources/org.osbuild.librepo/data/metalink/fedora.xml b/test/data/sources/org.osbuild.librepo/data/metalink/fedora.xml
new file mode 100644
index 00000000..9aba3c65
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/metalink/fedora.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ http://localhost/sources/org.osbuild.librepo/data/repodata/repomd.xml
+
+
+
+
diff --git a/test/data/sources/org.osbuild.librepo/data/metalink/one404.xml b/test/data/sources/org.osbuild.librepo/data/metalink/one404.xml
new file mode 100644
index 00000000..c4a70083
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/metalink/one404.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+ http://localhost/sources/org.osbuild.librepo/data/404/repodata/repomd.xml
+ http://localhost/sources/org.osbuild.librepo/data/repodata/repomd.xml
+
+
+
+
diff --git a/test/data/sources/org.osbuild.librepo/data/metalink/updates.xml b/test/data/sources/org.osbuild.librepo/data/metalink/updates.xml
new file mode 100644
index 00000000..17f0140e
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/metalink/updates.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+ http://localhost/sources/org.osbuild.librepo/data/updates/repodata/repomd.xml
+
+
+
+
diff --git a/test/data/sources/org.osbuild.librepo/data/updates/Packages/c/c b/test/data/sources/org.osbuild.librepo/data/updates/Packages/c/c
new file mode 100644
index 00000000..8f2929cf
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/updates/Packages/c/c
@@ -0,0 +1 @@
+DUMMY PACKAGE c
diff --git a/test/data/sources/org.osbuild.librepo/data/updates/Packages/d/d b/test/data/sources/org.osbuild.librepo/data/updates/Packages/d/d
new file mode 100644
index 00000000..2d226dd5
--- /dev/null
+++ b/test/data/sources/org.osbuild.librepo/data/updates/Packages/d/d
@@ -0,0 +1 @@
+DUMMY PACKAGE d