2022-05-10 16:43:25 +05:30

84 lines
2.6 KiB
Go

// Copyright (c) 2020 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 config
import (
"testing"
"time"
"github.com/gitpod-io/gitpod/common-go/util"
)
func BenchmarkRenderWorkspacePortURL(b *testing.B) {
b.ReportAllocs()
for n := 0; n < b.N; n++ {
RenderWorkspaceURL("{{.Port}}-{{.Prefix}}.{{.Host}}", "foo", "bar", "gitpod.io")
}
}
func TestValidate(t *testing.T) {
fromValidConfig := func(mod func(*Configuration)) *Configuration {
res := &Configuration{
Timeouts: WorkspaceTimeoutConfiguration{
TotalStartup: util.Duration(10 * time.Second),
Initialization: util.Duration(10 * time.Second),
RegularWorkspace: util.Duration(10 * time.Second),
MaxLifetime: util.Duration(10 * time.Second),
HeadlessWorkspace: util.Duration(10 * time.Second),
AfterClose: util.Duration(10 * time.Second),
ContentFinalization: util.Duration(10 * time.Second),
Stopping: util.Duration(10 * time.Second),
Interrupted: util.Duration(10 * time.Second),
},
WorkspaceClasses: map[string]*WorkspaceClass{
DefaultWorkspaceClass: {},
},
HeartbeatInterval: util.Duration(10 * time.Second),
GitpodHostURL: "https://gitpod.io",
ReconnectionInterval: util.Duration(10 * time.Second),
WorkspaceURLTemplate: "https://gitpod.io/foobar",
WorkspaceHostPath: "/mnt/data",
}
mod(res)
return res
}
tests := []struct {
Name string
Expectation string
Cfg *Configuration
}{
{
Name: "missing default class",
Cfg: fromValidConfig(func(c *Configuration) {
delete(c.WorkspaceClasses, DefaultWorkspaceClass)
}),
Expectation: `missing "default" workspace class`,
},
{
Name: "invalid workspace class name",
Cfg: fromValidConfig(func(c *Configuration) {
c.WorkspaceClasses["not/a/valid/name"] = &WorkspaceClass{}
}),
Expectation: `workspace class name "not/a/valid/name" is invalid: [a valid label must be an empty string or consist of alphanumeric characters, '-', '_' or '.', and must start and end with an alphanumeric character (e.g. 'MyValue', or 'my_value', or '12345', regex used for validation is '(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])?')]`,
},
}
for _, test := range tests {
t.Run(test.Name, func(t *testing.T) {
err := test.Cfg.Validate()
var errMsg string
if err != nil {
errMsg = err.Error()
}
if errMsg != test.Expectation {
t.Errorf("unexpected validation result: expect \"%s\", got \"%s\"", test.Expectation, errMsg)
}
})
}
}