From 392c7c90e3a80c95f33c75bf2f87f9f6b8b94fca Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Fri, 30 Dec 2016 10:44:49 +0800 Subject: [PATCH] Add ssh testing. Signed-off-by: Bo-Yi Wu --- main.go | 6 --- plugin.go | 29 +++---------- plugin_test.go | 94 ++++++++++++++++++++++++++++++++++++++++++- tests/.ssh/id_rsa | 27 +++++++++++++ tests/.ssh/id_rsa.pub | 1 + tests/a.txt | 0 tests/b.txt | 0 7 files changed, 127 insertions(+), 30 deletions(-) create mode 100644 tests/.ssh/id_rsa create mode 100644 tests/.ssh/id_rsa.pub create mode 100644 tests/a.txt create mode 100644 tests/b.txt diff --git a/main.go b/main.go index 90cef10..b6d023c 100644 --- a/main.go +++ b/main.go @@ -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"), }, } diff --git a/plugin.go b/plugin.go index dc25997..7c75897 100644 --- a/plugin.go +++ b/plugin.go @@ -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 diff --git a/plugin_test.go b/plugin_test.go index 3006f08..12059c7 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -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) +} diff --git a/tests/.ssh/id_rsa b/tests/.ssh/id_rsa new file mode 100644 index 0000000..6270f55 --- /dev/null +++ b/tests/.ssh/id_rsa @@ -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----- diff --git a/tests/.ssh/id_rsa.pub b/tests/.ssh/id_rsa.pub new file mode 100644 index 0000000..2983f04 --- /dev/null +++ b/tests/.ssh/id_rsa.pub @@ -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 diff --git a/tests/a.txt b/tests/a.txt new file mode 100644 index 0000000..e69de29 diff --git a/tests/b.txt b/tests/b.txt new file mode 100644 index 0000000..e69de29