github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/dockerimage/reconciler_test.go (about) 1 package dockerimage 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/jonboulle/clockwork" 8 "github.com/stretchr/testify/require" 9 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 "k8s.io/apimachinery/pkg/types" 11 "sigs.k8s.io/controller-runtime/pkg/reconcile" 12 13 "github.com/tilt-dev/tilt/internal/build" 14 "github.com/tilt-dev/tilt/internal/controllers/core/cmd" 15 "github.com/tilt-dev/tilt/internal/controllers/fake" 16 "github.com/tilt-dev/tilt/internal/docker" 17 "github.com/tilt-dev/tilt/internal/localexec" 18 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 19 ) 20 21 func TestIndexCluster(t *testing.T) { 22 f := newFixture(t) 23 24 f.Create(&v1alpha1.DockerImage{ 25 ObjectMeta: metav1.ObjectMeta{ 26 Name: "my-image", 27 }, 28 Spec: v1alpha1.DockerImageSpec{ 29 Cluster: "cluster", 30 }, 31 }) 32 33 ctx := context.Background() 34 reqs := f.r.indexer.Enqueue(ctx, &v1alpha1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "cluster"}}) 35 require.ElementsMatch(t, []reconcile.Request{ 36 {NamespacedName: types.NamespacedName{Name: "my-image"}}, 37 }, reqs, "Index result for known cluster") 38 39 reqs = f.r.indexer.Enqueue(ctx, &v1alpha1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "other"}}) 40 require.Empty(t, reqs, "Index result for unknown cluster") 41 } 42 43 type fixture struct { 44 *fake.ControllerFixture 45 r *Reconciler 46 } 47 48 func newFixture(t testing.TB) *fixture { 49 cfb := fake.NewControllerFixtureBuilder(t) 50 clock := clockwork.NewFakeClock() 51 52 fe := cmd.NewProcessExecer(localexec.EmptyEnv()) 53 fpm := cmd.NewFakeProberManager() 54 cmds := cmd.NewController(cfb.Context(), fe, fpm, cfb.Client, cfb.Store, clock, v1alpha1.NewScheme()) 55 56 dockerCli := docker.NewFakeClient() 57 ib := build.NewImageBuilder( 58 build.NewDockerBuilder(dockerCli, nil), 59 build.NewCustomBuilder(dockerCli, clock, cmds), 60 build.NewKINDLoader()) 61 62 r := NewReconciler(cfb.Client, cfb.Store, cfb.Scheme(), dockerCli, ib) 63 return &fixture{ 64 ControllerFixture: cfb.Build(r), 65 r: r, 66 } 67 }