aboutsummaryrefslogtreecommitdiff
path: root/hotline/file_transfer_test.go
diff options
context:
space:
mode:
authorJeff Halter <868228+jhalter@users.noreply.github.com>2024-07-17 15:41:20 -0700
committerJeff Halter <868228+jhalter@users.noreply.github.com>2024-07-17 15:42:37 -0700
commitfd740bc499ebc6d3a381479316f74cdc736d02de (patch)
treee77563ce0997e51debaec75c9f7a053759ca3a0a /hotline/file_transfer_test.go
parent80aed6b19ff0b0927670e459ce5cc7a16ef047ec (diff)
Extensive refactor, quality of life enhancements
* Added ability to reload config, agreement, news, and user accounts without restarting the server by sending SIGHUP to the running process * Added ability to use modern unix or windows line breaks in Agreement.txt and MessageBoard.txt instead of classic MacOS `\r` breaks. * Extensive refactor towards swappable backends for the active server state * Extensive refactored towards making the hotline package generic and re-usable for alternate server implemenations * Fix bug where users whose accounts have been deleted would not be disconnected
Diffstat (limited to 'hotline/file_transfer_test.go')
-rw-r--r--hotline/file_transfer_test.go95
1 files changed, 92 insertions, 3 deletions
diff --git a/hotline/file_transfer_test.go b/hotline/file_transfer_test.go
index d12f29a..b1236b6 100644
--- a/hotline/file_transfer_test.go
+++ b/hotline/file_transfer_test.go
@@ -3,6 +3,8 @@ package hotline
import (
"encoding/binary"
"github.com/stretchr/testify/assert"
+ "io"
+ "reflect"
"testing"
)
@@ -74,12 +76,12 @@ func TestFileTransfer_String(t *testing.T) {
ft := &FileTransfer{
FileName: tt.fields.FileName,
FilePath: tt.fields.FilePath,
- refNum: tt.fields.refNum,
+ RefNum: tt.fields.refNum,
Type: tt.fields.Type,
TransferSize: tt.fields.TransferSize,
FolderItemCount: tt.fields.FolderItemCount,
- fileResumeData: tt.fields.fileResumeData,
- options: tt.fields.options,
+ FileResumeData: tt.fields.fileResumeData,
+ Options: tt.fields.options,
bytesSentCounter: tt.fields.bytesSentCounter,
ClientConn: tt.fields.ClientConn,
}
@@ -87,3 +89,90 @@ func TestFileTransfer_String(t *testing.T) {
})
}
}
+
+func TestNewFileHeader(t *testing.T) {
+ type args struct {
+ fileName string
+ isDir bool
+ }
+ tests := []struct {
+ name string
+ args args
+ want FileHeader
+ }{
+ {
+ name: "when path is file",
+ args: args{
+ fileName: "foo",
+ isDir: false,
+ },
+ want: FileHeader{
+ Size: [2]byte{0x00, 0x0a},
+ Type: [2]byte{0x00, 0x00},
+ FilePath: EncodeFilePath("foo"),
+ },
+ },
+ {
+ name: "when path is dir",
+ args: args{
+ fileName: "foo",
+ isDir: true,
+ },
+ want: FileHeader{
+ Size: [2]byte{0x00, 0x0a},
+ Type: [2]byte{0x00, 0x01},
+ FilePath: EncodeFilePath("foo"),
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := NewFileHeader(tt.args.fileName, tt.args.isDir); !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("NewFileHeader() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func TestFileHeader_Payload(t *testing.T) {
+ type fields struct {
+ Size [2]byte
+ Type [2]byte
+ FilePath []byte
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want []byte
+ }{
+ {
+ name: "has expected payload bytes",
+ fields: fields{
+ Size: [2]byte{0x00, 0x0a},
+ Type: [2]byte{0x00, 0x00},
+ FilePath: EncodeFilePath("foo"),
+ },
+ want: []byte{
+ 0x00, 0x0a, // total size
+ 0x00, 0x00, // type
+ 0x00, 0x01, // path item count
+ 0x00, 0x00, // path separator
+ 0x03, // pathName len
+ 0x66, 0x6f, 0x6f, // "foo"
+ },
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ fh := &FileHeader{
+ Size: tt.fields.Size,
+ Type: tt.fields.Type,
+ FilePath: tt.fields.FilePath,
+ }
+ got, _ := io.ReadAll(fh)
+ if !reflect.DeepEqual(got, tt.want) {
+ t.Errorf("Read() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}