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  }