1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136
|
// Copyright (c) 2018-2020, Sylabs Inc. All rights reserved.
// This software is licensed under a 3-clause BSD license. Please consult the
// LICENSE.md file distributed with the URIs of this project regarding your
// rights to use or distribute this software.
package assemblers_test
import (
"context"
"os"
"os/exec"
"path/filepath"
"testing"
"github.com/sylabs/singularity/v4/internal/pkg/build/assemblers"
"github.com/sylabs/singularity/v4/internal/pkg/build/sources"
"github.com/sylabs/singularity/v4/internal/pkg/cache"
testCache "github.com/sylabs/singularity/v4/internal/pkg/test/tool/cache"
"github.com/sylabs/singularity/v4/pkg/build/types"
useragent "github.com/sylabs/singularity/v4/pkg/util/user-agent"
)
const (
assemblerDockerURI = "docker://alpine"
assemblerDockerDest = "/tmp/docker_alpine_assemble_test.sif"
assemblerShubURI = "shub://ikaneshiro/singularityhub:latest"
assemblerShubDest = "/tmp/shub_alpine_assemble_test.sif"
)
func TestMain(m *testing.M) {
useragent.InitValue("singularity", "3.0.0-alpha.1-303-gaed8d30-dirty")
os.Exit(m.Run())
}
// TestSIFAssemblerDocker sees if we can build a SIF image from an image from a Docker registry
func TestSIFAssemblerDocker(t *testing.T) {
if testing.Short() {
t.SkipNow()
}
mksquashfsPath, err := exec.LookPath("mksquashfs")
if err != nil {
t.Fatalf("could not find mksquashfs: %v", err)
}
b, err := types.NewBundle(filepath.Join(os.TempDir(), "sbuild-SIFAssembler"), os.TempDir())
if err != nil {
t.Fatalf("unable to make bundle: %v", err)
}
defer b.Remove()
b.Recipe, err = types.NewDefinitionFromURI(assemblerDockerURI)
if err != nil {
t.Fatalf("unable to parse URI %s: %v\n", assemblerDockerURI, err)
}
// set a clean image cache
imgCacheDir := testCache.MakeDir(t, "")
defer testCache.DeleteDir(t, imgCacheDir)
imgCache, err := cache.New(cache.Config{ParentDir: imgCacheDir})
if err != nil {
t.Fatalf("failed to create an image cache handle: %s", err)
}
b.Opts.ImgCache = imgCache
ocp := &sources.OCIConveyorPacker{}
if err = ocp.Get(context.Background(), b); err != nil {
t.Fatalf("failed to Get from %s: %v\n", assemblerDockerURI, err)
}
_, err = ocp.Pack(context.Background())
if err != nil {
t.Fatalf("failed to Pack from %s: %v\n", assemblerDockerURI, err)
}
a := &assemblers.SIFAssembler{
MksquashfsPath: mksquashfsPath,
}
err = a.Assemble(b, assemblerDockerDest)
if err != nil {
t.Fatalf("failed to assemble from %s: %v\n", assemblerDockerURI, err)
}
defer os.Remove(assemblerDockerDest)
}
// TestSIFAssemblerShub sees if we can build a SIF image from an image from a Singularity registry
func TestSIFAssemblerShub(t *testing.T) {
if testing.Short() {
t.SkipNow()
}
// TODO(mem): reenable this; disabled while shub is down
t.Skip("Skipping tests that access singularity hub")
mksquashfsPath, err := exec.LookPath("mksquashfs")
if err != nil {
t.Fatalf("could not find mksquashfs: %v", err)
}
b, err := types.NewBundle(filepath.Join(os.TempDir(), "sbuild-SIFAssembler"), os.TempDir())
if err != nil {
t.Fatalf("unable to make bundle: %v", err)
}
defer b.Remove()
b.Recipe, err = types.NewDefinitionFromURI(assemblerShubURI)
if err != nil {
t.Fatalf("unable to parse URI %s: %v\n", assemblerShubURI, err)
}
scp := &sources.ShubConveyorPacker{}
if err := scp.Get(context.Background(), b); err != nil {
t.Fatalf("failed to Get from %s: %v\n", assemblerShubURI, err)
}
_, err = scp.Pack(context.Background())
if err != nil {
t.Fatalf("failed to Pack from %s: %v\n", assemblerShubURI, err)
}
a := &assemblers.SIFAssembler{
MksquashfsPath: mksquashfsPath,
}
err = a.Assemble(b, assemblerShubDest)
if err != nil {
t.Fatalf("failed to assemble from %s: %v\n", assemblerShubURI, err)
}
defer os.Remove(assemblerShubDest)
}
|