@@ -21,6 +21,7 @@ import (
2121 "fmt"
2222 "slices"
2323 "testing"
24+ "time"
2425
2526 "github.com/go-logr/logr"
2627 sdk "github.com/ionos-cloud/sdk-go/v6"
@@ -47,6 +48,7 @@ func (s *imageTestSuite) SetupTest() {
4748 MatchLabels : map [string ]string {
4849 "test" : "image" ,
4950 },
51+ ResolutionPolicy : infrav1 .ResolutionPolicyExact ,
5052 }
5153}
5254
@@ -121,7 +123,7 @@ func (s *imageTestSuite) TestLookupImageIgnoreMissingMachineVersion() {
121123 s .Equal ("image-1" , imageID )
122124}
123125
124- func (s * imageTestSuite ) TestLookupImageOK () {
126+ func (s * imageTestSuite ) TestLookupImageExactOK () {
125127 s .ionosClient .EXPECT ().ListLabels (s .ctx ).Return (
126128 []sdk.Label {
127129 makeTestLabel ("image" , "image-1" , "test" , "image" ),
@@ -135,10 +137,37 @@ func (s *imageTestSuite) TestLookupImageOK() {
135137 s .Equal ("image-1" , imageID )
136138}
137139
140+ func (s * imageTestSuite ) TestLookupImageNewestOK () {
141+ s .ionosClient .EXPECT ().ListLabels (s .ctx ).Return (
142+ []sdk.Label {
143+ makeTestLabel ("image" , "image-1" , "test" , "image" ),
144+ makeTestLabel ("image" , "image-2" , "test" , "image" ),
145+ makeTestLabel ("image" , "image-3" , "test" , "image" ),
146+ }, nil ,
147+ ).Once ()
148+ s .ionosClient .EXPECT ().GetDatacenterLocationByID (s .ctx , s .infraMachine .Spec .DatacenterID ).Return ("loc" , nil ).Once ()
149+ baseTime := time .Now ().Round (time .Second )
150+ s .ionosClient .EXPECT ().GetImage (s .ctx , "image-1" ).Return (s .makeTestImageWithDate ("image-1" , "img-ver1-" , "loc" , baseTime ), nil ).Once ()
151+ s .ionosClient .EXPECT ().GetImage (s .ctx , "image-2" ).Return (s .makeTestImageWithDate ("image-2" , "img-ver2-" , "loc" , baseTime .Add (2 * time .Minute )), nil ).Once ()
152+ s .ionosClient .EXPECT ().GetImage (s .ctx , "image-3" ).Return (s .makeTestImageWithDate ("image-3" , "img-ver3-" , "loc" , baseTime .Add (1 * time .Minute )), nil ).Once ()
153+
154+ s .infraMachine .Spec .Disk .Image .Selector .ResolutionPolicy = infrav1 .ResolutionPolicyNewest
155+
156+ imageID , err := s .service .lookupImageID (s .ctx , s .machineScope )
157+ s .NoError (err )
158+ s .Equal ("image-2" , imageID )
159+ }
160+
138161func (s * imageTestSuite ) makeTestImage (id , namePrefix , location string ) * sdk.Image {
139162 return makeTestImage (id , namePrefix + * s .capiMachine .Spec .Version , location )
140163}
141164
165+ func (s * imageTestSuite ) makeTestImageWithDate (id , namePrefix , location string , createdDate time.Time ) * sdk.Image {
166+ img := s .makeTestImage (id , namePrefix , location )
167+ img .Metadata .CreatedDate = & sdk.IonosTime {Time : createdDate }
168+ return img
169+ }
170+
142171func TestFilterImagesByName (t * testing.T ) {
143172 images := []* sdk.Image {
144173 makeTestImage ("image-1" , "img-foo-v1.1.qcow2" , "test" ),
@@ -194,7 +223,8 @@ func TestLookupImagesBySelector(t *testing.T) {
194223
195224func makeTestImage (id , name , location string ) * sdk.Image {
196225 return & sdk.Image {
197- Id : & id ,
226+ Id : & id ,
227+ Metadata : & sdk.DatacenterElementMetadata {},
198228 Properties : & sdk.ImageProperties {
199229 Name : & name ,
200230 Location : & location ,
0 commit comments