github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/fake/upsert.go (about) 1 package fake 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 apierrors "k8s.io/apimachinery/pkg/api/errors" 10 "k8s.io/apimachinery/pkg/types" 11 ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" 12 ) 13 14 // Helper methods for making updates. 15 16 func UpsertSpec(ctx context.Context, t testing.TB, ctrlClient ctrlclient.Client, obj ctrlclient.Object) { 17 t.Helper() 18 19 require.True(t, obj.GetName() != "", "object has empty name") 20 err := ctrlClient.Create(ctx, obj) 21 if ctx.Err() != nil { 22 return 23 } 24 if err != nil { 25 if apierrors.IsAlreadyExists(err) { 26 return 27 } 28 assert.Fail(t, "create failed", "%+v %+v", obj, err) 29 return 30 } 31 32 copy := obj.DeepCopyObject().(ctrlclient.Object) 33 err = ctrlClient.Get(ctx, types.NamespacedName{Name: obj.GetName()}, copy) 34 if ctx.Err() != nil { 35 return 36 } 37 assert.NoError(t, err) 38 39 obj.SetResourceVersion(copy.GetResourceVersion()) 40 41 err = ctrlClient.Update(ctx, obj) 42 if ctx.Err() != nil { 43 return 44 } 45 assert.NoError(t, err) 46 } 47 48 func UpdateStatus(ctx context.Context, t testing.TB, ctrlClient ctrlclient.Client, obj ctrlclient.Object) { 49 copy := obj.DeepCopyObject().(ctrlclient.Object) 50 err := ctrlClient.Get(ctx, types.NamespacedName{Name: obj.GetName()}, copy) 51 if ctx.Err() != nil { 52 return 53 } 54 assert.NoError(t, err) 55 56 obj.SetResourceVersion(copy.GetResourceVersion()) 57 58 err = ctrlClient.Status().Update(ctx, obj) 59 if ctx.Err() != nil { 60 return 61 } 62 assert.NoError(t, err) 63 }