import groovy.mock.interceptor.MockFor
|
|
import static groovy.test.GroovyAssert.*
|
|
import groovy.util.GroovyTestCase
|
|
|
|
import org.wikimedia.integration.Pipeline
|
|
|
|
class PipelineTest extends GroovyTestCase {
|
|
void testConstructor() {
|
|
def pipeline = new Pipeline("foo", [
|
|
blubberfile: "bar/blubber.yaml",
|
|
directory: "src/foo",
|
|
stages: [
|
|
[name: "unit"],
|
|
[name: "lint"],
|
|
[name: "candidate"],
|
|
[name: "production"],
|
|
],
|
|
execution: [
|
|
["unit", "candidate", "production"],
|
|
["lint", "candidate", "production"],
|
|
],
|
|
])
|
|
|
|
assert pipeline.blubberfile == "bar/blubber.yaml"
|
|
assert pipeline.directory == "src/foo"
|
|
assert pipeline.execution == [
|
|
["unit", "candidate", "production"],
|
|
["lint", "candidate", "production"],
|
|
]
|
|
}
|
|
|
|
void testConstructor_defaults() {
|
|
def pipeline = new Pipeline("foo", [
|
|
directory: "src/foo",
|
|
stages: [
|
|
[name: "unit"],
|
|
[name: "lint"],
|
|
[name: "candidate"],
|
|
[name: "production"],
|
|
],
|
|
])
|
|
|
|
assert pipeline.blubberfile == "foo/blubber.yaml"
|
|
|
|
assert pipeline.execution == [
|
|
["unit", "lint", "candidate", "production"],
|
|
]
|
|
}
|
|
|
|
void testGetDefaultNodeLabels_build() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [
|
|
[
|
|
name: "foo",
|
|
build: "foo",
|
|
],
|
|
],
|
|
])
|
|
|
|
assert pipeline.getRequiredNodeLabels() == ["blubber"] as Set
|
|
}
|
|
|
|
void testGetDefaultNodeLabels_run() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [
|
|
[
|
|
name: "foo",
|
|
run: [
|
|
image: "foo",
|
|
],
|
|
],
|
|
],
|
|
])
|
|
|
|
assert pipeline.getRequiredNodeLabels() == ["blubber"] as Set
|
|
}
|
|
|
|
void testGetDefaultNodeLabels_publishFiles() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [
|
|
[
|
|
name: "foo",
|
|
publish: [
|
|
files: [
|
|
paths: ["foo/*"],
|
|
],
|
|
],
|
|
],
|
|
],
|
|
])
|
|
|
|
assert pipeline.getRequiredNodeLabels() == ["blubber"] as Set
|
|
}
|
|
|
|
void testGetDefaultNodeLabels_publishImage() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [
|
|
[
|
|
name: "foo",
|
|
publish: [
|
|
image: [
|
|
id: "foo",
|
|
],
|
|
],
|
|
],
|
|
],
|
|
])
|
|
|
|
assert pipeline.getRequiredNodeLabels() == ["dockerPublish"] as Set
|
|
}
|
|
|
|
void testRunner() {
|
|
def pipeline = new Pipeline("foo", [
|
|
directory: "src/foo/",
|
|
stages: [],
|
|
])
|
|
|
|
def runner = pipeline.runner()
|
|
|
|
assert runner.configPath == "../../.pipeline"
|
|
assert runner.registry == "docker-registry.wikimedia.org"
|
|
assert runner.registryInternal == "docker-registry.discovery.wmnet"
|
|
}
|
|
|
|
void testRunner_currentDirectory() {
|
|
def pipeline = new Pipeline("foo", [
|
|
directory: ".",
|
|
stages: [],
|
|
])
|
|
|
|
assert pipeline.runner().configPath == ".pipeline"
|
|
}
|
|
|
|
void testRunner_customRegistries() {
|
|
def pipeline = new Pipeline("foo", [stages: []])
|
|
pipeline.dockerRegistry = "registry.example"
|
|
pipeline.dockerRegistryInternal = "internal.example"
|
|
|
|
def runner = pipeline.runner()
|
|
|
|
assert runner.registry == "registry.example"
|
|
assert runner.registryInternal == "internal.example"
|
|
}
|
|
|
|
void testValidate_setupReserved() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [[name: "setup"]],
|
|
])
|
|
|
|
def e = shouldFail(Pipeline.ValidationException) {
|
|
pipeline.validate()
|
|
}
|
|
|
|
assert e.errors.size() == 1
|
|
assert e.errors[0] == "setup is a reserved stage name"
|
|
}
|
|
|
|
void testStack() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [[name: "stageA"], [name: "stageB"], [name: "stageC"]],
|
|
execution: [["stageA", "stageC"], ["stageB", "stageC"]],
|
|
])
|
|
|
|
// Expecting:
|
|
//
|
|
// stageA
|
|
// ⇗ ⇘
|
|
// setup stageC ⇒ teardown
|
|
// ⇘ ⇗
|
|
// stageB
|
|
//
|
|
def stack = pipeline.stack()
|
|
|
|
assert stack.size() == 4
|
|
|
|
assert stack[0].size() == 1
|
|
assert stack[0][0].name == "setup"
|
|
|
|
assert stack[1].size() == 2
|
|
assert stack[1][0].name == "stageA"
|
|
assert stack[1][1].name == "stageB"
|
|
|
|
assert stack[2].size() == 1
|
|
assert stack[2][0].name == "stageC"
|
|
|
|
assert stack[3].size() == 1
|
|
assert stack[3][0].name == "teardown"
|
|
}
|
|
|
|
void testValidate_teardownReserved() {
|
|
def pipeline = new Pipeline("foo", [
|
|
stages: [[name: "teardown"]],
|
|
])
|
|
|
|
def e = shouldFail(Pipeline.ValidationException) {
|
|
pipeline.validate()
|
|
}
|
|
|
|
assert e.errors.size() == 1
|
|
assert e.errors[0] == "teardown is a reserved stage name"
|
|
}
|
|
}
|