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  }