cri-o/cmd/kpod/push_test.go

73 lines
2 KiB
Go
Raw Normal View History

package main
import (
"os/user"
"testing"
is "github.com/containers/image/storage"
)
func TestImportImagePushDataFromImage(t *testing.T) {
u, err := user.Current()
if err != nil {
t.Log("Could not determine user. Running as root may cause tests to fail")
} else if u.Uid != "0" {
t.Fatal("tests will fail unless run as root")
}
// Get Store
store, err := getStoreForTests()
if err != nil {
t.Fatalf("could not get store: %q", err)
}
// Pull an image and save it to the store
testImageName := "docker.io/library/busybox:1.26"
err = pullTestImage(testImageName)
if err != nil {
t.Fatalf("could not pull test image: %q", err)
}
img, err := findImage(store, testImageName)
if err != nil {
t.Fatalf("could not find image in store: %q", err)
}
// Get System Context
systemContext := getSystemContext("")
// Call importImagePushDataFromImage
ipd, err := importImagePushDataFromImage(store, img, systemContext)
if err != nil {
t.Fatalf("could not get ImagePushData: %q", err)
}
// Get ref and from it, get the config and the manifest
ref, err := is.Transport.ParseStoreReference(store, "@"+img.ID)
if err != nil {
t.Fatalf("no such image %q", "@"+img.ID)
}
src, err := ref.NewImage(systemContext)
if err != nil {
t.Fatalf("error creating new image from system context: %q", err)
}
defer src.Close()
config, err := src.ConfigBlob()
if err != nil {
t.Fatalf("error reading image config: %q", err)
}
manifest, _, err := src.Manifest()
if err != nil {
t.Fatalf("error reading image manifest: %q", err)
}
//Create "expected" ipd struct
expectedIpd := &imagePushData{
store: store,
FromImage: testImageName,
FromImageID: img.ID,
Config: config,
Manifest: manifest,
ImageAnnotations: map[string]string{},
ImageCreatedBy: "",
}
expectedIpd.initConfig()
//Compare structs, error if they are not the same
if !compareImagePushData(ipd, expectedIpd) {
t.Errorf("imagePushData did not match expected imagePushData")
}
}