mirror of
https://github.com/gitpod-io/gitpod.git
synced 2025-12-08 17:36:30 +00:00
84 lines
2.6 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|