initial commit [ci skip]
This commit is contained in:
159
engine/resource/parser_test.go
Normal file
159
engine/resource/parser_test.go
Normal file
@@ -0,0 +1,159 @@
|
||||
// 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 resource
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/drone/runner-go/manifest"
|
||||
|
||||
"github.com/google/go-cmp/cmp"
|
||||
)
|
||||
|
||||
func TestParse(t *testing.T) {
|
||||
got, err := manifest.ParseFile("testdata/manifest.yml")
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
return
|
||||
}
|
||||
|
||||
want := []manifest.Resource{
|
||||
&manifest.Signature{
|
||||
Kind: "signature",
|
||||
Hmac: "a8842634682b78946a2",
|
||||
},
|
||||
&manifest.Secret{
|
||||
Kind: "secret",
|
||||
Type: "encrypted",
|
||||
Name: "token",
|
||||
Data: "f0e4c2f76c58916ec25",
|
||||
},
|
||||
&Pipeline{
|
||||
Kind: "pipeline",
|
||||
Type: "docker",
|
||||
Name: "default",
|
||||
Version: "1",
|
||||
Workspace: Workspace{
|
||||
Path: "/drone/src",
|
||||
},
|
||||
Platform: manifest.Platform{
|
||||
OS: "linux",
|
||||
Arch: "arm64",
|
||||
},
|
||||
Clone: manifest.Clone{
|
||||
Depth: 50,
|
||||
},
|
||||
PullSecrets: []string{"dockerconfigjson"},
|
||||
Trigger: manifest.Conditions{
|
||||
Branch: manifest.Condition{
|
||||
Include: []string{"master"},
|
||||
},
|
||||
},
|
||||
Services: []*Step{
|
||||
{
|
||||
Name: "redis",
|
||||
Image: "redis:latest",
|
||||
Entrypoint: []string{"/bin/redis-server"},
|
||||
Command: []string{"--debug"},
|
||||
},
|
||||
},
|
||||
Steps: []*Step{
|
||||
{
|
||||
Name: "build",
|
||||
Image: "golang",
|
||||
Detach: false,
|
||||
DependsOn: []string{"clone"},
|
||||
Commands: []string{
|
||||
"go build",
|
||||
"go test",
|
||||
},
|
||||
Environment: map[string]*manifest.Variable{
|
||||
"GOOS": &manifest.Variable{Value: "linux"},
|
||||
"GOARCH": &manifest.Variable{Value: "arm64"},
|
||||
},
|
||||
Failure: "ignore",
|
||||
When: manifest.Conditions{
|
||||
Event: manifest.Condition{
|
||||
Include: []string{"push"},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if diff := cmp.Diff(got.Resources, want); diff != "" {
|
||||
t.Errorf("Unexpected manifest")
|
||||
t.Log(diff)
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseErr(t *testing.T) {
|
||||
_, err := manifest.ParseFile("testdata/malformed.yml")
|
||||
if err == nil {
|
||||
t.Errorf("Expect error when malformed yaml")
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseLintErr(t *testing.T) {
|
||||
_, err := manifest.ParseFile("testdata/linterr.yml")
|
||||
if err == nil {
|
||||
t.Errorf("Expect linter returns error")
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func TestParseNoMatch(t *testing.T) {
|
||||
r := &manifest.RawResource{Kind: "pipeline", Type: "exec"}
|
||||
_, match, _ := parse(r)
|
||||
if match {
|
||||
t.Errorf("Expect no match")
|
||||
}
|
||||
}
|
||||
|
||||
func TestMatch(t *testing.T) {
|
||||
r := &manifest.RawResource{
|
||||
Kind: "pipeline",
|
||||
Type: "docker",
|
||||
}
|
||||
if match(r) == false {
|
||||
t.Errorf("Expect match, got false")
|
||||
}
|
||||
|
||||
r = &manifest.RawResource{
|
||||
Kind: "approval",
|
||||
Type: "docker",
|
||||
}
|
||||
if match(r) == true {
|
||||
t.Errorf("Expect kind mismatch, got true")
|
||||
}
|
||||
|
||||
r = &manifest.RawResource{
|
||||
Kind: "pipeline",
|
||||
Type: "dummy",
|
||||
}
|
||||
if match(r) == true {
|
||||
t.Errorf("Expect type mismatch, got true")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestLint(t *testing.T) {
|
||||
p := new(Pipeline)
|
||||
p.Steps = []*Step{{Name: "build"}, {Name: "test"}}
|
||||
if err := lint(p); err != nil {
|
||||
t.Errorf("Expect no lint error, got %s", err)
|
||||
}
|
||||
|
||||
p.Steps = []*Step{{Name: "build"}, {Name: "build"}}
|
||||
if err := lint(p); err == nil {
|
||||
t.Errorf("Expect error when duplicate name")
|
||||
}
|
||||
|
||||
p.Steps = []*Step{{Name: "build"}, {Name: ""}}
|
||||
if err := lint(p); err == nil {
|
||||
t.Errorf("Expect error when empty name")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user