harness-drone/service/canceler/match_test.go

179 lines
4.6 KiB
Go

// Copyright 2019 Drone.IO Inc. All rights reserved.
// Use of this source code is governed by the Drone Non-Commercial License
// that can be found in the LICENSE file.
package canceler
import (
"testing"
"github.com/drone/drone/core"
)
func TestMatchPendingBuild(t *testing.T) {
tests := []struct {
build *core.Build
repo *core.Repository
want bool
}{
// does not match repository id
{
build: &core.Build{RepoID: 2},
repo: &core.Repository{ID: 1},
want: false,
},
// does not match build number requirement that
// must be older than current build
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 3}},
want: false,
},
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 2}},
want: false,
},
// does not match required status
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 1, Status: core.StatusPassing}},
want: false,
},
// does not match (one of) required event types
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPullRequest},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusPending,
Event: core.EventPush,
}},
want: false,
},
// does not match ref
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPush, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusPending,
Event: core.EventPush,
Ref: "refs/heads/develop",
}},
want: false,
},
//
// successful matches
//
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPush, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusPending,
Event: core.EventPush,
Ref: "refs/heads/master",
}, CancelRunning: false},
want: true,
},
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPullRequest, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusPending,
Event: core.EventPullRequest,
Ref: "refs/heads/master",
}, CancelRunning: false},
want: true,
},
}
for i, test := range tests {
if got, want := match(test.build, test.repo), test.want; got != want {
t.Errorf("Want match %v at index %d, got %v", want, i, got)
}
}
}
func TestMatchRunningBuilds(t *testing.T) {
tests := []struct {
build *core.Build
repo *core.Repository
want bool
}{
// does not match repository id
{
build: &core.Build{RepoID: 2},
repo: &core.Repository{ID: 1},
want: false,
},
// does not match build number requirement that
// must be older than current build
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 3}},
want: false,
},
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 2}},
want: false,
},
// does not match required status
{
build: &core.Build{RepoID: 1, Number: 2},
repo: &core.Repository{ID: 1, Build: &core.Build{Number: 1, Status: core.StatusError}},
want: false,
},
// does not match (one of) required event types
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPullRequest},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusRunning,
Event: core.EventPush,
}},
want: false,
},
// does not match ref
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPush, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusRunning,
Event: core.EventPush,
Ref: "refs/heads/develop",
}},
want: false,
},
//
// successful matches
//
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPullRequest, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusRunning,
Event: core.EventPullRequest,
Ref: "refs/heads/master",
}, CancelRunning: true},
want: true,
},
{
build: &core.Build{RepoID: 1, Number: 2, Event: core.EventPush, Ref: "refs/heads/master"},
repo: &core.Repository{ID: 1, Build: &core.Build{
Number: 1,
Status: core.StatusRunning,
Event: core.EventPush,
Ref: "refs/heads/master",
}, CancelRunning: true},
want: true,
},
}
for i, test := range tests {
if got, want := match(test.build, test.repo), test.want; got != want {
t.Errorf("Want match %v at index %d, got %v", want, i, got)
}
}
}