Add ssh testing.

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
This commit is contained in:
Bo-Yi Wu 2016-12-30 10:44:49 +08:00
parent a0c61bbd03
commit 392c7c90e3
7 changed files with 127 additions and 30 deletions

View File

@ -64,11 +64,6 @@ func main() {
Usage: "scp file list",
EnvVar: "PLUGIN_SOURCE,SCP_SOURCE",
},
cli.BoolFlag{
Name: "debug",
Usage: "display message from command",
EnvVar: "PLUGIN_DEBUG,SCP_DEBUG",
},
cli.BoolFlag{
Name: "rm",
Usage: "remove target folder before upload data",
@ -164,7 +159,6 @@ func run(c *cli.Context) error {
KeyPath: c.String("key-path"),
Target: c.StringSlice("target"),
Source: c.StringSlice("source"),
Debug: c.Bool("debug"),
Remove: c.Bool("rm"),
},
}

View File

@ -44,7 +44,6 @@ type (
KeyPath string
Target []string
Source []string
Debug bool
Remove bool
}
@ -137,11 +136,7 @@ func (p Plugin) Exec() error {
if p.Config.Remove {
p.log(host, "Remove target folder:", target)
response, err := ssh.Run(fmt.Sprintf("rm -rf %s", target))
if p.Config.Debug {
log.Println(response)
}
_, err := ssh.Run(fmt.Sprintf("rm -rf %s", target))
if err != nil {
errChannel <- err
@ -150,23 +145,15 @@ func (p Plugin) Exec() error {
// mkdir path
p.log(host, "create folder", target)
response, err := ssh.Run(fmt.Sprintf("mkdir -p %s", target))
response, _ := ssh.Run(fmt.Sprintf("mkdir -p %s", target))
if p.Config.Debug {
log.Println(response)
}
if err != nil {
errChannel <- err
if response != "" {
errChannel <- errors.New(response)
}
// untar file
p.log(host, "untar file", dest)
response, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, target))
if p.Config.Debug {
log.Println(response)
}
_, err = ssh.Run(fmt.Sprintf("tar -xf %s -C %s", dest, target))
if err != nil {
errChannel <- err
@ -175,11 +162,7 @@ func (p Plugin) Exec() error {
// remove tar file
p.log(host, "remove file", dest)
response, err := ssh.Run(fmt.Sprintf("rm -rf %s", dest))
if p.Config.Debug {
log.Println(response)
}
_, err = ssh.Run(fmt.Sprintf("rm -rf %s", dest))
if err != nil {
errChannel <- err

View File

@ -3,10 +3,12 @@ package main
import (
"github.com/stretchr/testify/assert"
"os"
"os/user"
"testing"
)
func TestMissingConfig(t *testing.T) {
func TestMissingAllConfig(t *testing.T) {
var plugin Plugin
err := plugin.Exec()
@ -55,3 +57,93 @@ func TestTrimElement(t *testing.T) {
assert.Equal(t, result, trimPath(input))
}
func TestSCPFile(t *testing.T) {
u, err := user.Lookup("drone-scp")
if err != nil {
t.Fatalf("Lookup: %v", err)
}
plugin := Plugin{
Config: Config{
Host: []string{"localhost"},
Username: "drone-scp",
Port: "22",
KeyPath: "tests/.ssh/id_rsa",
Source: []string{"tests/a.txt", "tests/b.txt"},
Target: []string{u.HomeDir + "/test"},
},
}
err = plugin.Exec()
assert.Nil(t, err)
// check file exist
if _, err := os.Stat(u.HomeDir + "/test/tests/a.txt"); os.IsNotExist(err) {
t.Fatalf("SCP-error: %v", err)
}
if _, err := os.Stat(u.HomeDir + "/test/tests/b.txt"); os.IsNotExist(err) {
t.Fatalf("SCP-error: %v", err)
}
// Test -rm flag
plugin.Config.Source = []string{"tests/a.txt"}
plugin.Config.Remove = true
err = plugin.Exec()
assert.Nil(t, err)
// check file exist
if _, err := os.Stat(u.HomeDir + "/test/tests/b.txt"); os.IsExist(err) {
t.Fatalf("SCP-error: %v", err)
}
}
func TestIncorrectPassword(t *testing.T) {
plugin := Plugin{
Config: Config{
Host: []string{"localhost"},
Username: "drone-scp",
Port: "22",
Password: "1234",
Source: []string{"tests/a.txt", "tests/b.txt"},
Target: []string{"/home"},
},
}
err := plugin.Exec()
assert.NotNil(t, err)
}
func TestNoPermissionCreateFolder(t *testing.T) {
plugin := Plugin{
Config: Config{
Host: []string{"localhost"},
Username: "drone-scp",
Port: "22",
KeyPath: "tests/.ssh/id_rsa",
Source: []string{"tests/a.txt", "tests/b.txt"},
Target: []string{"/etc/test"},
},
}
err := plugin.Exec()
assert.NotNil(t, err)
}
func TestSourceNotFound(t *testing.T) {
plugin := Plugin{
Config: Config{
Host: []string{"localhost"},
Username: "drone-scp",
Port: "22",
KeyPath: "tests/.ssh/id_rsa",
Source: []string{"tests/aa.txt", "tests/b.txt"},
Target: []string{"/test"},
},
}
err := plugin.Exec()
assert.NotNil(t, err)
}

27
tests/.ssh/id_rsa Normal file
View File

@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA4e2D/qPN08pzTac+a8ZmlP1ziJOXk45CynMPtva0rtK/RB26
VbfAF0hIJji7ltvnYnqCU9oFfvEM33cTn7T96+od8ib/Vz25YU8ZbstqtIskPuwC
bv3K0mAHgsviJyRD7yM+QKTbBQEgbGuW6gtbMKhiYfiIB4Dyj7AdS/fk3v26wDgz
7SHI5OBqu9bv1KhxQYdFEnU3PAtAqeccgzNpbH3eYLyGzuUxEIJlhpZ/uU2G9ppj
/cSrONVPiI8Ahi4RrlZjmP5l57/sq1ClGulyLpFcMw68kP5FikyqHpHJHRBNgU57
1y0Ph33SjBbs0haCIAcmreWEhGe+/OXnJe6VUQIDAQABAoIBAH97emORIm9DaVSD
7mD6DqA7c5m5Tmpgd6eszU08YC/Vkz9oVuBPUwDQNIX8tT0m0KVs42VVPIyoj874
bgZMJoucC1G8V5Bur9AMxhkShx9g9A7dNXJTmsKilRpk2TOk7wBdLp9jZoKoZBdJ
jlp6FfaazQjjKD6zsCsMATwAoRCBpBNsmT6QDN0n0bIgY0tE6YGQaDdka0dAv68G
R0VZrcJ9voT6+f+rgJLoojn2DAu6iXaM99Gv8FK91YCymbQlXXgrk6CyS0IHexN7
V7a3k767KnRbrkqd3o6JyNun/CrUjQwHs1IQH34tvkWScbseRaFehcAm6mLT93RP
muauvMECgYEA9AXGtfDMse0FhvDPZx4mx8x+vcfsLvDHcDLkf/lbyPpu97C27b/z
ia07bu5TAXesUZrWZtKA5KeRE5doQSdTOv1N28BEr8ZwzDJwfn0DPUYUOxsN2iIy
MheO5A45Ko7bjKJVkZ61Mb1UxtqCTF9mqu9R3PBdJGthWOd+HUvF460CgYEA7QRf
Z8+vpGA+eSuu29e0xgRKnRzed5zXYpcI4aERc3JzBgO4Z0er9G8l66OWVGdMfpe6
CBajC5ToIiT8zqoYxXwqJgN+glir4gJe3mm8J703QfArZiQrdk0NTi5bY7+vLLG/
knTrtpdsKih6r3kjhuPPaAsIwmMxIydFvATKjLUCgYEAh/y4EihRSk5WKC8GxeZt
oiZ58vT4z+fqnMIfyJmD5up48JuQNcokw/LADj/ODiFM7GUnWkGxBrvDA3H67WQm
49bJjs8E+BfUQFdTjYnJRlpJZ+7Zt1gbNQMf5ENw5CCchTDqEq6pN0DVf8PBnSIF
KvkXW9KvdV5J76uCAn15mDkCgYA1y8dHzbjlCz9Cy2pt1aDfTPwOew33gi7U3skS
RTerx29aDyAcuQTLfyrROBkX4TZYiWGdEl5Bc7PYhCKpWawzrsH2TNa7CRtCOh2E
R+V/84+GNNf04ALJYCXD9/ugQVKmR1XfDRCvKeFQFE38Y/dvV2etCswbKt5tRy2p
xkCe/QKBgQCkLqafD4S20YHf6WTp3jp/4H/qEy2X2a8gdVVBi1uKkGDXr0n+AoVU
ib4KbP5ovZlrjL++akMQ7V2fHzuQIFWnCkDA5c2ZAqzlM+ZN+HRG7gWur7Bt4XH1
7XC9wlRna4b3Ln8ew3q1ZcBjXwD4ppbTlmwAfQIaZTGJUgQbdsO9YA==
-----END RSA PRIVATE KEY-----

1
tests/.ssh/id_rsa.pub Normal file
View File

@ -0,0 +1 @@
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDh7YP+o83TynNNpz5rxmaU/XOIk5eTjkLKcw+29rSu0r9EHbpVt8AXSEgmOLuW2+dieoJT2gV+8QzfdxOftP3r6h3yJv9XPblhTxluy2q0iyQ+7AJu/crSYAeCy+InJEPvIz5ApNsFASBsa5bqC1swqGJh+IgHgPKPsB1L9+Te/brAODPtIcjk4Gq71u/UqHFBh0USdTc8C0Cp5xyDM2lsfd5gvIbO5TEQgmWGln+5TYb2mmP9xKs41U+IjwCGLhGuVmOY/mXnv+yrUKUa6XIukVwzDryQ/kWKTKoekckdEE2BTnvXLQ+HfdKMFuzSFoIgByat5YSEZ7785ecl7pVR drone-scp@localhost

0
tests/a.txt Normal file
View File

0
tests/b.txt Normal file
View File