Skip to content

Commit

Permalink
backend: headlamp_test: Add test for handleHeadlampinfo
Browse files Browse the repository at this point in the history
Signed-off-by: Vincent T <[email protected]>
  • Loading branch information
vyncent-t committed Jan 22, 2025
1 parent 0dad606 commit 8724036
Show file tree
Hide file tree
Showing 3 changed files with 173 additions and 0 deletions.
58 changes: 58 additions & 0 deletions backend/cmd/headlamp_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import (
"github.com/headlamp-k8s/headlamp/backend/pkg/kubeconfig"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/clientcmd/api"
)

Expand Down Expand Up @@ -604,6 +605,8 @@ func TestHandleClusterAPI_XForwardedHost(t *testing.T) {
assert.Equal(t, "OK", rr.Body.String())
}

// test for keeping the original name of a cluster

func TestRenameCluster(t *testing.T) {
kubeConfigByte, err := os.ReadFile("./headlamp_testdata/kubeconfig")
require.NoError(t, err)
Expand Down Expand Up @@ -1025,3 +1028,58 @@ func TestHandleClusterHelm(t *testing.T) {
})
}
}

// test for handleHeadlampInfo, currently checks for headlamp_info field and headlamp_info.originalName field.
func (c *HeadlampConfig) TestHandleHeadlampInfo(t *testing.T) {
// create a temp directory for our test kubeconfig
tmpDir := t.TempDir()
mockConfigFile := filepath.Join(tmpDir, "config")

// copy "kubeconfig_headlampinfo" test data to the temp directory
testDataPath := filepath.Join("headlamp_testdata", "kubeconfig_headlampinfo")
testData, err := os.ReadFile(testDataPath)
require.NoError(t, err, "failed to read test data for 'kubeconfig_headlampinfo'")

err = os.WriteFile(mockConfigFile, testData, 0o600)
require.NoError(t, err, "failed to write test kubeconfig")

// load the kubeconfig file
config, err := clientcmd.LoadFromFile(mockConfigFile)
require.NoError(t, err, "failed to load kubeconfig")

// create a slice to hold the kubeconfig.Context objects
kubeContexts := make([]*kubeconfig.Context, 0, len(config.Contexts))

// loop through each context and push the kubeContext object into the slice
for contextName, context := range config.Contexts {
kubeContext := &kubeconfig.Context{
Name: contextName,
KubeContext: context,
Cluster: config.Clusters[context.Cluster],
AuthInfo: config.AuthInfos[context.AuthInfo],
}
kubeContexts = append(kubeContexts, kubeContext)
}

// use the kubeContexts slice for further processing
for _, ctx := range kubeContexts {
// Call handleHeadlampInfo
err = c.handleHeadlampInfo(ctx)
require.NoError(t, err, "failed to handle headlamp_info")
}

// check that the headlamp_info field was correctly handled for each context
for _, ctx := range kubeContexts {
// Check if the headlamp_info field was correctly handled
assert.NotNil(t, ctx.Extensions["headlamp_info"], "headlamp_info field should be present")
}

// check that the headlamp_info.originalName field was correctly handled for each context
for _, ctx := range kubeContexts {
if headlampInfo, ok := ctx.Extensions["headlamp_info"].(map[string]interface{}); ok {
assert.NotNil(t, headlampInfo["originalName"], "headlamp_info.originalName field should be present")
} else {
t.Errorf("headlamp_info field is not of expected type")
}
}
}
114 changes: 114 additions & 0 deletions backend/cmd/headlamp_testdata/kubeconfig_headlampinfo.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
apiVersion: v1
clusters:
- cluster:
certificate-authority-data: PLACEHOLDER_CERTIFICATE_AUTHORITY_DATA_X
extensions:
- extension:
last-update: Mon, 26 Dec 2022 20:33:03 IST
provider: testkubex.sigs.k8s.io
version: v1.28.0
name: cluster_info
server: PLACEHOLDER_SERVER_URL_X
name: testkubex
- cluster:
certificate-authority-data: PLACEHOLDER_CERTIFICATE_AUTHORITY_DATA_Y
extensions:
- extension:
last-update: Tue, 27 Dec 2022 20:33:03 IST
provider: testkubey.sigs.k8s.io
version: v1.28.0
name: cluster_info
server: PLACEHOLDER_SERVER_URL_Y
name: testkubey
- cluster:
certificate-authority-data: PLACEHOLDER_CERTIFICATE_AUTHORITY_DATA_Z
extensions:
- extension:
last-update: Wed, 28 Dec 2022 20:33:03 IST
provider: testkubez.sigs.k8s.io
version: v1.28.0
name: cluster_info
server: PLACEHOLDER_SERVER_URL_Z
name: testkubez
contexts:
- context:
cluster: testkubex
extensions:
- extension:
last-update: Mon, 26 Dec 2022 20:33:03 IST
provider: testkubex.sigs.k8s.io
version: v1.28.0
name: context_info
- extension:
creationTimestamp: null
customName: testkubexworks
name: headlamp_info
namespace: default
user: testkubex
name: testkubex
- context:
cluster: testkubey
extensions:
- extension:
last-update: Tue, 27 Dec 2022 20:33:03 IST
provider: testkubey.sigs.k8s.io
version: v1.28.0
name: context_info
- extension:
creationTimestamp: null
customName: testkubeyworks
name: headlamp_info
namespace: default
user: testkubey
name: testkubey
- context:
cluster: testkubez
extensions:
- extension:
last-update: Wed, 28 Dec 2022 20:33:03 IST
provider: testkubez.sigs.k8s.io
version: v1.28.0
name: context_info
namespace: default
user: testkubez
name: testkubez
current-context: testkubex
kind: Config
preferences: {}
users:
- name: testkubex
user:
client-certificate-data: PLACEHOLDER_CLIENT_CERTIFICATE_DATA_X
client-key-data: PLACEHOLDER_CLIENT_KEY_DATA_X
auth-provider:
config:
client-id: PLACEHOLDER_CLIENT_ID_X
client-secret: PLACEHOLDER_CLIENT_SECRET_X
idp-issuer-url: PLACEHOLDER_IDP_ISSUER_URL_X
refresh-token: PLACEHOLDER_REFRESH_TOKEN_X
id-token: PLACEHOLDER_ID_TOKEN_X
expiry: PLACEHOLDER_EXPIRY_X
- name: testkubey
user:
client-certificate-data: PLACEHOLDER_CLIENT_CERTIFICATE_DATA_Y
client-key-data: PLACEHOLDER_CLIENT_KEY_DATA_Y
auth-provider:
config:
client-id: PLACEHOLDER_CLIENT_ID_Y
client-secret: PLACEHOLDER_CLIENT_SECRET_Y
idp-issuer-url: PLACEHOLDER_IDP_ISSUER_URL_Y
refresh-token: PLACEHOLDER_REFRESH_TOKEN_Y
id-token: PLACEHOLDER_ID_TOKEN_Y
expiry: PLACEHOLDER_EXPIRY_Y
- name: testkubez
user:
client-certificate-data: PLACEHOLDER_CLIENT_CERTIFICATE_DATA_Z
client-key-data: PLACEHOLDER_CLIENT_KEY_DATA_Z
auth-provider:
config:
client-id: PLACEHOLDER_CLIENT_ID_Z
client-secret: PLACEHOLDER_CLIENT_SECRET_Z
idp-issuer-url: PLACEHOLDER_IDP_ISSUER_URL_Z
refresh-token: PLACEHOLDER_REFRESH_TOKEN_Z
id-token: PLACEHOLDER_ID_TOKEN_Z
expiry: PLACEHOLDER_EXPIRY_Z
1 change: 1 addition & 0 deletions backend/pkg/kubeconfig/kubeconfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ type Context struct {
proxy *httputil.ReverseProxy `json:"-"`
Internal bool `json:"internal"`
Error string `json:"error"`
Extensions map[string]interface{} `json:"extensions"`
}

type OidcConfig struct {
Expand Down

0 comments on commit 8724036

Please sign in to comment.