mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
213 lines
6.1 KiB
Go
213 lines
6.1 KiB
Go
// Copyright (c) 2021 Gitpod GmbH. All rights reserved.
|
|
// Licensed under the GNU Affero General Public License (AGPL).
|
|
// See License.AGPL.txt in the project root for license information.
|
|
|
|
package wsmanager
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/google/go-cmp/cmp"
|
|
"github.com/stretchr/testify/require"
|
|
corev1 "k8s.io/api/core/v1"
|
|
"k8s.io/utils/pointer"
|
|
|
|
"github.com/gitpod-io/gitpod/installer/pkg/common"
|
|
config "github.com/gitpod-io/gitpod/installer/pkg/config/v1"
|
|
"github.com/gitpod-io/gitpod/installer/pkg/config/versions"
|
|
wsmancfg "github.com/gitpod-io/gitpod/ws-manager/api/config"
|
|
)
|
|
|
|
func TestBuildWorkspaceTemplates(t *testing.T) {
|
|
type Expectation struct {
|
|
TplConfig wsmancfg.WorkspacePodTemplateConfiguration
|
|
Data map[string]bool
|
|
}
|
|
tests := []struct {
|
|
Name string
|
|
ClassName string
|
|
Config *config.WorkspaceTemplates
|
|
ContainerRegistry *config.ContainerRegistry
|
|
Expectation Expectation
|
|
}{
|
|
{
|
|
Name: "no templates",
|
|
ClassName: "",
|
|
Expectation: Expectation{},
|
|
},
|
|
{
|
|
Name: "empty templates",
|
|
ClassName: "",
|
|
Config: &config.WorkspaceTemplates{},
|
|
Expectation: Expectation{},
|
|
},
|
|
{
|
|
Name: "default tpl",
|
|
ClassName: "",
|
|
Config: &config.WorkspaceTemplates{
|
|
Default: &corev1.Pod{},
|
|
},
|
|
Expectation: Expectation{
|
|
TplConfig: wsmancfg.WorkspacePodTemplateConfiguration{DefaultPath: "/workspace-templates/default.yaml"},
|
|
Data: map[string]bool{"default.yaml": true},
|
|
},
|
|
},
|
|
{
|
|
Name: "regular tpl",
|
|
ClassName: "",
|
|
Config: &config.WorkspaceTemplates{
|
|
Regular: &corev1.Pod{},
|
|
},
|
|
Expectation: Expectation{
|
|
TplConfig: wsmancfg.WorkspacePodTemplateConfiguration{
|
|
RegularPath: "/workspace-templates/regular.yaml",
|
|
},
|
|
Data: map[string]bool{
|
|
"regular.yaml": true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "prebuild tpl",
|
|
ClassName: "",
|
|
Config: &config.WorkspaceTemplates{
|
|
Prebuild: &corev1.Pod{},
|
|
},
|
|
Expectation: Expectation{
|
|
TplConfig: wsmancfg.WorkspacePodTemplateConfiguration{
|
|
PrebuildPath: "/workspace-templates/prebuild.yaml",
|
|
},
|
|
Data: map[string]bool{
|
|
"prebuild.yaml": true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "imgbuild tpl",
|
|
ClassName: "",
|
|
Config: &config.WorkspaceTemplates{
|
|
ImageBuild: &corev1.Pod{},
|
|
},
|
|
Expectation: Expectation{
|
|
TplConfig: wsmancfg.WorkspacePodTemplateConfiguration{
|
|
ImagebuildPath: "/workspace-templates/imagebuild.yaml",
|
|
},
|
|
Data: map[string]bool{
|
|
"imagebuild.yaml": true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Name: "regular class tpl",
|
|
ClassName: "awesome-class",
|
|
Config: &config.WorkspaceTemplates{
|
|
Regular: &corev1.Pod{},
|
|
},
|
|
Expectation: Expectation{
|
|
TplConfig: wsmancfg.WorkspacePodTemplateConfiguration{
|
|
RegularPath: "/workspace-templates/awesome-class-regular.yaml",
|
|
},
|
|
Data: map[string]bool{
|
|
"awesome-class-regular.yaml": true,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Name, func(t *testing.T) {
|
|
var (
|
|
act Expectation
|
|
tpls map[string]string
|
|
err error
|
|
)
|
|
|
|
if test.ContainerRegistry == nil {
|
|
test.ContainerRegistry = &config.ContainerRegistry{InCluster: pointer.Bool(true)}
|
|
}
|
|
|
|
act.TplConfig, tpls, err = buildWorkspaceTemplates(&common.RenderContext{Config: config.Config{
|
|
ContainerRegistry: *test.ContainerRegistry,
|
|
}}, test.Config, test.ClassName)
|
|
if err != nil {
|
|
t.Error(err)
|
|
}
|
|
|
|
if len(tpls) > 0 {
|
|
dt := make(map[string]bool)
|
|
for k := range tpls {
|
|
dt[k] = true
|
|
}
|
|
act.Data = dt
|
|
}
|
|
|
|
if diff := cmp.Diff(test.Expectation, act); diff != "" {
|
|
t.Errorf("Expectation mismatch (-want +got):\n%s", diff)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestWorkspaceURLTemplates(t *testing.T) {
|
|
tests := []struct {
|
|
Name string
|
|
Domain string
|
|
InstallationShortname string
|
|
ExpectedWorkspaceUrlTemplate string
|
|
ExpectedWorkspacePortURLTemplate string
|
|
}{
|
|
{
|
|
Name: "With an installation shortname",
|
|
Domain: "example.com",
|
|
InstallationShortname: "eu02",
|
|
ExpectedWorkspaceUrlTemplate: "https://{{ .Prefix }}.ws-eu02.example.com",
|
|
ExpectedWorkspacePortURLTemplate: "https://{{ .WorkspacePort }}-{{ .Prefix }}.ws-eu02.example.com",
|
|
},
|
|
{
|
|
Name: "Without an installation shortname",
|
|
Domain: "example.com",
|
|
InstallationShortname: "",
|
|
ExpectedWorkspaceUrlTemplate: "https://{{ .Prefix }}.ws.example.com",
|
|
ExpectedWorkspacePortURLTemplate: "https://{{ .WorkspacePort }}-{{ .Prefix }}.ws.example.com",
|
|
},
|
|
{
|
|
Name: "With old default installation shortname for existing self-hosted installations",
|
|
Domain: "example.com",
|
|
InstallationShortname: config.InstallationShortNameOldDefault,
|
|
ExpectedWorkspaceUrlTemplate: "https://{{ .Prefix }}.ws.example.com",
|
|
ExpectedWorkspacePortURLTemplate: "https://{{ .WorkspacePort }}-{{ .Prefix }}.ws.example.com",
|
|
},
|
|
}
|
|
|
|
for _, test := range tests {
|
|
t.Run(test.Name, func(t *testing.T) {
|
|
ctx, err := common.NewRenderContext(config.Config{
|
|
Domain: test.Domain,
|
|
Metadata: config.Metadata{
|
|
InstallationShortname: test.InstallationShortname,
|
|
},
|
|
ObjectStorage: config.ObjectStorage{
|
|
InCluster: pointer.Bool(true),
|
|
},
|
|
}, versions.Manifest{}, "test_namespace")
|
|
require.NoError(t, err)
|
|
|
|
objs, err := configmap(ctx)
|
|
require.NoError(t, err)
|
|
|
|
cfgmap, ok := objs[0].(*corev1.ConfigMap)
|
|
require.Truef(t, ok, "configmap function did not return a configmap")
|
|
|
|
configJson, ok := cfgmap.Data["config.json"]
|
|
require.Truef(t, ok, "configmap data did not contain %q key", "config.json")
|
|
|
|
serviceConfig := wsmancfg.ServiceConfiguration{}
|
|
json.Unmarshal([]byte(configJson), &serviceConfig)
|
|
|
|
require.Equal(t, test.ExpectedWorkspaceUrlTemplate, serviceConfig.Manager.WorkspaceURLTemplate)
|
|
require.Equal(t, test.ExpectedWorkspacePortURLTemplate, serviceConfig.Manager.WorkspacePortURLTemplate)
|
|
})
|
|
}
|
|
}
|