gitpod/components/supervisor/pkg/ports/ports-config_test.go
mustard f4ea3a56a1 Revert "Revert "[supervisor] use public api in supervisor""
This reverts commit 44dfc5e19be3b89d96ab25f2f83476d57aa7b8ef.
2022-12-12 09:05:22 -03:00

139 lines
3.3 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 ports
import (
"context"
"testing"
"github.com/golang/mock/gomock"
"github.com/google/go-cmp/cmp"
gitpod "github.com/gitpod-io/gitpod/gitpod-protocol"
)
func TestPortsConfig(t *testing.T) {
tests := []struct {
Desc string
GitpodConfig *gitpod.GitpodConfig
Expectation *PortConfigTestExpectations
}{
{
Desc: "no configs",
Expectation: &PortConfigTestExpectations{},
},
{
Desc: "instance port config",
GitpodConfig: &gitpod.GitpodConfig{
Ports: []*gitpod.PortsItems{
{
Port: 9229,
OnOpen: "ignore",
Visibility: "public",
Name: "Nice Port Name",
Description: "Nice Port Description",
},
},
},
Expectation: &PortConfigTestExpectations{
InstancePortConfigs: []*gitpod.PortConfig{
{
Port: 9229,
OnOpen: "ignore",
Visibility: "public",
Name: "Nice Port Name",
Description: "Nice Port Description",
},
},
},
},
{
Desc: "instance range config",
GitpodConfig: &gitpod.GitpodConfig{
Ports: []*gitpod.PortsItems{
{
Port: "9229-9339",
OnOpen: "ignore",
Visibility: "public",
Name: "Nice Port Name",
Description: "Nice Port Description",
},
},
},
Expectation: &PortConfigTestExpectations{
InstanceRangeConfigs: []*RangeConfig{
{
PortsItems: gitpod.PortsItems{
Port: "9229-9339",
OnOpen: "ignore",
Visibility: "public",
Description: "Nice Port Description",
Name: "Nice Port Name",
},
Start: 9229,
End: 9339,
},
},
},
},
}
for _, test := range tests {
t.Run(test.Desc, func(t *testing.T) {
configService := &testGitpodConfigService{
configs: make(chan *gitpod.GitpodConfig),
}
defer close(configService.configs)
context, cancel := context.WithCancel(context.Background())
defer cancel()
workspaceID := "test"
ctrl := gomock.NewController(t)
defer ctrl.Finish()
service := NewConfigService(workspaceID, configService)
updates, errors := service.Observe(context)
actual := &PortConfigTestExpectations{}
if test.GitpodConfig != nil {
go func() {
configService.configs <- test.GitpodConfig
}()
select {
case err := <-errors:
t.Fatal(err)
case change := <-updates:
actual.InstanceRangeConfigs = change.instanceRangeConfigs
for _, config := range change.instancePortConfigs {
actual.InstancePortConfigs = append(actual.InstancePortConfigs, &config.PortConfig)
}
}
}
if diff := cmp.Diff(test.Expectation, actual); diff != "" {
t.Errorf("unexpected output (-want +got):\n%s", diff)
}
})
}
}
type PortConfigTestExpectations struct {
InstancePortConfigs []*gitpod.PortConfig
InstanceRangeConfigs []*RangeConfig
}
type testGitpodConfigService struct {
configs chan *gitpod.GitpodConfig
}
func (service *testGitpodConfigService) Watch(ctx context.Context) {
}
func (service *testGitpodConfigService) Observe(ctx context.Context) <-chan *gitpod.GitpodConfig {
return service.configs
}