|
@@ -0,0 +1,96 @@
|
|
|
+import infra.basetest
|
|
|
+import os
|
|
|
+import time
|
|
|
+
|
|
|
+
|
|
|
+class TestDistributionRegistry(infra.basetest.BRTest):
|
|
|
+ config = \
|
|
|
+ """
|
|
|
+ BR2_arm=y
|
|
|
+ BR2_cortex_a9=y
|
|
|
+ BR2_ARM_ENABLE_VFP=y
|
|
|
+ BR2_TOOLCHAIN_EXTERNAL=y
|
|
|
+ BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y
|
|
|
+ BR2_PER_PACKAGE_DIRECTORIES=y
|
|
|
+ BR2_SYSTEM_DHCP="eth0"
|
|
|
+ BR2_LINUX_KERNEL=y
|
|
|
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
|
|
|
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="5.10.202"
|
|
|
+ BR2_LINUX_KERNEL_DEFCONFIG="vexpress"
|
|
|
+ BR2_LINUX_KERNEL_DTS_SUPPORT=y
|
|
|
+ BR2_LINUX_KERNEL_INTREE_DTS_NAME="vexpress-v2p-ca9"
|
|
|
+ BR2_PACKAGE_CA_CERTIFICATES=y
|
|
|
+ BR2_PACKAGE_DISTRIBUTION_REGISTRY=y
|
|
|
+ BR2_PACKAGE_SKOPEO=y
|
|
|
+ BR2_PACKAGE_HOST_GO_BIN=y
|
|
|
+ BR2_TARGET_ROOTFS_CPIO=y
|
|
|
+ # BR2_TARGET_ROOTFS_TAR is not set
|
|
|
+ """
|
|
|
+
|
|
|
+ def test_run(self):
|
|
|
+ kernel_file = os.path.join(self.builddir, "images", "zImage")
|
|
|
+ dtb_file = os.path.join(self.builddir, "images", "vexpress-v2p-ca9.dtb")
|
|
|
+ cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio")
|
|
|
+ self.emulator.boot(
|
|
|
+ arch="armv5",
|
|
|
+ kernel=kernel_file,
|
|
|
+ kernel_cmdline=[
|
|
|
+ 'console=ttyAMA0',
|
|
|
+ ],
|
|
|
+ options=[
|
|
|
+ '-M', 'vexpress-a9',
|
|
|
+ "-m", "1G",
|
|
|
+ "-nic", "user,model=lan9118",
|
|
|
+ "-dtb", dtb_file,
|
|
|
+ "-initrd", cpio_file,
|
|
|
+ ],
|
|
|
+ )
|
|
|
+ self.emulator.login()
|
|
|
+
|
|
|
+ # Allow unfettered access to the local registry:
|
|
|
+ registry_conf = "\\n".join( # \\n to be interpreted by printf in the target
|
|
|
+ [
|
|
|
+ '[[registry]]',
|
|
|
+ 'location = "localhost:5000"',
|
|
|
+ 'insecure = true',
|
|
|
+ ],
|
|
|
+ )
|
|
|
+ self.assertRunOk("mkdir /etc/containers/registries.conf.d")
|
|
|
+ self.assertRunOk(
|
|
|
+ f"printf '{registry_conf}\\n' >/etc/containers/registries.conf.d/localhost.conf",
|
|
|
+ )
|
|
|
+
|
|
|
+ # Check we can at least run
|
|
|
+ self.assertRunOk("distribution-registry --version", timeout=30)
|
|
|
+
|
|
|
+ # Spawn the registry and wait for it to be ready
|
|
|
+ self.assertRunOk(
|
|
|
+ "distribution-registry serve /etc/docker/registry/config.yml >/tmp/registry.log 2>&1 &",
|
|
|
+ )
|
|
|
+ for i in range(60):
|
|
|
+ time.sleep(1)
|
|
|
+ _, ret = self.emulator.run("test -s /tmp/registry.log")
|
|
|
+ if ret == 0:
|
|
|
+ time.sleep(2) # Wait just a little tiny bit more...
|
|
|
+ break
|
|
|
+ else:
|
|
|
+ raise SystemError("Cannot start the registry")
|
|
|
+
|
|
|
+ # Get a multi-arch image from the Docker hub registry
|
|
|
+ # Huge timeout because qemu-system-arm has slirp issues
|
|
|
+ self.assertRunOk(
|
|
|
+ "skopeo copy -a docker://busybox:1.37.0-glibc oci-archive:busybox-1.37.0-glibc.oci",
|
|
|
+ timeout=600,
|
|
|
+ )
|
|
|
+
|
|
|
+ # Push the multi-arch image to the local registry
|
|
|
+ self.assertRunOk(
|
|
|
+ "skopeo copy -a oci-archive:busybox-1.37.0-glibc.oci docker://localhost:5000/busybox:1.37.0-glibc",
|
|
|
+ timeout=120,
|
|
|
+ )
|
|
|
+
|
|
|
+ # Pull the image back
|
|
|
+ self.assertRunOk(
|
|
|
+ "skopeo copy -a docker://localhost:5000/busybox:1.37.0-glibc oci-archive:busybox-1.37.0-glibc-2.oci",
|
|
|
+ timeout=120,
|
|
|
+ )
|