debian-forge-composer/internal/store/fixtures.go
Achilleas Koutsou 0e4a9e586f split: replace internal packages with images library
Remove all the internal package that are now in the
github.com/osbuild/images package and vendor it.

A new function in internal/blueprint/ converts from an osbuild-composer
blueprint to an images blueprint.  This is necessary for keeping the
blueprint implementation in both packages.  In the future, the images
package will change the blueprint (and most likely rename it) and it
will only be part of the osbuild-composer internals and interface.  The
Convert() function will be responsible for converting the blueprint into
the new configuration object.
2023-07-10 21:11:19 +02:00

356 lines
9.3 KiB
Go

package store
import (
"fmt"
"time"
"github.com/google/uuid"
"github.com/osbuild/images/pkg/distro"
"github.com/osbuild/images/pkg/distro/test_distro"
"github.com/osbuild/images/pkg/rpmmd"
"github.com/osbuild/osbuild-composer/internal/blueprint"
"github.com/osbuild/osbuild-composer/internal/common"
"github.com/osbuild/osbuild-composer/internal/target"
)
func FixtureBase() *Store {
var bName = "test"
var b = blueprint.Blueprint{
Name: bName,
Version: "0.0.0",
Packages: []blueprint.Package{},
Modules: []blueprint.Package{},
Groups: []blueprint.Group{},
Customizations: nil,
}
var date = time.Date(2019, 11, 27, 13, 19, 0, 0, time.FixedZone("UTC+1", 60*60))
var awsTarget = &target.Target{
Uuid: uuid.MustParse("10000000-0000-0000-0000-000000000000"),
Name: target.TargetNameAWS,
ImageName: "awsimage",
Created: date,
Status: common.IBWaiting,
Options: &target.AWSTargetOptions{
Region: "frankfurt",
AccessKeyID: "accesskey",
SecretAccessKey: "secretkey",
Bucket: "clay",
Key: "imagekey",
},
}
dr := test_distro.NewRegistry()
d := dr.FromHost()
arch, err := d.GetArch(test_distro.TestArchName)
if err != nil {
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
}
imgType, err := arch.GetImageType(test_distro.TestImageTypeName)
if err != nil {
panic(fmt.Sprintf("failed to get image type %s for a test distro architecture: %v", test_distro.TestImageTypeName, err))
}
manifest, _, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, 0)
if err != nil {
panic(fmt.Sprintf("failed to create a manifest: %v", err))
}
mf, err := manifest.Serialize(nil, nil, nil)
if err != nil {
panic(fmt.Sprintf("failed to create a manifest: %v", err))
}
s := New(nil, dr, nil)
pkgs := []rpmmd.PackageSpec{
{
Name: "test1",
Epoch: 0,
Version: "2.11.2",
Release: "1.fc35",
Arch: test_distro.TestArchName,
}, {
Name: "test2",
Epoch: 3,
Version: "4.2.2",
Release: "1.fc35",
Arch: test_distro.TestArchName,
}}
s.blueprints[bName] = b
s.composes = map[uuid.UUID]Compose{
uuid.MustParse("30000000-0000-0000-0000-000000000000"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBWaiting,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{awsTarget},
JobCreated: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000001"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBRunning,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{},
JobCreated: date,
JobStarted: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000002"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFinished,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{awsTarget},
JobCreated: date,
JobStarted: date,
JobFinished: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000003"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFailed,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{awsTarget},
JobCreated: date,
JobStarted: date,
JobFinished: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000004"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFinished,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{awsTarget},
JobCreated: date,
JobStarted: date,
JobFinished: date,
},
Packages: pkgs,
},
}
return s
}
func FixtureFinished() *Store {
var bName = "test"
var b = blueprint.Blueprint{
Name: bName,
Version: "0.0.0",
Packages: []blueprint.Package{},
Modules: []blueprint.Package{},
Groups: []blueprint.Group{},
Customizations: nil,
}
var date = time.Date(2019, 11, 27, 13, 19, 0, 0, time.FixedZone("UTC+1", 60*60))
var gcpTarget = &target.Target{
Uuid: uuid.MustParse("20000000-0000-0000-0000-000000000000"),
Name: target.TargetNameGCP,
ImageName: "localimage",
Created: date,
Status: common.IBWaiting,
Options: &target.GCPTargetOptions{},
}
var awsTarget = &target.Target{
Uuid: uuid.MustParse("10000000-0000-0000-0000-000000000000"),
Name: target.TargetNameAWS,
ImageName: "awsimage",
Created: date,
Status: common.IBWaiting,
Options: &target.AWSTargetOptions{
Region: "frankfurt",
AccessKeyID: "accesskey",
SecretAccessKey: "secretkey",
Bucket: "clay",
Key: "imagekey",
},
}
dr := test_distro.NewRegistry()
d := dr.FromHost()
arch, err := d.GetArch(test_distro.TestArchName)
if err != nil {
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
}
imgType, err := arch.GetImageType(test_distro.TestImageTypeName)
if err != nil {
panic(fmt.Sprintf("failed to get image type %s for a test distro architecture: %v", test_distro.TestImageTypeName, err))
}
manifest, _, err := imgType.Manifest(nil, distro.ImageOptions{}, nil, 0)
if err != nil {
panic(fmt.Sprintf("failed to create a manifest: %v", err))
}
mf, err := manifest.Serialize(nil, nil, nil)
if err != nil {
panic(fmt.Sprintf("failed to create a manifest: %v", err))
}
s := New(nil, dr, nil)
pkgs := []rpmmd.PackageSpec{
{
Name: "test1",
Epoch: 0,
Version: "2.11.2",
Release: "1.fc35",
Arch: test_distro.TestArchName,
}, {
Name: "test2",
Epoch: 3,
Version: "4.2.2",
Release: "1.fc35",
Arch: test_distro.TestArchName,
}}
s.blueprints[bName] = b
s.composes = map[uuid.UUID]Compose{
uuid.MustParse("30000000-0000-0000-0000-000000000000"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFinished,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{gcpTarget, awsTarget},
JobCreated: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000001"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFinished,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{gcpTarget},
JobCreated: date,
JobStarted: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000003"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFailed,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{gcpTarget, awsTarget},
JobCreated: date,
JobStarted: date,
JobFinished: date,
},
Packages: []rpmmd.PackageSpec{},
},
uuid.MustParse("30000000-0000-0000-0000-000000000004"): {
Blueprint: &b,
ImageBuild: ImageBuild{
QueueStatus: common.IBFinished,
ImageType: imgType,
Manifest: mf,
Targets: []*target.Target{gcpTarget},
JobCreated: date,
JobStarted: date,
},
Packages: pkgs,
},
}
return s
}
func FixtureEmpty() *Store {
var bName = "test"
var b = blueprint.Blueprint{
Name: bName,
Version: "0.0.0",
Packages: []blueprint.Package{},
Modules: []blueprint.Package{},
Groups: []blueprint.Group{},
Customizations: nil,
}
dr := test_distro.NewRegistry()
d := dr.FromHost()
_, err := d.GetArch(test_distro.TestArchName)
if err != nil {
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
}
s := New(nil, dr, nil)
s.blueprints[bName] = b
// 2nd distro blueprint
b2 := b
b2.Name = "test-distro-2"
b2.Distro = "test-distro-2"
s.blueprints[b2.Name] = b2
// Unknown distro blueprint
b3 := b
b3.Name = "test-fedora-1"
b3.Distro = "fedora-1"
s.blueprints[b3.Name] = b3
return s
}
// FixtureOldChanges contains a blueprint and old changes
// This simulates restarting the service and losing the old blueprints
func FixtureOldChanges() *Store {
var bName = "test-old-changes"
var b = blueprint.Blueprint{
Name: bName,
Version: "0.0.0",
Packages: []blueprint.Package{},
Modules: []blueprint.Package{},
Groups: []blueprint.Group{},
Customizations: nil,
}
dr := test_distro.NewRegistry()
d := dr.FromHost()
_, err := d.GetArch(test_distro.TestArchName)
if err != nil {
panic(fmt.Sprintf("failed to get architecture %s for a test distro: %v", test_distro.TestArchName, err))
}
s := New(nil, dr, nil)
s.PushBlueprint(b, "Initial commit")
b.Version = "0.0.1"
b.Packages = []blueprint.Package{{Name: "tmux", Version: "1.2.3"}}
s.PushBlueprint(b, "Add tmux package")
b.Version = "0.0.2"
b.Packages = []blueprint.Package{{Name: "tmux", Version: "*"}}
s.PushBlueprint(b, "Change tmux version")
// Replace the associated blueprints. This simulates reading the store from
// disk which doesn't actually save the old blueprints to disk.
for bp := range s.blueprintsChanges {
for c := range s.blueprintsChanges[bp] {
change := s.blueprintsChanges[bp][c]
change.Blueprint = blueprint.Blueprint{}
s.blueprintsChanges[bp][c] = change
}
}
return s
}