github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/store/kubernetesdiscoverys/reducers_test.go (about) 1 package kubernetesdiscoverys 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 v1 "k8s.io/api/core/v1" 10 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 11 12 "github.com/tilt-dev/tilt/internal/store" 13 "github.com/tilt-dev/tilt/internal/store/k8sconv" 14 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 15 "github.com/tilt-dev/tilt/pkg/model" 16 ) 17 18 func TestActionDeleteApplyFirst(t *testing.T) { 19 ka := newApply("a") 20 kd := newDiscovery("a", nil) 21 22 state := store.NewState() 23 state.KubernetesApplys[ka.Name] = ka 24 HandleKubernetesDiscoveryUpsertAction(state, KubernetesDiscoveryUpsertAction{ 25 KubernetesDiscovery: kd, 26 }) 27 assert.Equal(t, kd, state.KubernetesResources[kd.Name].Discovery) 28 29 delete(state.KubernetesApplys, ka.Name) 30 HandleKubernetesDiscoveryDeleteAction(state, KubernetesDiscoveryDeleteAction{ 31 Name: kd.Name, 32 }) 33 assert.Nil(t, state.KubernetesResources[kd.Name].Discovery) 34 } 35 36 func TestActionDeleteDiscoFirst(t *testing.T) { 37 ka := newApply("a") 38 kd := newDiscovery("a", nil) 39 40 state := store.NewState() 41 state.KubernetesApplys[ka.Name] = ka 42 HandleKubernetesDiscoveryUpsertAction(state, KubernetesDiscoveryUpsertAction{ 43 KubernetesDiscovery: kd, 44 }) 45 assert.Equal(t, kd, state.KubernetesResources[kd.Name].Discovery) 46 47 HandleKubernetesDiscoveryDeleteAction(state, KubernetesDiscoveryDeleteAction{ 48 Name: kd.Name, 49 }) 50 assert.Nil(t, state.KubernetesResources[kd.Name].Discovery) 51 } 52 53 func TestReadyJob(t *testing.T) { 54 start := metav1.Now() 55 podA := v1alpha1.Pod{ 56 Name: "pod-a", 57 Namespace: "default", 58 Phase: string(v1.PodFailed), 59 CreatedAt: metav1.NewTime(start.Add(-time.Hour)), 60 } 61 podB := v1alpha1.Pod{ 62 Name: "pod-b", 63 Namespace: "default", 64 Phase: string(v1.PodSucceeded), 65 CreatedAt: start, 66 } 67 68 ka := newApply("a") 69 kd := newDiscovery("a", []v1alpha1.Pod{podA, podB}) 70 71 state := store.NewState() 72 mt := store.NewManifestTarget(model.Manifest{Name: "a"}) 73 state.UpsertManifestTarget(mt) 74 state.KubernetesApplys[ka.Name] = ka 75 76 ms, ok := state.ManifestState("a") 77 require.True(t, ok) 78 krs := ms.K8sRuntimeState() 79 krs.HasEverDeployedSuccessfully = true 80 ms.RuntimeState = krs 81 assert.False(t, krs.HasEverBeenReadyOrSucceeded()) 82 83 HandleKubernetesDiscoveryUpsertAction(state, KubernetesDiscoveryUpsertAction{ 84 KubernetesDiscovery: kd, 85 }) 86 assert.True(t, ms.K8sRuntimeState().HasEverBeenReadyOrSucceeded()) 87 } 88 89 func TestNewKubernetesApplyFilterOnlyUsesYaml(t *testing.T) { 90 // RefreshKubernetesResource assumes that KubernetesApplyFilters are pure functions of the ResultYAML, 91 // and reuses filters if the yaml hasn't changed, to save time on re-parsing. If we change the signature 92 // of NewKubernetesApplyFilter to depend on anything else, then we need to change how RefreshKubernetesResource 93 // decides whether to reuse a resource's filter. 94 // This test exists purely to draw a dev's attention to the above comment if they change NewKubernetesApplyFilter's signature. 95 _, _ = k8sconv.NewKubernetesApplyFilter("") 96 } 97 98 func newApply(name string) *v1alpha1.KubernetesApply { 99 return &v1alpha1.KubernetesApply{ 100 ObjectMeta: metav1.ObjectMeta{ 101 Name: name, 102 Annotations: map[string]string{ 103 v1alpha1.AnnotationManifest: name, 104 }, 105 }, 106 } 107 } 108 109 func newDiscovery(name string, pods []v1alpha1.Pod) *v1alpha1.KubernetesDiscovery { 110 return &v1alpha1.KubernetesDiscovery{ 111 ObjectMeta: metav1.ObjectMeta{ 112 Name: name, 113 Annotations: map[string]string{ 114 v1alpha1.AnnotationManifest: name, 115 }, 116 }, 117 Status: v1alpha1.KubernetesDiscoveryStatus{ 118 Pods: pods, 119 }, 120 } 121 }