]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/transfer_test.go
patch: v0.10.17
[rbdr/mobius] / hotline / transfer_test.go
index 63e22c068e5269d24800d83afb4ed5a312c3dc14..fb3e0da11b8628e538a305f79d27dbf28760fd34 100644 (file)
@@ -1,6 +1,12 @@
 package hotline
 
-import "testing"
+import (
+       "bytes"
+       "fmt"
+       "github.com/stretchr/testify/assert"
+       "io"
+       "testing"
+)
 
 func TestTransfer_Read(t *testing.T) {
        type fields struct {
@@ -96,3 +102,99 @@ func TestTransfer_Read(t *testing.T) {
                })
        }
 }
+
+func Test_receiveFile(t *testing.T) {
+       type args struct {
+               conn io.Reader
+       }
+       tests := []struct {
+               name            string
+               args            args
+               wantTargetFile  []byte
+               wantResForkFile []byte
+               wantErr         assert.ErrorAssertionFunc
+       }{
+               {
+                       name: "transfers file when there is no resource fork",
+                       args: args{
+                               conn: func() io.Reader {
+                                       testFile := flattenedFileObject{
+                                               FlatFileHeader: FlatFileHeader{
+                                                       Format:    [4]byte{0x46, 0x49, 0x4c, 0x50}, // "FILP"
+                                                       Version:   [2]byte{0, 1},
+                                                       RSVD:      [16]byte{},
+                                                       ForkCount: [2]byte{0, 2},
+                                               },
+                                               FlatFileInformationForkHeader: FlatFileForkHeader{},
+                                               FlatFileInformationFork:       NewFlatFileInformationFork("testfile.txt", make([]byte, 8), "TEXT", "TEXT"),
+                                               FlatFileDataForkHeader: FlatFileForkHeader{
+                                                       ForkType:        [4]byte{0x4d, 0x41, 0x43, 0x52}, // DATA
+                                                       CompressionType: [4]byte{0, 0, 0, 0},
+                                                       RSVD:            [4]byte{0, 0, 0, 0},
+                                                       DataSize:        [4]byte{0x00, 0x00, 0x00, 0x03},
+                                               },
+                                       }
+                                       fakeFileData := []byte{1, 2, 3}
+                                       b := testFile.BinaryMarshal()
+                                       b = append(b, fakeFileData...)
+                                       return bytes.NewReader(b)
+                               }(),
+                       },
+                       wantTargetFile:  []byte{1, 2, 3},
+                       wantResForkFile: []byte(nil),
+
+                       wantErr: assert.NoError,
+               },
+               // {
+               //      name: "transfers fileWrapper when there is a resource fork",
+               //      args: args{
+               //              conn: func() io.Reader {
+               //                      testFile := flattenedFileObject{
+               //                              FlatFileHeader: FlatFileHeader{
+               //                                      Format:    [4]byte{0x46, 0x49, 0x4c, 0x50}, // "FILP"
+               //                                      Version:   [2]byte{0, 1},
+               //                                      RSVD:      [16]byte{},
+               //                                      ForkCount: [2]byte{0, 3},
+               //                              },
+               //                              FlatFileInformationForkHeader: FlatFileForkHeader{},
+               //                              FlatFileInformationFork:       NewFlatFileInformationFork("testfile.txt", make([]byte, 8), "TEXT", "TEXT"),
+               //                              FlatFileDataForkHeader: FlatFileForkHeader{
+               //                                      ForkType:        [4]byte{0x44, 0x41, 0x54, 0x41}, // DATA
+               //                                      CompressionType: [4]byte{0, 0, 0, 0},
+               //                                      RSVD:            [4]byte{0, 0, 0, 0},
+               //                                      DataSize:        [4]byte{0x00, 0x00, 0x00, 0x03},
+               //                              },
+               //                              FlatFileResForkHeader: FlatFileForkHeader{
+               //                                      ForkType:        [4]byte{0x4d, 0x41, 0x43, 0x52}, // MACR
+               //                                      CompressionType: [4]byte{0, 0, 0, 0},
+               //                                      RSVD:            [4]byte{0, 0, 0, 0},
+               //                                      DataSize:        [4]byte{0x00, 0x00, 0x00, 0x03},
+               //                              },
+               //                      }
+               //                      fakeFileData := []byte{1, 2, 3}
+               //                      b := testFile.BinaryMarshal()
+               //                      b = append(b, fakeFileData...)
+               //                      return bytes.NewReader(b)
+               //              }(),
+               //      },
+               //      wantTargetFile:  []byte{1, 2, 3},
+               //      wantResForkFile: []byte(nil),
+               //
+               //      wantErr: assert.NoError,
+               // },
+       }
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       targetFile := &bytes.Buffer{}
+                       resForkFile := &bytes.Buffer{}
+                       infoForkFile := &bytes.Buffer{}
+                       err := receiveFile(tt.args.conn, targetFile, resForkFile, infoForkFile, io.Discard)
+                       if !tt.wantErr(t, err, fmt.Sprintf("receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)) {
+                               return
+                       }
+
+                       assert.Equalf(t, tt.wantTargetFile, targetFile.Bytes(), "receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)
+                       assert.Equalf(t, tt.wantResForkFile, resForkFile.Bytes(), "receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)
+               })
+       }
+}