github.com/alibaba/sealer@v0.8.6-0.20220430115802-37a2bdaa8173/pkg/image/store/image_store_test.go (about) 1 // Copyright © 2021 Alibaba Group Holding Ltd. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package store 16 17 import ( 18 "os" 19 "testing" 20 21 "gotest.tools/skip" 22 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 23 24 "github.com/alibaba/sealer/common" 25 "github.com/alibaba/sealer/pkg/image/types" 26 v1 "github.com/alibaba/sealer/types/api/v1" 27 ) 28 29 var images = []v1.Image{ 30 { 31 ObjectMeta: metav1.ObjectMeta{ 32 Name: "a", 33 }, 34 Spec: v1.ImageSpec{ 35 ID: "imagea", 36 }, 37 }, 38 { 39 ObjectMeta: metav1.ObjectMeta{ 40 Name: "b", 41 }, 42 Spec: v1.ImageSpec{ 43 ID: "imageb", 44 }, 45 }, 46 { 47 ObjectMeta: metav1.ObjectMeta{ 48 Name: "c", 49 }, 50 Spec: v1.ImageSpec{ 51 ID: "imagec", 52 }, 53 }, 54 { 55 ObjectMeta: metav1.ObjectMeta{ 56 Name: "d", 57 }, 58 Spec: v1.ImageSpec{ 59 ID: "imaged", 60 }, 61 }, 62 } 63 64 var dirs = []string{ 65 imageDBRoot, 66 common.DefaultTmpDir, 67 } 68 69 var platformMap = map[string]*v1.Platform{ 70 "amd64": { 71 OS: "linux", 72 Architecture: "amd64", 73 }, 74 "arm64": { 75 OS: "linux", 76 Architecture: "arm64", 77 }, 78 "arm": { 79 OS: "linux", 80 Architecture: "arm", 81 Variant: "v6", 82 }, 83 } 84 85 func init() { 86 for _, dir := range dirs { 87 err := os.MkdirAll(dir, 0755) 88 if err != nil { 89 panic(err) 90 } 91 } 92 } 93 94 func TestImageStore_GetImage(t *testing.T) { 95 skip.If(t, os.Getuid() != 0, "skipping test that requires root") 96 97 is, err := NewDefaultImageStore() 98 if err != nil { 99 t.Error(err) 100 } 101 102 for _, image := range images { 103 err = is.Save(image) 104 if err != nil { 105 t.Errorf("failed to save image %s, err: %s", image.Name, err) 106 } 107 } 108 109 for _, image := range images { 110 _, err = is.GetByID(image.Spec.ID) 111 if err != nil { 112 t.Errorf("failed to get image by id %s, err: %s", image.Spec.ID, err) 113 } 114 115 for _, plat := range platformMap { 116 _, err = is.GetByName(image.Name, plat) 117 if err != nil { 118 t.Errorf("failed to get image by name %s, err: %s", image.Name, err) 119 } 120 _, err = is.GetImageMetadataItem(image.Name, plat) 121 if err != nil { 122 t.Errorf("failed to get image metadata item for %s, err: %s", image.Name, err) 123 } 124 } 125 } 126 } 127 128 func TestImageStore_ImageMetadataItem(t *testing.T) { 129 skip.If(t, os.Getuid() != 0, "skipping test that requires root") 130 131 is, err := NewDefaultImageStore() 132 if err != nil { 133 t.Error(err) 134 } 135 136 for _, image := range images { 137 for _, plat := range platformMap { 138 err = is.SetImageMetadataItem(image.Name, &types.ManifestDescriptor{ID: image.Spec.ID, Platform: *plat}) 139 if err != nil { 140 t.Errorf("failed to set image metadata for %s, err: %s", image.Name, err) 141 } 142 } 143 } 144 145 for _, image := range images { 146 for _, plat := range platformMap { 147 _, err = is.GetImageMetadataItem(image.Name, plat) 148 if err != nil { 149 t.Errorf("failed to set image metadata for %s, err: %s", image.Name, err) 150 } 151 } 152 } 153 }