-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'JonasAlfredsson-space_fix'
- Loading branch information
Showing
6 changed files
with
58 additions
and
59 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,109 +1,108 @@ | ||
package tests | ||
|
||
import ( | ||
scp "github.com/bramvdbogaerde/go-scp" | ||
"github.com/bramvdbogaerde/go-scp/auth" | ||
"golang.org/x/crypto/ssh" | ||
"io/ioutil" | ||
"os" | ||
"strings" | ||
"testing" | ||
|
||
scp "github.com/bramvdbogaerde/go-scp" | ||
"github.com/bramvdbogaerde/go-scp/auth" | ||
"golang.org/x/crypto/ssh" | ||
) | ||
|
||
// This test, tests the basic functionality of the library: copying files | ||
// it assumes that a docker container is running an SSH server at port | ||
// 2244 using password authentication. | ||
// | ||
// It also assumes that the directory /results is writable within that container | ||
// and is mapped to the tmp/ directory within this directory. | ||
func TestCopy(t *testing.T) { | ||
// Use SSH key authentication from the auth package | ||
// we ignore the host key in this example, please change this if you use this library | ||
func establishConnection(t *testing.T) scp.Client { | ||
// Use SSH key authentication from the auth package. | ||
// During testing we ignore the host key, don't to that when you use this. | ||
clientConfig, _ := auth.PasswordKey("bram", "test", ssh.InsecureIgnoreHostKey()) | ||
|
||
// For other authentication methods see ssh.ClientConfig and ssh.AuthMethod | ||
|
||
// Create a new SCP client | ||
// Create a new SCP client. | ||
client := scp.NewClient("127.0.0.1:2244", &clientConfig) | ||
|
||
// Connect to the remote server | ||
// Connect to the remote server. | ||
err := client.Connect() | ||
if err != nil { | ||
t.Errorf("Couldn't establish a connection to the remote server %s", err) | ||
return | ||
t.Fatalf("Couldn't establish a connection to the remote server: %s", err) | ||
} | ||
return client | ||
} | ||
|
||
// Open a file | ||
f, _ := os.Open("./input.txt") | ||
|
||
// Close client connection after the file has been copied | ||
// TestCopy tests the basic functionality of copying a file to the remote | ||
// destination. | ||
// | ||
// It assumes that a Docker container is running an SSH server at port 2244 | ||
// that is using password authentication. It also assumes that the directory | ||
// /data is writable within that container and is mapped to ./tmp/ within the | ||
// directory the test is run from. | ||
func TestCopy(t *testing.T) { | ||
client := establishConnection(t) | ||
defer client.Close() | ||
|
||
// Close the file after it has been copied | ||
// Open a file we can transfer to the remote container. | ||
f, _ := os.Open("./data/upload_file.txt") | ||
defer f.Close() | ||
|
||
// Finaly, copy the file over | ||
// Usage: CopyFile(fileReader, remotePath, permission) | ||
|
||
err = client.CopyFile(f, "/data/output.txt", "0655") | ||
// Create a file name with exotic characters and spaces in them. | ||
// If this test works for this, simpler files should not be a problem. | ||
filename := "Exöt1ç uploaded file.txt" | ||
|
||
// Finaly, copy the file over. | ||
// Usage: CopyFile(fileReader, remotePath, permission). | ||
err := client.CopyFile(f, "/data/"+filename, "0777") | ||
if err != nil { | ||
t.Errorf("Error while copying file %s", err) | ||
t.Errorf("Error while copying file: %s", err) | ||
} | ||
|
||
content, err := ioutil.ReadFile("./tmp/output.txt") | ||
// Read what the receiver have written to disk. | ||
content, err := ioutil.ReadFile("./tmp/" + filename) | ||
if err != nil { | ||
t.Errorf("Test has failed, file could not be opened") | ||
t.Errorf("Result file could not be read: %s", err) | ||
} | ||
|
||
text := string(content) | ||
expected := "It Works\n" | ||
if strings.Compare(text, expected) != 0 { | ||
t.Errorf("Got different text than expected, expected \"%s\" got, \"%s\"", expected, text) | ||
t.Errorf("Got different text than expected, expected %q got, %q", expected, text) | ||
} | ||
} | ||
|
||
// This test assumes that a Docker container is running that has the SCP binary available | ||
// and exposes an SSH server on port 2244 using password authentication. | ||
// TestDownloadFile tests the basic functionality of copying a file from the | ||
// remote destination. | ||
// | ||
// The test checks whether it can retrieve a file from the remote and checks the file against the expected file | ||
// It assumes that a Docker container is running an SSH server at port 2244 | ||
// that is using password authentication. It also assumes that the directory | ||
// /data is writable within that container and is mapped to ./tmp/ within the | ||
// directory the test is run from. | ||
func TestDownloadFile(t *testing.T) { | ||
// Use SSH key authentication from the auth package | ||
// we ignore the host key in this example, please change this if you use this library | ||
clientConfig, _ := auth.PasswordKey("bram", "test", ssh.InsecureIgnoreHostKey()) | ||
|
||
// For other authentication methods see ssh.ClientConfig and ssh.AuthMethod | ||
|
||
// Create a new SCP client | ||
client := scp.NewClient("127.0.0.1:2244", &clientConfig) | ||
client := establishConnection(t) | ||
defer client.Close() | ||
|
||
// Connect to the remote server | ||
err := client.Connect() | ||
if err != nil { | ||
t.Errorf("Couldn't establish a connection to the remote server %s", err) | ||
return | ||
} | ||
// Open a file we can transfer to the remote container. | ||
f, _ := os.Open("./data/input.txt") | ||
defer f.Close() | ||
|
||
f, err := os.OpenFile("./tmp/output.txt", os.O_RDWR|os.O_CREATE, 0755) | ||
// Create a local file to write to. | ||
f, err := os.OpenFile("./tmp/output.txt", os.O_RDWR|os.O_CREATE, 0777) | ||
if err != nil { | ||
t.Errorf("Couldn't open the output file") | ||
} | ||
|
||
// Close client connection after the file has been copied | ||
defer client.Close() | ||
|
||
// Close the file after it has been copied | ||
defer f.Close() | ||
|
||
err = client.CopyFromRemote(f, "/input/test_download.txt") | ||
// Use a file name with exotic characters and spaces in them. | ||
// If this test works for this, simpler files should not be a problem. | ||
err = client.CopyFromRemote(f, "/input/Exöt1ç download file.txt.txt") | ||
if err != nil { | ||
t.Errorf("Copy failed from remote") | ||
} | ||
|
||
content, err := ioutil.ReadFile("./tmp/output.txt") | ||
if err != nil { | ||
t.Errorf("Result file could not be read: %s", err) | ||
} | ||
|
||
text := string(content) | ||
expected := "It works for download!\n" | ||
if strings.Compare(text, expected) != 0 { | ||
t.Errorf("Got different text than expected, expected \"%s\" got, \"%s\"", expected, text) | ||
t.Errorf("Got different text than expected, expected %q got, %q", expected, text) | ||
} | ||
} |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Empty file.