Same as with package specs and container specs, the commit specs are added to the manifest serialization after being resolved.
356 lines
9.3 KiB
Go
356 lines
9.3 KiB
Go
package store
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/osbuild/osbuild-composer/internal/blueprint"
|
|
"github.com/osbuild/osbuild-composer/internal/common"
|
|
"github.com/osbuild/osbuild-composer/internal/distro"
|
|
"github.com/osbuild/osbuild-composer/internal/distro/test_distro"
|
|
"github.com/osbuild/osbuild-composer/internal/rpmmd"
|
|
"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
|
|
}
|