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  }