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") } }