github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/cluster/cache_test.go (about)

     1  package cluster
     2  
     3  import (
     4  	"strconv"
     5  	"testing"
     6  	"time"
     7  
     8  	"github.com/stretchr/testify/assert"
     9  	"k8s.io/apimachinery/pkg/types"
    10  
    11  	"github.com/tilt-dev/tilt/internal/controllers/apis/cluster"
    12  	"github.com/tilt-dev/tilt/internal/docker"
    13  	"github.com/tilt-dev/tilt/internal/k8s"
    14  	"github.com/tilt-dev/tilt/internal/timecmp"
    15  )
    16  
    17  func TestConnectionManager(t *testing.T) {
    18  	type tc struct {
    19  		input             *connection
    20  		expectedK8sErr    string
    21  		expectedDockerErr string
    22  	}
    23  
    24  	fakeK8s := k8s.NewFakeK8sClient(t)
    25  	fakeDocker := docker.NewFakeClient()
    26  
    27  	tcs := []tc{
    28  		{
    29  			input: &connection{
    30  				connType:  connectionTypeK8s,
    31  				k8sClient: fakeK8s,
    32  				createdAt: time.Now(),
    33  			},
    34  			expectedDockerErr: "incorrect cluster client type: got kubernetes, expected docker",
    35  		},
    36  		{
    37  			input: &connection{
    38  				connType:  connectionTypeK8s,
    39  				k8sClient: fakeK8s,
    40  				initError: "connection error",
    41  			},
    42  			expectedK8sErr:    "connection error",
    43  			expectedDockerErr: "incorrect cluster client type: got kubernetes, expected docker",
    44  		},
    45  		{
    46  			input:             nil,
    47  			expectedK8sErr:    cluster.NotFoundError.Error(),
    48  			expectedDockerErr: cluster.NotFoundError.Error(),
    49  		},
    50  		{
    51  			input: &connection{
    52  				connType:     connectionTypeDocker,
    53  				dockerClient: fakeDocker,
    54  			},
    55  			expectedK8sErr: "incorrect cluster client type: got docker, expected kubernetes",
    56  		},
    57  		{
    58  			input: &connection{
    59  				connType:     connectionTypeDocker,
    60  				dockerClient: fakeDocker,
    61  				initError:    "some docker error",
    62  			},
    63  			expectedK8sErr:    "incorrect cluster client type: got docker, expected kubernetes",
    64  			expectedDockerErr: "some docker error",
    65  		},
    66  	}
    67  
    68  	for i := range tcs {
    69  		t.Run(strconv.Itoa(i), func(t *testing.T) {
    70  			cm := NewConnectionManager()
    71  			nn := types.NamespacedName{Namespace: "foo", Name: "bar"}
    72  			if tcs[i].input != nil {
    73  				cm.store(nn, *tcs[i].input)
    74  			}
    75  
    76  			kCli, createdAt, err := cm.GetK8sClient(nn)
    77  			if tcs[i].expectedK8sErr != "" {
    78  				if assert.EqualError(t, err, tcs[i].expectedK8sErr) {
    79  					assert.Nil(t, kCli, "K8sClient should be nil on error")
    80  				}
    81  			} else {
    82  				if assert.NoError(t, err, "Unexpected error getting K8sClient") {
    83  					assert.NotNil(t, kCli, "K8sClient should not be nil")
    84  					timecmp.AssertTimeEqual(t, tcs[i].input.createdAt, createdAt)
    85  				}
    86  			}
    87  
    88  			dCli, err := cm.GetComposeDockerClient(nn)
    89  			if tcs[i].expectedDockerErr != "" {
    90  				if assert.EqualError(t, err, tcs[i].expectedDockerErr) {
    91  					assert.Nil(t, dCli, "DockerClient should be nil on error")
    92  				}
    93  			} else {
    94  				if assert.NoError(t, err, "Unexpected error getting DockerClient") {
    95  					assert.NotNil(t, dCli, "DockerClient should not be nil when no error")
    96  				}
    97  			}
    98  		})
    99  	}
   100  }