mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-22 09:51:01 +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"
|
||||
|
||||
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_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'"},
|
||||
}))
|
||||
}
|
||||
|
||||
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