def test_bootstrap(self): """Singularity bootstrap option""" b = baseimage(image='foo.sif', _bootstrap='localimage') self.assertEqual( str(b), r'''BootStrap: localimage From: foo.sif %post . /.singularity.d/env/10-docker*.sh''')
def test_value_singularity(self): """Image name is specified""" b = baseimage(image='foo') self.assertEqual( str(b), r'''BootStrap: docker From: foo %post . /.singularity.d/env/10-docker*.sh''')
def test_as_deprecated_singularity(self): """Docker specified image naming""" b = baseimage(image='foo', AS='dev') self.assertEqual( str(b), r'''BootStrap: docker From: foo %post . /.singularity.d/env/10-docker*.sh''')
def test_as_singularity32(self): """Docker specified image naming""" b = baseimage(image='foo', _as='dev') self.assertEqual( str(b), r'''BootStrap: docker From: foo Stage: dev %post . /.singularity.d/env/10-docker*.sh''')
def test_multistage_noas_docker(self): """Multistage naming""" s0 = Stage() s0 += baseimage(image='centos:7') s0 += boost() s1 = Stage() s1 += s0.runtime() self.assertEqual( str(s1), r'''# Boost COPY --from=0 /usr/local/boost /usr/local/boost ENV LD_LIBRARY_PATH=/usr/local/boost/lib:$LD_LIBRARY_PATH''')
def test_multistage_as_override_docker(self): """Multistage naming""" s0 = Stage() s0 += baseimage(image='centos:7', _as='devel') s0 += boost() s1 = Stage() s1 += s0.runtime(_from='build') self.assertEqual( str(s1), r'''# Boost COPY --from=build /usr/local/boost /usr/local/boost ENV LD_LIBRARY_PATH=/usr/local/boost/lib:$LD_LIBRARY_PATH''')
def test_as_singularity32(self): """Docker specified image naming""" b = baseimage(image='foo', _as='dev') self.assertEqual( str(b), r'''# NOTE: this definition file depends on features only available in # Singularity 3.2 and later. BootStrap: docker From: foo Stage: dev %post . /.singularity.d/env/10-docker*.sh''')
def baseimage(self, image, _distro=''): """Insert the baseimage as the first layer # Arguments image (string): The image identifier to use as the base image. The value is passed to the `baseimage` primitive. _distro: The underlying Linux distribution of the base image. The value is passed to the `baseimage` primitive. """ if image: self.__layers.insert( 0, baseimage(image=image, _as=self.name, _distro=_distro))
def test_multistage_as_override_singularity(self): """Multistage naming""" s0 = Stage() s0 += baseimage(image='centos:7', _as='devel') s0 += boost() s1 = Stage() s1 += s0.runtime(_from='build') self.assertEqual( str(s1), r'''# Boost %files from build /usr/local/boost /usr/local/boost %environment export LD_LIBRARY_PATH=/usr/local/boost/lib:$LD_LIBRARY_PATH %post export LD_LIBRARY_PATH=/usr/local/boost/lib:$LD_LIBRARY_PATH''')
def test_invalid_ctype(self): """Invalid container type specified""" b = baseimage() with self.assertRaises(RuntimeError): str(b)
def test_empty_singularity(self): """Default base image""" b = baseimage() self.assertNotEqual(str(b), '')
def test_empty_docker(self): """Default base image""" b = baseimage() self.assertNotEqual(str(b), '')
def test_arch_nonexistent(self): """Base image CPU architecture specification""" b = baseimage(image='foo', _arch='nonexistent') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.X86_64)
def test_arch_ppc64le(self): """Base image CPU architecture specification""" b = baseimage(image='foo', _arch='ppc64le') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.PPC64LE)
def test_arch_aarch64(self): """Base image CPU architecture specification""" b = baseimage(image='foo', _arch='aarch64') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.AARCH64)
def test_detect_ubuntu_18(self): """Base image Linux distribution detection""" b = baseimage(image='ubuntu:18.04') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.UBUNTU) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('18.04'))
def test_as_deprecated_docker(self): """Docker specified image naming""" b = baseimage(image='foo', AS='dev') self.assertEqual(str(b), 'FROM foo AS dev')
def test_value_bash(self): """Image name is specified""" b = baseimage(image='foo') self.assertEqual(str(b), '#!/bin/bash -ex')
def test_distro_nonexistent(self): """Base image Linux distribution specification""" b = baseimage(image='foo', _distro='nonexistent') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.UBUNTU) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('16.04'))
def test_distro_centos8(self): """Base image Linux distribution specification""" b = baseimage(image='foo', _distro='centos8') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.CENTOS) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('8.0'))
def test_detect_ubi8(self): """Base image Linux distribution detection""" b = baseimage(image='nvidia/cuda:10.1-devel-ubi8') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.RHEL) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('8.0'))
def test_detect_centos_8(self): """Base image Linux distribution detection""" b = baseimage(image='centos:8') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.CENTOS) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('8.0'))
def test_detect_centos(self): """Base image Linux distribution detection""" b = baseimage(image='nvidia/cuda:9.0-devel-centos7') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.CENTOS) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('7.0'))
def test_value_docker(self): """Image name is specified""" b = baseimage(image='foo') self.assertEqual(str(b), 'FROM foo')
def baseimage(self, image, _distro=''): """Insert the baseimage as the first layer""" if image: self.__layers.insert( 0, baseimage(image=image, _as=self.name, _distro=_distro))
def test_detect_ubuntu16(self): """Base image Linux distribution detection""" b = baseimage(image='nvidia/cuda:9.0-devel-ubuntu16.04') self.assertEqual(hpccm.config.g_linux_distro, linux_distro.UBUNTU) self.assertEqual(hpccm.config.g_linux_version, StrictVersion('16.04'))
def test_false_docker_env_singularity(self): """Docker env is False""" b = baseimage(image='foo', _docker_env=False) self.assertEqual(str(b), r'''BootStrap: docker From: foo''')
def test_detect_ppc64le(self): """Base image CPU architecture detection""" b = baseimage(image='ppc64le/centos:7') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.PPC64LE)
def test_detect_aarch64(self): """Base image CPU architecture detection""" b = baseimage(image='arm64v8/centos:7') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.AARCH64)
def test_detect_nonexistent(self): """Base image CPU architecture detection""" b = baseimage(image='foo') self.assertEqual(hpccm.config.g_cpu_arch, cpu_arch.X86_64)