mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-26 11:51:02 +00:00
Add TestCompilerCompile (#2183)
just add tests about compile frontend config into backend config
This commit is contained in:
parent
6e0def58a1
commit
eb8fb407f9
1 changed files with 170 additions and 0 deletions
|
@ -5,6 +5,8 @@ import (
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
|
backend_types "github.com/woodpecker-ci/woodpecker/pipeline/backend/types"
|
||||||
|
"github.com/woodpecker-ci/woodpecker/pipeline/frontend/metadata"
|
||||||
yaml_types "github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml/types"
|
yaml_types "github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml/types"
|
||||||
yaml_base_types "github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml/types/base"
|
yaml_base_types "github.com/woodpecker-ci/woodpecker/pipeline/frontend/yaml/types/base"
|
||||||
)
|
)
|
||||||
|
@ -40,3 +42,171 @@ func TestSecretAvailable(t *testing.T) {
|
||||||
Commands: yaml_base_types.StringOrSlice{"echo 'this is not a plugin'"},
|
Commands: yaml_base_types.StringOrSlice{"echo 'this is not a plugin'"},
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestCompilerCompile(t *testing.T) {
|
||||||
|
compiler := New(
|
||||||
|
WithMetadata(metadata.Metadata{
|
||||||
|
Repo: metadata.Repo{
|
||||||
|
Owner: "octacat",
|
||||||
|
Name: "hello-world",
|
||||||
|
Private: true,
|
||||||
|
Link: "https://github.com/octocat/hello-world",
|
||||||
|
CloneURL: "https://github.com/octocat/hello-world.git",
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
WithEnviron(map[string]string{
|
||||||
|
"VERBOSE": "true",
|
||||||
|
"COLORED": "true",
|
||||||
|
}),
|
||||||
|
WithPrefix("test"),
|
||||||
|
)
|
||||||
|
|
||||||
|
defaultNetworks := []*backend_types.Network{{
|
||||||
|
Name: "test_default",
|
||||||
|
}}
|
||||||
|
defaultVolumes := []*backend_types.Volume{{
|
||||||
|
Name: "test_default",
|
||||||
|
}}
|
||||||
|
|
||||||
|
defaultCloneStage := &backend_types.Stage{
|
||||||
|
Name: "test_clone",
|
||||||
|
Alias: "clone",
|
||||||
|
Steps: []*backend_types.Step{{
|
||||||
|
Name: "test_clone",
|
||||||
|
Alias: "clone",
|
||||||
|
Type: backend_types.StepTypeClone,
|
||||||
|
Image: "docker.io/woodpeckerci/plugin-git:2.1.0",
|
||||||
|
OnSuccess: true,
|
||||||
|
Failure: "fail",
|
||||||
|
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||||
|
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"clone"}}},
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
fronConf *yaml_types.Workflow
|
||||||
|
backConf *backend_types.Config
|
||||||
|
expErr bool
|
||||||
|
}{{
|
||||||
|
name: "empty workflow, no clone",
|
||||||
|
fronConf: &yaml_types.Workflow{SkipClone: true},
|
||||||
|
backConf: &backend_types.Config{
|
||||||
|
Networks: defaultNetworks,
|
||||||
|
Volumes: defaultVolumes,
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
name: "empty workflow, default clone",
|
||||||
|
fronConf: &yaml_types.Workflow{},
|
||||||
|
backConf: &backend_types.Config{
|
||||||
|
Networks: defaultNetworks,
|
||||||
|
Volumes: defaultVolumes,
|
||||||
|
Stages: []*backend_types.Stage{defaultCloneStage},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
name: "workflow with one dummy step",
|
||||||
|
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||||
|
Name: "dummy",
|
||||||
|
Image: "dummy_img",
|
||||||
|
}}}},
|
||||||
|
backConf: &backend_types.Config{
|
||||||
|
Networks: defaultNetworks,
|
||||||
|
Volumes: defaultVolumes,
|
||||||
|
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||||
|
Name: "test_stage_0",
|
||||||
|
Alias: "dummy",
|
||||||
|
Steps: []*backend_types.Step{{
|
||||||
|
Name: "test_step_0",
|
||||||
|
Alias: "dummy",
|
||||||
|
Type: backend_types.StepTypePlugin,
|
||||||
|
Image: "dummy_img",
|
||||||
|
OnSuccess: true,
|
||||||
|
Failure: "fail",
|
||||||
|
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||||
|
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"dummy"}}},
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}, {
|
||||||
|
name: "workflow with three steps and one group",
|
||||||
|
fronConf: &yaml_types.Workflow{Steps: yaml_types.ContainerList{ContainerList: []*yaml_types.Container{{
|
||||||
|
Name: "echo env",
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"env"},
|
||||||
|
}, {
|
||||||
|
Name: "parallel echo 1",
|
||||||
|
Group: "parallel",
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"echo 1"},
|
||||||
|
}, {
|
||||||
|
Name: "parallel echo 2",
|
||||||
|
Group: "parallel",
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"echo 2"},
|
||||||
|
}}}},
|
||||||
|
backConf: &backend_types.Config{
|
||||||
|
Networks: defaultNetworks,
|
||||||
|
Volumes: defaultVolumes,
|
||||||
|
Stages: []*backend_types.Stage{defaultCloneStage, {
|
||||||
|
Name: "test_stage_0",
|
||||||
|
Alias: "echo env",
|
||||||
|
Steps: []*backend_types.Step{{
|
||||||
|
Name: "test_step_0",
|
||||||
|
Alias: "echo env",
|
||||||
|
Type: backend_types.StepTypeCommands,
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"env"},
|
||||||
|
OnSuccess: true,
|
||||||
|
Failure: "fail",
|
||||||
|
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||||
|
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"echo env"}}},
|
||||||
|
}},
|
||||||
|
}, {
|
||||||
|
Name: "test_stage_1",
|
||||||
|
Alias: "parallel echo 1",
|
||||||
|
Steps: []*backend_types.Step{{
|
||||||
|
Name: "test_step_1",
|
||||||
|
Alias: "parallel echo 1",
|
||||||
|
Type: backend_types.StepTypeCommands,
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"echo 1"},
|
||||||
|
OnSuccess: true,
|
||||||
|
Failure: "fail",
|
||||||
|
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||||
|
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 1"}}},
|
||||||
|
}, {
|
||||||
|
Name: "test_step_2",
|
||||||
|
Alias: "parallel echo 2",
|
||||||
|
Type: backend_types.StepTypeCommands,
|
||||||
|
Image: "bash",
|
||||||
|
Commands: []string{"echo 2"},
|
||||||
|
OnSuccess: true,
|
||||||
|
Failure: "fail",
|
||||||
|
Volumes: []string{defaultVolumes[0].Name + ":"},
|
||||||
|
Networks: []backend_types.Conn{{Name: "test_default", Aliases: []string{"parallel echo 2"}}},
|
||||||
|
}},
|
||||||
|
}},
|
||||||
|
},
|
||||||
|
}}
|
||||||
|
|
||||||
|
for _, test := range tests {
|
||||||
|
t.Run(test.name, func(t *testing.T) {
|
||||||
|
backConf, err := compiler.Compile(test.fronConf)
|
||||||
|
if test.expErr {
|
||||||
|
assert.Error(t, err)
|
||||||
|
} else {
|
||||||
|
// we ignore uuids in steps and only check if global env got set ...
|
||||||
|
for _, st := range backConf.Stages {
|
||||||
|
for _, s := range st.Steps {
|
||||||
|
s.UUID = ""
|
||||||
|
assert.Truef(t, s.Environment["VERBOSE"] == "true", "expect to get value of global set environment")
|
||||||
|
assert.Truef(t, len(s.Environment) > 50, "expect to have a lot of build in variables")
|
||||||
|
s.Environment = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// check if we get an expected backend config based on a frontend config
|
||||||
|
assert.EqualValues(t, *test.backConf, *backConf)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue