@@ -20,7 +20,6 @@ import (
2020 "context"
2121 "errors"
2222 "fmt"
23- "strings"
2423 "testing"
2524
2625 "github.com/google/go-cmp/cmp"
@@ -341,198 +340,3 @@ type failingListClient struct {
341340func (c * failingListClient ) List (ctx context.Context , list client.ObjectList , opts ... client.ListOption ) error {
342341 return fmt .Errorf ("simulated client error" )
343342}
344-
345- func TestFetchBindingFromKey (t * testing.T ) {
346- ctx := context .Background ()
347-
348- tests := []struct {
349- name string
350- placementKey queue.PlacementKey
351- objects []client.Object
352- wantBinding placementv1beta1.BindingObj
353- wantErr bool
354- expectedErr error
355- }{
356- {
357- name : "cluster-scoped binding - found" ,
358- placementKey : queue .PlacementKey ("test-binding" ),
359- objects : []client.Object {
360- & placementv1beta1.ClusterResourceBinding {
361- ObjectMeta : metav1.ObjectMeta {
362- Name : "test-binding" ,
363- Labels : map [string ]string {
364- placementv1beta1 .CRPTrackingLabel : "test-placement" ,
365- },
366- },
367- Spec : placementv1beta1.ResourceBindingSpec {
368- TargetCluster : "cluster-1" ,
369- },
370- },
371- },
372- wantBinding : & placementv1beta1.ClusterResourceBinding {
373- ObjectMeta : metav1.ObjectMeta {
374- Name : "test-binding" ,
375- Labels : map [string ]string {
376- placementv1beta1 .CRPTrackingLabel : "test-placement" ,
377- },
378- },
379- Spec : placementv1beta1.ResourceBindingSpec {
380- TargetCluster : "cluster-1" ,
381- },
382- },
383- wantErr : false ,
384- },
385- {
386- name : "cluster-scoped binding - not found" ,
387- placementKey : queue .PlacementKey ("nonexistent-binding" ),
388- objects : []client.Object {},
389- wantErr : true ,
390- },
391- {
392- name : "namespaced binding - found" ,
393- placementKey : queue .PlacementKey ("test-namespace/test-binding" ),
394- objects : []client.Object {
395- & placementv1beta1.ResourceBinding {
396- ObjectMeta : metav1.ObjectMeta {
397- Name : "test-binding" ,
398- Namespace : "test-namespace" ,
399- Labels : map [string ]string {
400- placementv1beta1 .CRPTrackingLabel : "test-placement" ,
401- },
402- },
403- Spec : placementv1beta1.ResourceBindingSpec {
404- TargetCluster : "cluster-1" ,
405- },
406- },
407- },
408- wantBinding : & placementv1beta1.ResourceBinding {
409- ObjectMeta : metav1.ObjectMeta {
410- Name : "test-binding" ,
411- Namespace : "test-namespace" ,
412- Labels : map [string ]string {
413- placementv1beta1 .CRPTrackingLabel : "test-placement" ,
414- },
415- },
416- Spec : placementv1beta1.ResourceBindingSpec {
417- TargetCluster : "cluster-1" ,
418- },
419- },
420- wantErr : false ,
421- },
422- {
423- name : "namespaced binding - not found" ,
424- placementKey : queue .PlacementKey ("test-namespace/nonexistent-binding" ),
425- objects : []client.Object {},
426- wantErr : true ,
427- },
428- {
429- name : "namespaced binding - wrong namespace" ,
430- placementKey : queue .PlacementKey ("wrong-namespace/test-binding" ),
431- objects : []client.Object {
432- & placementv1beta1.ResourceBinding {
433- ObjectMeta : metav1.ObjectMeta {
434- Name : "test-binding" ,
435- Namespace : "test-namespace" , // different namespace
436- Labels : map [string ]string {
437- placementv1beta1 .CRPTrackingLabel : "test-placement" ,
438- },
439- },
440- Spec : placementv1beta1.ResourceBindingSpec {
441- TargetCluster : "cluster-1" ,
442- },
443- },
444- },
445- wantErr : true ,
446- },
447- {
448- name : "invalid placement key format - too many separators" ,
449- placementKey : queue .PlacementKey ("namespace/binding/extra" ),
450- objects : []client.Object {},
451- wantErr : true ,
452- expectedErr : ErrUnexpectedBehavior ,
453- },
454- {
455- name : "invalid placement key format - empty parts" ,
456- placementKey : queue .PlacementKey ("namespace/" ),
457- objects : []client.Object {},
458- wantErr : true ,
459- expectedErr : ErrUnexpectedBehavior ,
460- },
461- {
462- name : "invalid placement key format - empty namespace" ,
463- placementKey : queue .PlacementKey ("/binding" ),
464- objects : []client.Object {},
465- wantErr : true ,
466- expectedErr : ErrUnexpectedBehavior ,
467- },
468- }
469-
470- for _ , tt := range tests {
471- t .Run (tt .name , func (t * testing.T ) {
472- scheme := runtime .NewScheme ()
473- _ = placementv1beta1 .AddToScheme (scheme )
474-
475- fakeClient := fake .NewClientBuilder ().
476- WithScheme (scheme ).
477- WithObjects (tt .objects ... ).
478- Build ()
479-
480- got , err := FetchBindingFromKey (ctx , fakeClient , tt .placementKey )
481-
482- if tt .wantErr {
483- if err == nil {
484- t .Fatalf ("Expected error but got nil" )
485- }
486- if tt .expectedErr != nil && ! errors .Is (err , tt .expectedErr ) {
487- t .Fatalf ("Expected error: %v, but got: %v" , tt .expectedErr , err )
488- }
489- return
490- }
491-
492- if err != nil {
493- t .Fatalf ("Expected no error but got: %v" , err )
494- }
495-
496- // Use cmp.Diff to compare the actual result with expected binding
497- // Ignore resource version and other metadata fields that may differ
498- if diff := cmp .Diff (got , tt .wantBinding ,
499- cmpopts .IgnoreFields (metav1.ObjectMeta {}, "ResourceVersion" )); diff != "" {
500- t .Errorf ("FetchBindingFromKey() diff (-got +want):\n %s" , diff )
501- }
502- })
503- }
504- }
505-
506- func TestFetchBindingFromKey_ClientError (t * testing.T ) {
507- ctx := context .Background ()
508-
509- // Create a client that will return an error
510- scheme := runtime .NewScheme ()
511- _ = placementv1beta1 .AddToScheme (scheme )
512-
513- // Use a failing client for Get operations
514- fakeClient := & failingGetClient {
515- Client : fake .NewClientBuilder ().WithScheme (scheme ).Build (),
516- }
517-
518- _ , err := FetchBindingFromKey (ctx , fakeClient , queue .PlacementKey ("test-binding" ))
519-
520- if err == nil {
521- t .Fatalf ("Expected error but got nil" )
522- }
523-
524- // The error should be the simulated client error, not wrapped as APIServerError
525- // since FetchBindingFromKey doesn't wrap the Get errors
526- if ! strings .Contains (err .Error (), "simulated get error" ) {
527- t .Errorf ("Expected error to contain 'simulated get error' but got: %s" , err .Error ())
528- }
529- }
530-
531- // failingGetClient is a test helper that wraps a client and makes Get calls fail
532- type failingGetClient struct {
533- client.Client
534- }
535-
536- func (c * failingGetClient ) Get (ctx context.Context , key client.ObjectKey , obj client.Object , opts ... client.GetOption ) error {
537- return fmt .Errorf ("simulated get error" )
538- }
0 commit comments