From 4d75a60a8e1fc28df3eb00ea34edd070e54bf3ec Mon Sep 17 00:00:00 2001 From: Vitor Falcao Date: Mon, 28 Mar 2022 12:08:21 -0300 Subject: [PATCH] test(imagesset): adds tests for AddImages --- pkg/docker/imagesset.go | 13 ++++++++++ pkg/docker/imagesset_test.go | 47 ++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 pkg/docker/imagesset_test.go diff --git a/pkg/docker/imagesset.go b/pkg/docker/imagesset.go index 83bef13..98a5c5e 100644 --- a/pkg/docker/imagesset.go +++ b/pkg/docker/imagesset.go @@ -2,6 +2,7 @@ package docker import "errors" +// ImagesSet is a set of images. It maps image IDs to images. type ImagesSet struct { size int mapping map[string]*Image @@ -13,6 +14,8 @@ func init() { globalImagesSet = NewImagesSet() } +// NewImagesSet returns a new instance of ImagesSet. +// You may pass initial images to the constructor. func NewImagesSet(images ...*Image) *ImagesSet { set := &ImagesSet{ mapping: make(map[string]*Image), @@ -23,6 +26,8 @@ func NewImagesSet(images ...*Image) *ImagesSet { return set } +// AddImages adds images to the set. +// It returns an error if there are any ID collisions. func (is *ImagesSet) AddImages(imgs ...*Image) error { for _, img := range imgs { _, ok := is.mapping[img.Config.ID] @@ -35,27 +40,35 @@ func (is *ImagesSet) AddImages(imgs ...*Image) error { return nil } +// FindImage searches for an image ID and returns (*Image, true) +// if found. If not found it returns (nil, false). func (is *ImagesSet) FindImage(id string) (*Image, bool) { img, ok := is.mapping[id] return img, ok } +// IterateImages iterates over all images in the set. func (is *ImagesSet) IterateImages(f func(string, *Image)) { for id, img := range is.mapping { f(id, img) } } +// AddImages adds images to the global set. +// It returns an error if there are any ID collisions. func AddImages(imgs ...*Image) error { is := globalImagesSet return is.AddImages(imgs...) } +// FindImage searches in the global set for an image ID and returns (*Image, true) +// if found. If not found it returns (nil, false). func FindImage(id string) (*Image, bool) { is := globalImagesSet return is.FindImage(id) } +// IterateImages iterates over all images in the global set. func IterateImages(f func(string, *Image)) { is := globalImagesSet is.IterateImages(f) diff --git a/pkg/docker/imagesset_test.go b/pkg/docker/imagesset_test.go new file mode 100644 index 0000000..a5f19b7 --- /dev/null +++ b/pkg/docker/imagesset_test.go @@ -0,0 +1,47 @@ +package docker + +import "testing" + +func TestImagesSet_AddImages(t *testing.T) { + tests := []struct { + name string + imagesAdded []map[string]interface{} + imagesToAdd []map[string]interface{} + wantErr bool + }{ + { + name: "adds images without error", + imagesAdded: []map[string]interface{}{}, + imagesToAdd: []map[string]interface{}{ + {"id": "1"}, + }, + wantErr: false, + }, + { + name: "adds duplicated images", + imagesAdded: []map[string]interface{}{ + {"id": "1"}, + }, + imagesToAdd: []map[string]interface{}{ + {"id": "1"}, + }, + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + imagesAdded := make([]*Image, len(tt.imagesAdded)) + for i, img := range tt.imagesAdded { + imagesAdded[i], _ = NewImage(img) + } + imagesToAdd := make([]*Image, len(tt.imagesToAdd)) + for i, img := range tt.imagesToAdd { + imagesToAdd[i], _ = NewImage(img) + } + is := NewImagesSet(imagesAdded...) + if err := is.AddImages(imagesToAdd...); (err != nil) != tt.wantErr { + t.Errorf("ImagesSet.AddImages() error = %v, wantErr %v", err, tt.wantErr) + } + }) + } +}