]> git.r.bdr.sh - rbdr/mobius/blame - hotline/transfer_test.go
patch: v0.10.18
[rbdr/mobius] / hotline / transfer_test.go
CommitLineData
6988a057
JH
1package hotline
2
481631f6
JH
3import (
4 "bytes"
5 "fmt"
6 "github.com/stretchr/testify/assert"
7 "io"
8 "testing"
9)
6988a057 10
df2735b2
JH
11func TestTransfer_Read(t *testing.T) {
12 type fields struct {
13 Protocol [4]byte
14 ReferenceNumber [4]byte
15 DataSize [4]byte
16 RSVD [4]byte
17 }
18 type args struct {
19 b []byte
20 }
21 tests := []struct {
22 name string
23 fields fields
24 args args
25 want int
26 wantErr bool
27 }{
28 {
29 name: "when b is a valid transfer",
30 fields: fields{
31 Protocol: [4]byte{},
32 ReferenceNumber: [4]byte{},
33 DataSize: [4]byte{},
34 RSVD: [4]byte{},
35 },
36 args: args{
37 b: []byte{
38 0x48, 0x54, 0x58, 0x46,
39 0x00, 0x00, 0x00, 0x01,
40 0x00, 0x00, 0x00, 0x02,
41 0x00, 0x00, 0x00, 0x00,
42 },
43 },
44 want: 16,
45 wantErr: false,
46 },
47 {
48 name: "when b contains invalid transfer protocol",
49 fields: fields{
50 Protocol: [4]byte{},
51 ReferenceNumber: [4]byte{},
52 DataSize: [4]byte{},
53 RSVD: [4]byte{},
54 },
55 args: args{
56 b: []byte{
57 0x11, 0x11, 0x11, 0x11,
58 0x00, 0x00, 0x00, 0x01,
59 0x00, 0x00, 0x00, 0x02,
60 0x00, 0x00, 0x00, 0x00,
61 },
62 },
63 want: 0,
64 wantErr: true,
65 },
66 {
67 name: "when b does not contain expected len of bytes",
68 fields: fields{
69 Protocol: [4]byte{},
70 ReferenceNumber: [4]byte{},
71 DataSize: [4]byte{},
72 RSVD: [4]byte{},
73 },
74 args: args{
75 b: []byte{
76 0x48, 0x54, 0x58, 0x46,
77 0x00, 0x00, 0x00, 0x01,
78 0x00, 0x00, 0x00, 0x02,
79 0x00, 0x00, 0x00,
80 },
81 },
82 want: 0,
83 wantErr: true,
84 },
85 }
86 for _, tt := range tests {
87 t.Run(tt.name, func(t *testing.T) {
88 tf := &transfer{
89 Protocol: tt.fields.Protocol,
90 ReferenceNumber: tt.fields.ReferenceNumber,
91 DataSize: tt.fields.DataSize,
92 RSVD: tt.fields.RSVD,
93 }
94 got, err := tf.Write(tt.args.b)
95 if (err != nil) != tt.wantErr {
96 t.Errorf("Read() error = %v, wantErr %v", err, tt.wantErr)
97 return
98 }
99 if got != tt.want {
100 t.Errorf("Read() got = %v, want %v", got, tt.want)
101 }
102 })
103 }
6988a057 104}
481631f6
JH
105
106func Test_receiveFile(t *testing.T) {
107 type args struct {
108 conn io.Reader
109 }
110 tests := []struct {
111 name string
112 args args
113 wantTargetFile []byte
114 wantResForkFile []byte
115 wantErr assert.ErrorAssertionFunc
116 }{
117 {
7cd900d6 118 name: "transfers file when there is no resource fork",
481631f6
JH
119 args: args{
120 conn: func() io.Reader {
121 testFile := flattenedFileObject{
7cd900d6
JH
122 FlatFileHeader: FlatFileHeader{
123 Format: [4]byte{0x46, 0x49, 0x4c, 0x50}, // "FILP"
124 Version: [2]byte{0, 1},
125 RSVD: [16]byte{},
126 ForkCount: [2]byte{0, 2},
127 },
128 FlatFileInformationForkHeader: FlatFileForkHeader{},
2d52424e 129 FlatFileInformationFork: NewFlatFileInformationFork("testfile.txt", make([]byte, 8), "TEXT", "TEXT"),
7cd900d6 130 FlatFileDataForkHeader: FlatFileForkHeader{
481631f6
JH
131 ForkType: [4]byte{0x4d, 0x41, 0x43, 0x52}, // DATA
132 CompressionType: [4]byte{0, 0, 0, 0},
133 RSVD: [4]byte{0, 0, 0, 0},
134 DataSize: [4]byte{0x00, 0x00, 0x00, 0x03},
135 },
481631f6
JH
136 }
137 fakeFileData := []byte{1, 2, 3}
138 b := testFile.BinaryMarshal()
139 b = append(b, fakeFileData...)
140 return bytes.NewReader(b)
141 }(),
142 },
143 wantTargetFile: []byte{1, 2, 3},
144 wantResForkFile: []byte(nil),
145
146 wantErr: assert.NoError,
147 },
7cd900d6
JH
148 // {
149 // name: "transfers fileWrapper when there is a resource fork",
150 // args: args{
151 // conn: func() io.Reader {
152 // testFile := flattenedFileObject{
153 // FlatFileHeader: FlatFileHeader{
154 // Format: [4]byte{0x46, 0x49, 0x4c, 0x50}, // "FILP"
155 // Version: [2]byte{0, 1},
156 // RSVD: [16]byte{},
157 // ForkCount: [2]byte{0, 3},
158 // },
159 // FlatFileInformationForkHeader: FlatFileForkHeader{},
160 // FlatFileInformationFork: NewFlatFileInformationFork("testfile.txt", make([]byte, 8), "TEXT", "TEXT"),
161 // FlatFileDataForkHeader: FlatFileForkHeader{
162 // ForkType: [4]byte{0x44, 0x41, 0x54, 0x41}, // DATA
163 // CompressionType: [4]byte{0, 0, 0, 0},
164 // RSVD: [4]byte{0, 0, 0, 0},
165 // DataSize: [4]byte{0x00, 0x00, 0x00, 0x03},
166 // },
167 // FlatFileResForkHeader: FlatFileForkHeader{
168 // ForkType: [4]byte{0x4d, 0x41, 0x43, 0x52}, // MACR
169 // CompressionType: [4]byte{0, 0, 0, 0},
170 // RSVD: [4]byte{0, 0, 0, 0},
171 // DataSize: [4]byte{0x00, 0x00, 0x00, 0x03},
172 // },
173 // }
174 // fakeFileData := []byte{1, 2, 3}
175 // b := testFile.BinaryMarshal()
176 // b = append(b, fakeFileData...)
177 // return bytes.NewReader(b)
178 // }(),
179 // },
180 // wantTargetFile: []byte{1, 2, 3},
181 // wantResForkFile: []byte(nil),
182 //
183 // wantErr: assert.NoError,
184 // },
481631f6
JH
185 }
186 for _, tt := range tests {
187 t.Run(tt.name, func(t *testing.T) {
188 targetFile := &bytes.Buffer{}
189 resForkFile := &bytes.Buffer{}
7cd900d6 190 infoForkFile := &bytes.Buffer{}
df1ade54 191 err := receiveFile(tt.args.conn, targetFile, resForkFile, infoForkFile, io.Discard)
481631f6
JH
192 if !tt.wantErr(t, err, fmt.Sprintf("receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)) {
193 return
194 }
195
196 assert.Equalf(t, tt.wantTargetFile, targetFile.Bytes(), "receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)
197 assert.Equalf(t, tt.wantResForkFile, resForkFile.Bytes(), "receiveFile(%v, %v, %v)", tt.args.conn, targetFile, resForkFile)
198 })
199 }
200}