croc/src/croc/croc_test.go

403 lines
9.3 KiB
Go
Raw Normal View History

2019-04-30 04:51:54 +02:00
package croc
import (
2019-05-12 21:10:17 +02:00
"os"
2022-02-23 16:25:13 +01:00
"path"
"path/filepath"
"runtime"
"strings"
2019-04-30 04:51:54 +02:00
"sync"
"testing"
"time"
2021-04-17 19:33:38 +02:00
"github.com/schollz/croc/v9/src/tcp"
2019-05-08 23:33:30 +02:00
log "github.com/schollz/logger"
2019-09-08 14:53:30 +02:00
"github.com/stretchr/testify/assert"
2019-04-30 04:51:54 +02:00
)
2020-02-28 21:58:46 +01:00
func init() {
log.SetLevel("trace")
2020-08-23 01:05:00 +02:00
go tcp.Run("debug", "127.0.0.1", "8281", "pass123", "8281,4")
2023-03-20 17:16:07 +01:00
go tcp.Run("debug", "127.0.0.1", "8282", "pass123")
go tcp.Run("debug", "127.0.0.1", "8283", "pass123")
go tcp.Run("debug", "127.0.0.1", "8284", "pass123")
go tcp.Run("debug", "127.0.0.1", "8285", "pass123")
2020-02-28 22:27:44 +01:00
time.Sleep(1 * time.Second)
2020-02-28 21:58:46 +01:00
}
func TestCrocReadme(t *testing.T) {
defer os.Remove("README.md")
2019-04-30 04:51:54 +02:00
log.Debug("setting up sender")
sender, err := New(Options{
2019-11-18 17:18:30 +01:00
IsSender: true,
2021-04-17 20:12:15 +02:00
SharedSecret: "8123-testingthecroc",
2019-11-18 17:18:30 +01:00
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
BasePort: 8281,
2019-11-18 17:18:30 +01:00
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
2021-04-17 20:12:15 +02:00
Curve: "siec",
Overwrite: true,
GitIgnore: false,
2019-04-30 04:51:54 +02:00
})
if err != nil {
panic(err)
}
log.Debug("setting up receiver")
receiver, err := New(Options{
2019-11-18 17:18:30 +01:00
IsSender: false,
2021-04-17 20:12:15 +02:00
SharedSecret: "8123-testingthecroc",
2019-11-18 17:18:30 +01:00
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
2019-11-18 17:18:30 +01:00
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
2021-04-17 20:12:15 +02:00
Curve: "siec",
Overwrite: true,
2019-04-30 04:51:54 +02:00
})
if err != nil {
panic(err)
}
var wg sync.WaitGroup
wg.Add(2)
go func() {
filesInfo, emptyFolders, totalNumberFolders, errGet := GetFilesInfo([]string{"../../README.md"}, false, false)
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
err := sender.Send(filesInfo, emptyFolders, totalNumberFolders)
if err != nil {
t.Errorf("send failed: %v", err)
}
wg.Done()
}()
time.Sleep(100 * time.Millisecond)
go func() {
err := receiver.Receive()
if err != nil {
t.Errorf("receive failed: %v", err)
}
wg.Done()
}()
wg.Wait()
}
func TestCrocEmptyFolder(t *testing.T) {
pathName := "../../testEmpty"
defer os.RemoveAll(pathName)
2022-04-13 01:03:21 +02:00
defer os.RemoveAll("./testEmpty")
2022-12-05 20:21:04 +01:00
os.MkdirAll(pathName, 0o755)
log.Debug("setting up sender")
sender, err := New(Options{
IsSender: true,
SharedSecret: "8123-testingthecroc",
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
BasePort: 8281,
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
Curve: "siec",
Overwrite: true,
})
if err != nil {
panic(err)
}
log.Debug("setting up receiver")
receiver, err := New(Options{
IsSender: false,
SharedSecret: "8123-testingthecroc",
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
Curve: "siec",
Overwrite: true,
})
if err != nil {
panic(err)
}
var wg sync.WaitGroup
wg.Add(2)
go func() {
filesInfo, emptyFolders, totalNumberFolders, errGet := GetFilesInfo([]string{pathName}, false, false)
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
err := sender.Send(filesInfo, emptyFolders, totalNumberFolders)
2020-08-23 01:05:00 +02:00
if err != nil {
t.Errorf("send failed: %v", err)
}
2019-04-30 04:51:54 +02:00
wg.Done()
}()
time.Sleep(100 * time.Millisecond)
go func() {
2020-08-23 01:05:00 +02:00
err := receiver.Receive()
if err != nil {
t.Errorf("receive failed: %v", err)
}
2019-04-30 04:51:54 +02:00
wg.Done()
}()
wg.Wait()
}
2019-09-07 19:06:41 +02:00
2022-02-23 16:25:13 +01:00
func TestCrocSymlink(t *testing.T) {
pathName := "../link-in-folder"
defer os.RemoveAll(pathName)
2022-04-13 01:03:21 +02:00
defer os.RemoveAll("./link-in-folder")
2022-12-05 20:21:04 +01:00
os.MkdirAll(pathName, 0o755)
2022-02-23 16:25:13 +01:00
os.Symlink("../../README.md", filepath.Join(pathName, "README.link"))
log.Debug("setting up sender")
sender, err := New(Options{
IsSender: true,
SharedSecret: "8124-testingthecroc",
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
BasePort: 8281,
2022-02-23 16:25:13 +01:00
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
Curve: "siec",
Overwrite: true,
GitIgnore: false,
2022-02-23 16:25:13 +01:00
})
if err != nil {
panic(err)
}
log.Debug("setting up receiver")
receiver, err := New(Options{
IsSender: false,
SharedSecret: "8124-testingthecroc",
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8281",
2022-02-23 16:25:13 +01:00
RelayPassword: "pass123",
Stdout: false,
NoPrompt: true,
DisableLocal: true,
Curve: "siec",
Overwrite: true,
})
if err != nil {
panic(err)
}
var wg sync.WaitGroup
wg.Add(2)
go func() {
filesInfo, emptyFolders, totalNumberFolders, errGet := GetFilesInfo([]string{pathName}, false, false)
2022-02-23 16:25:13 +01:00
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
2022-12-05 20:21:04 +01:00
err = sender.Send(filesInfo, emptyFolders, totalNumberFolders)
2022-02-23 16:25:13 +01:00
if err != nil {
t.Errorf("send failed: %v", err)
}
wg.Done()
}()
time.Sleep(100 * time.Millisecond)
go func() {
2022-12-05 20:21:04 +01:00
err = receiver.Receive()
2022-02-23 16:25:13 +01:00
if err != nil {
t.Errorf("receive failed: %v", err)
}
wg.Done()
}()
wg.Wait()
s, err := filepath.EvalSymlinks(path.Join(pathName, "README.link"))
if s != "../../README.md" && s != "..\\..\\README.md" {
log.Debug(s)
2022-02-23 16:25:13 +01:00
t.Errorf("symlink failed to transfer in folder")
}
if err != nil {
t.Errorf("symlink transfer failed: %s", err.Error())
}
}
func testCrocIgnoreGit(t *testing.T) {
log.SetLevel("trace")
defer os.Remove(".gitignore")
time.Sleep(300 * time.Millisecond)
time.Sleep(1 * time.Second)
file, err := os.Create(".gitignore")
if err != nil {
log.Errorf("error creating file")
}
_, err = file.WriteString("LICENSE")
if err != nil {
log.Errorf("error writing to file")
}
time.Sleep(1 * time.Second)
// due to how files are ignored in this function, all we have to do to test is make sure LICENSE doesn't get included in FilesInfo.
filesInfo, _, _, errGet := GetFilesInfo([]string{"../../LICENSE", ".gitignore", "croc.go"}, false, true)
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
for _, file := range filesInfo {
if strings.Contains(file.Name, "LICENSE") {
t.Errorf("test failed, should ignore LICENSE")
}
}
}
2022-02-23 16:25:13 +01:00
2019-09-07 19:06:41 +02:00
func TestCrocLocal(t *testing.T) {
log.SetLevel("trace")
2019-09-07 19:31:18 +02:00
defer os.Remove("LICENSE")
defer os.Remove("touched")
2019-09-07 19:06:41 +02:00
time.Sleep(300 * time.Millisecond)
log.Debug("setting up sender")
sender, err := New(Options{
2019-11-18 17:18:30 +01:00
IsSender: true,
2021-04-17 20:12:15 +02:00
SharedSecret: "8123-testingthecroc",
2019-11-18 17:18:30 +01:00
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8181",
BasePort: 8181,
TransferPorts: 1,
2019-11-18 17:18:30 +01:00
RelayPassword: "pass123",
Stdout: true,
NoPrompt: true,
DisableLocal: false,
2021-04-17 20:12:15 +02:00
Curve: "siec",
Overwrite: true,
GitIgnore: false,
2019-09-07 19:06:41 +02:00
})
if err != nil {
panic(err)
}
time.Sleep(1 * time.Second)
log.Debug("setting up receiver")
receiver, err := New(Options{
2019-11-18 17:18:30 +01:00
IsSender: false,
2021-04-17 20:12:15 +02:00
SharedSecret: "8123-testingthecroc",
2019-11-18 17:18:30 +01:00
Debug: true,
2023-03-20 17:16:07 +01:00
RelayAddress: "127.0.0.1:8181",
2019-11-18 17:18:30 +01:00
RelayPassword: "pass123",
Stdout: true,
NoPrompt: true,
DisableLocal: false,
2021-04-17 20:12:15 +02:00
Curve: "siec",
Overwrite: true,
2019-09-07 19:06:41 +02:00
})
if err != nil {
panic(err)
}
var wg sync.WaitGroup
2019-09-07 19:31:18 +02:00
os.Create("touched")
2019-09-07 19:06:41 +02:00
wg.Add(2)
go func() {
filesInfo, emptyFolders, totalNumberFolders, errGet := GetFilesInfo([]string{"../../LICENSE", "touched"}, false, false)
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
err := sender.Send(filesInfo, emptyFolders, totalNumberFolders)
2020-08-23 01:05:00 +02:00
if err != nil {
t.Errorf("send failed: %v", err)
}
2019-09-07 19:06:41 +02:00
wg.Done()
}()
time.Sleep(100 * time.Millisecond)
go func() {
2020-08-23 01:05:00 +02:00
err := receiver.Receive()
if err != nil {
t.Errorf("send failed: %v", err)
}
2019-09-07 19:06:41 +02:00
wg.Done()
}()
wg.Wait()
}
2019-09-08 14:53:30 +02:00
func TestCrocError(t *testing.T) {
content := []byte("temporary file's content")
tmpfile, err := os.CreateTemp("", "example")
2019-09-08 14:53:30 +02:00
if err != nil {
panic(err)
}
defer os.Remove(tmpfile.Name()) // clean up
2022-12-05 20:21:04 +01:00
if _, err = tmpfile.Write(content); err != nil {
2019-09-08 14:53:30 +02:00
panic(err)
}
2022-12-05 20:21:04 +01:00
if err = tmpfile.Close(); err != nil {
2019-09-08 14:53:30 +02:00
panic(err)
}
Debug(false)
log.SetLevel("warn")
sender, _ := New(Options{
2019-11-18 17:18:30 +01:00
IsSender: true,
2021-04-17 20:12:15 +02:00
SharedSecret: "8123-testingthecroc2",
2019-11-18 17:18:30 +01:00
Debug: true,
RelayAddress: "doesntexistok.com:8381",
BasePort: 8381,
TransferPorts: 1,
2019-11-18 17:18:30 +01:00
RelayPassword: "pass123",
Stdout: true,
NoPrompt: true,
DisableLocal: true,
2021-04-17 20:12:15 +02:00
Curve: "siec",
Overwrite: true,
2019-09-08 14:53:30 +02:00
})
filesInfo, emptyFolders, totalNumberFolders, errGet := GetFilesInfo([]string{tmpfile.Name()}, false, false)
if errGet != nil {
t.Errorf("failed to get minimal info: %v", errGet)
}
err = sender.Send(filesInfo, emptyFolders, totalNumberFolders)
2019-09-08 14:53:30 +02:00
log.Debug(err)
assert.NotNil(t, err)
}
2019-09-08 14:53:30 +02:00
func TestCleanUp(t *testing.T) {
// windows allows files to be deleted only if they
// are not open by another program so the remove actions
// from the above tests will not always do a good clean up
// This "test" will make sure
operatingSystem := runtime.GOOS
log.Debugf("The operating system is %s", operatingSystem)
if operatingSystem == "windows" {
time.Sleep(1 * time.Second)
log.Debug("Full cleanup")
var err error
for _, file := range []string{"README.md", "./README.md"} {
err = os.Remove(file)
if err == nil {
log.Debugf("Successfully purged %s", file)
} else {
2022-04-13 01:03:21 +02:00
log.Debugf("%s was already purged.", file)
}
}
for _, folder := range []string{"./testEmpty", "./link-in-folder"} {
err = os.RemoveAll(folder)
if err == nil {
log.Debugf("Successfully purged %s", folder)
} else {
2022-04-13 01:03:21 +02:00
log.Debugf("%s was already purged.", folder)
}
}
}
2019-09-08 14:53:30 +02:00
}