@@ -26,6 +26,7 @@ import (
2626
2727 "github.com/hetznercloud/hcloud-go/v2/hcloud"
2828 "github.com/hetznercloud/hcloud-go/v2/hcloud/schema"
29+ "github.com/syself/hetzner-cloud-controller-manager/internal/robot/client/cache"
2930 "github.com/syself/hrobot-go/models"
3031 corev1 "k8s.io/api/core/v1"
3132 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -173,6 +174,69 @@ func TestInstances_InstanceExists(t *testing.T) {
173174 }
174175}
175176
177+ func TestInstances_InstanceExistsRobotServerCreatedAfterCacheFill (t * testing.T ) {
178+ env := newTestEnv ()
179+ defer env .Teardown ()
180+
181+ resetEnv := Setenv (t ,
182+ "ROBOT_USER_NAME" , "user" ,
183+ "ROBOT_PASSWORD" , "pass" ,
184+ "CACHE_TIMEOUT" , "1h" ,
185+ )
186+ defer resetEnv ()
187+
188+ // servers backs the Robot list response and is mutated during the test.
189+ servers := make ([]models.Server , 0 , 2 )
190+ servers = append (servers , models.Server {
191+ ServerIP : "123.123.123.123" ,
192+ ServerIPv6Net : "2a01:f48:111:4221::" ,
193+ ServerNumber : 321 ,
194+ Name : "bm-existing" ,
195+ })
196+ env .Mux .HandleFunc ("/robot/server" , func (w http.ResponseWriter , _ * http.Request ) {
197+ responses := make ([]models.ServerResponse , 0 , len (servers ))
198+ for _ , server := range servers {
199+ responses = append (responses , models.ServerResponse {Server : server })
200+ }
201+ json .NewEncoder (w ).Encode (responses )
202+ })
203+
204+ robotClient , err := cache .NewCachedRobotClient (t .TempDir (), env .Server .Client (), env .Server .URL + "/robot" )
205+ if err != nil {
206+ t .Fatalf ("Unexpected error creating cached robot client: %v" , err )
207+ }
208+
209+ instances := newInstances (env .Client , robotClient , AddressFamilyIPv4 , 0 )
210+
211+ // Warm the cache while bm-new does not exist yet.
212+ exists , err := instances .InstanceExists (context .TODO (), & corev1.Node {
213+ ObjectMeta : metav1.ObjectMeta {Name : "bm-existing" },
214+ })
215+ if err != nil {
216+ t .Fatalf ("Unexpected error warming cache: %v" , err )
217+ }
218+ if ! exists {
219+ t .Fatal ("Expected bm-existing to exist" )
220+ }
221+
222+ servers = append (servers , models.Server {
223+ ServerIP : "123.123.123.124" ,
224+ ServerIPv6Net : "2a01:f48:111:4222::" ,
225+ ServerNumber : 322 ,
226+ Name : "bm-new" ,
227+ })
228+
229+ exists , err = instances .InstanceExists (context .TODO (), & corev1.Node {
230+ ObjectMeta : metav1.ObjectMeta {Name : "bm-new" },
231+ })
232+ if err != nil {
233+ t .Fatalf ("Unexpected error for bm-new: %v" , err )
234+ }
235+ if ! exists {
236+ t .Fatal ("Expected bm-new to exist after it was created" )
237+ }
238+ }
239+
176240func TestInstances_InstanceShutdown (t * testing.T ) {
177241 env := newTestEnv ()
178242 defer env .Teardown ()
0 commit comments