|
|
|
// Copyright 2019 Drone.IO Inc. All rights reserved.
|
|
|
|
// Use of this source code is governed by the Polyform License
|
|
|
|
// that can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package pipeline
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
"git.awesome-for.me/liuzhiguo/drone-go/drone"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestStateKill(t *testing.T) {
|
|
|
|
step := &drone.Step{Name: "clone", Status: drone.StatusPending}
|
|
|
|
state := &State{
|
|
|
|
Stage: &drone.Stage{
|
|
|
|
Steps: []*drone.Step{step},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
state.kill(step)
|
|
|
|
if got, want := step.Status, drone.StatusPending; got != want {
|
|
|
|
t.Errorf("Expect a non-running step cannot be killed")
|
|
|
|
}
|
|
|
|
|
|
|
|
step.Status = drone.StatusRunning
|
|
|
|
state.kill(step)
|
|
|
|
if got, want := step.Status, drone.StatusKilled; got != want {
|
|
|
|
t.Errorf("Want status %s, got %s", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Error, ""; got != want {
|
|
|
|
t.Errorf("Want error %q, got %q", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.ExitCode, 137; got != want {
|
|
|
|
t.Errorf("Want exit code %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Stopped, step.Started; got != want {
|
|
|
|
t.Errorf("Want stopped %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if step.Started == 0 {
|
|
|
|
t.Errorf("Expect step started is non-zero value")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateKilled(t *testing.T) {
|
|
|
|
state := &State{}
|
|
|
|
state.Stage = &drone.Stage{Status: drone.StatusError}
|
|
|
|
if state.killed() == true {
|
|
|
|
t.Errorf("Expect killed false, got true")
|
|
|
|
}
|
|
|
|
state.Stage.Status = drone.StatusKilled
|
|
|
|
if state.killed() == false {
|
|
|
|
t.Errorf("Expect killed true, got false")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateFinished(t *testing.T) {
|
|
|
|
step := &drone.Step{Name: "test"}
|
|
|
|
state := &State{
|
|
|
|
Stage: &drone.Stage{
|
|
|
|
Steps: []*drone.Step{step},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
step.Status = drone.StatusRunning
|
|
|
|
if state.Finished(step.Name) == true {
|
|
|
|
t.Errorf("Expect finished false")
|
|
|
|
}
|
|
|
|
step.Status = drone.StatusPending
|
|
|
|
if state.Finished(step.Name) == true {
|
|
|
|
t.Errorf("Expect finished false")
|
|
|
|
}
|
|
|
|
step.Status = drone.StatusKilled
|
|
|
|
if state.Finished(step.Name) == false {
|
|
|
|
t.Errorf("Expect finished true")
|
|
|
|
}
|
|
|
|
step.Status = drone.StatusSkipped
|
|
|
|
if state.Finished(step.Name) == false {
|
|
|
|
t.Errorf("Expect finished true")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateStarted(t *testing.T) {
|
|
|
|
step := &drone.Step{Name: "clone", Status: drone.StatusPending}
|
|
|
|
state := &State{
|
|
|
|
Stage: &drone.Stage{
|
|
|
|
Steps: []*drone.Step{step},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
state.start(step)
|
|
|
|
if got, want := step.Status, drone.StatusRunning; got != want {
|
|
|
|
t.Errorf("Want status %s, got %s", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Error, ""; got != want {
|
|
|
|
t.Errorf("Want error %q, got %q", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.ExitCode, 0; got != want {
|
|
|
|
t.Errorf("Want exit code %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Stopped, int64(0); got != want {
|
|
|
|
t.Errorf("Want stopped %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if step.Started == 0 {
|
|
|
|
t.Errorf("Expect step started is non-zero value")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateFinish(t *testing.T) {
|
|
|
|
t.Skip()
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateFail(t *testing.T) {
|
|
|
|
step := &drone.Step{Name: "clone"}
|
|
|
|
state := &State{
|
|
|
|
Stage: &drone.Stage{
|
|
|
|
Steps: []*drone.Step{step},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
state.fail(step, errors.New("this is an error"))
|
|
|
|
if got, want := step.Status, drone.StatusError; got != want {
|
|
|
|
t.Errorf("Want status %s, got %s", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Error, "this is an error"; got != want {
|
|
|
|
t.Errorf("Want error %q, got %q", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.ExitCode, 255; got != want {
|
|
|
|
t.Errorf("Want exit code %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if got, want := step.Stopped, step.Started; got != want {
|
|
|
|
t.Errorf("Want started %d, got %d", want, got)
|
|
|
|
}
|
|
|
|
if step.Stopped == 0 {
|
|
|
|
t.Errorf("Expect step stopped is non-zero value")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestStateFind(t *testing.T) {
|
|
|
|
step := &drone.Step{Name: "clone"}
|
|
|
|
state := &State{
|
|
|
|
Stage: &drone.Stage{
|
|
|
|
Steps: []*drone.Step{step},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
if got, want := state.find("clone"), step; got != want {
|
|
|
|
t.Errorf("Expect find returns the named step")
|
|
|
|
}
|
|
|
|
|
|
|
|
defer func() {
|
|
|
|
if r := recover(); r == nil {
|
|
|
|
t.Errorf("Expect recover from panic")
|
|
|
|
}
|
|
|
|
}()
|
|
|
|
|
|
|
|
state.find("test")
|
|
|
|
}
|