portainer/pkg/libstack/compose/composeplugin_windows_test.go

110 lines
2.8 KiB
Go

package compose
import (
"context"
"errors"
"os"
"testing"
"github.com/compose-spec/compose-go/v2/types"
"github.com/google/go-cmp/cmp"
"github.com/portainer/portainer/pkg/libstack"
)
func Test_createProject_win(t *testing.T) {
ctx := context.Background()
dir := t.TempDir()
projectName := "create-project-test"
defer func() {
err := os.RemoveAll(dir)
if err != nil {
t.Fatalf("Failed to remove temp dir: %v", err)
}
}()
testcases := []struct {
name string
createFilesFn func() []string
configFilepaths []string
options libstack.Options
expectedProject *types.Project
}{
{
name: "Convert windows paths",
createFilesFn: func() []string {
var filepaths []string
filepaths = append(filepaths, createFile(t, dir, "docker-compose.yml", `services:
nginx:
container_name: nginx
image: nginx:latest
volumes:
- "C:\\Users\\Joey\\Desktop\\backend:/var/www/html"`))
return filepaths
},
configFilepaths: []string{dir + "/docker-compose.yml"},
options: libstack.Options{
WorkingDir: dir,
ProjectName: projectName,
Env: []string{"COMPOSE_CONVERT_WINDOWS_PATHS=true"},
},
expectedProject: &types.Project{
Name: projectName,
WorkingDir: dir,
Services: types.Services{
"nginx": {
Name: "nginx",
ContainerName: "nginx",
Environment: types.MappingWithEquals{},
Image: "nginx:latest",
Networks: map[string]*types.ServiceNetworkConfig{"default": nil},
Volumes: []types.ServiceVolumeConfig{
{
Type: "bind",
Source: "/c/Users/Joey/Desktop/backend",
Target: "/var/www/html",
ReadOnly: false,
Bind: &types.ServiceVolumeBind{CreateHostPath: true},
},
},
},
},
Networks: types.Networks{"default": {Name: "create-project-test_default"}},
ComposeFiles: []string{
dir + "/docker-compose.yml",
},
Environment: types.Mapping{"COMPOSE_PROJECT_NAME": "create-project-test", "COMPOSE_CONVERT_WINDOWS_PATHS": "true"},
DisabledServices: types.Services{},
Profiles: []string{""},
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
createdFiles := tc.createFilesFn()
defer func() {
var errs []error
for _, f := range createdFiles {
errs = append(errs, os.Remove(f))
}
err := errors.Join(errs...)
if err != nil {
t.Fatalf("Failed to remove config files: %v", err)
}
}()
gotProject, err := createProject(ctx, tc.configFilepaths, tc.options)
if err != nil {
t.Fatalf("Failed to create new project: %v", err)
}
if diff := cmp.Diff(gotProject, tc.expectedProject); diff != "" {
t.Fatalf("Projects are different:\n%s", diff)
}
})
}
}