mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-04-15 01:41:56 +00:00
153 lines
3.9 KiB
Go
153 lines
3.9 KiB
Go
package pipeline
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/mock"
|
|
|
|
backend_types "go.woodpecker-ci.org/woodpecker/v3/pipeline/backend/types"
|
|
"go.woodpecker-ci.org/woodpecker/v3/server"
|
|
forge_mocks "go.woodpecker-ci.org/woodpecker/v3/server/forge/mocks"
|
|
forge_types "go.woodpecker-ci.org/woodpecker/v3/server/forge/types"
|
|
"go.woodpecker-ci.org/woodpecker/v3/server/model"
|
|
shared_pipeline "go.woodpecker-ci.org/woodpecker/v3/server/pipeline/stepbuilder"
|
|
manager_mocks "go.woodpecker-ci.org/woodpecker/v3/server/services/mocks"
|
|
registry_service_mocks "go.woodpecker-ci.org/woodpecker/v3/server/services/registry/mocks"
|
|
secret_service_mocks "go.woodpecker-ci.org/woodpecker/v3/server/services/secret/mocks"
|
|
store_mocks "go.woodpecker-ci.org/woodpecker/v3/server/store/mocks"
|
|
)
|
|
|
|
func TestSetPipelineStepsOnPipeline(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
pipeline := &model.Pipeline{
|
|
ID: 1,
|
|
Event: model.EventPush,
|
|
}
|
|
|
|
pipelineItems := []*shared_pipeline.Item{{
|
|
Workflow: &model.Workflow{
|
|
PID: 1,
|
|
},
|
|
Config: &backend_types.Config{
|
|
Stages: []*backend_types.Stage{
|
|
{
|
|
Steps: []*backend_types.Step{
|
|
{
|
|
Name: "clone",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
Steps: []*backend_types.Step{
|
|
{
|
|
Name: "step",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}}
|
|
pipeline = setPipelineStepsOnPipeline(pipeline, pipelineItems)
|
|
if len(pipeline.Workflows) != 1 {
|
|
t.Fatal("Should generate three in total")
|
|
}
|
|
if pipeline.Workflows[0].PipelineID != 1 {
|
|
t.Fatal("Should set workflow's pipeline ID")
|
|
}
|
|
if pipeline.Workflows[0].Children[0].PPID != 1 {
|
|
t.Fatal("Should set step PPID")
|
|
}
|
|
}
|
|
|
|
func TestParsePipeline(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
pipeline := &model.Pipeline{
|
|
ID: 1,
|
|
Event: model.EventPush,
|
|
AdditionalVariables: map[string]string{
|
|
"ADDITIONAL": "value",
|
|
},
|
|
}
|
|
|
|
user := &model.User{
|
|
ID: 1,
|
|
}
|
|
|
|
repo := &model.Repo{
|
|
ID: 1,
|
|
}
|
|
|
|
yamls := []*forge_types.FileMeta{
|
|
{
|
|
Name: "woodpecker.yml",
|
|
Data: []byte(`
|
|
when:
|
|
- event: push
|
|
|
|
steps:
|
|
- name: test
|
|
image: alpine
|
|
environment:
|
|
HELLO:
|
|
from_secret: hello
|
|
commands:
|
|
- echo "hello world"
|
|
`),
|
|
},
|
|
}
|
|
|
|
envs := map[string]string{
|
|
"FOO": "bar",
|
|
}
|
|
|
|
forge := forge_mocks.NewMockForge(t)
|
|
forge.On("Netrc", mock.Anything, mock.Anything).Return(&model.Netrc{
|
|
Login: "user",
|
|
Password: "password",
|
|
}, nil)
|
|
forge.On("Name").Return("github")
|
|
forge.On("URL").Return("https://github.com")
|
|
|
|
store := store_mocks.NewMockStore(t)
|
|
store.On("GetPipelineLastBefore", mock.Anything, mock.Anything, pipeline.ID).Return(&model.Pipeline{}, nil)
|
|
|
|
mockManager := manager_mocks.NewMockManager(t)
|
|
server.Config.Services.Manager = mockManager
|
|
|
|
secretService := secret_service_mocks.NewMockService(t)
|
|
secretService.On("SecretListPipeline", mock.Anything, mock.Anything).Return([]*model.Secret{
|
|
{
|
|
Name: "hello",
|
|
Value: "secret world",
|
|
},
|
|
}, nil)
|
|
mockManager.On("SecretServiceFromRepo", mock.Anything).Return(secretService, nil)
|
|
|
|
registryService := registry_service_mocks.NewMockService(t)
|
|
registryService.On("RegistryListPipeline", mock.Anything, mock.Anything).Return([]*model.Registry{
|
|
{
|
|
Address: "docker.io",
|
|
Username: "user",
|
|
Password: "password",
|
|
},
|
|
}, nil)
|
|
mockManager.On("RegistryServiceFromRepo", mock.Anything).Return(registryService, nil)
|
|
|
|
mockManager.On("EnvironmentService").Return(nil, nil)
|
|
|
|
pipelineItems, err := parsePipeline(forge, store, pipeline, user, repo, yamls, envs)
|
|
assert.NoError(t, err)
|
|
|
|
assert.Len(t, pipelineItems, 1)
|
|
assert.Equal(t, "test", pipelineItems[0].Config.Stages[0].Steps[0].Name)
|
|
assert.Equal(t, "alpine", pipelineItems[0].Config.Stages[0].Steps[0].Image)
|
|
step := pipelineItems[0].Config.Stages[0].Steps[0]
|
|
assert.Equal(t, []string{`echo "hello world"`}, step.Commands)
|
|
assert.Equal(t, "value", step.Environment["ADDITIONAL"])
|
|
assert.Equal(t, "bar", step.Environment["FOO"])
|
|
assert.Equal(t, "secret world", step.Environment["HELLO"])
|
|
}
|