move gotd fork into repo. (#111)
- update to latest telegram layer - remove some references to fields in tg.Entities that don't exist in the schema - originally added here: https://github.com/beeper/td/commit/820929062a2ba0104397bc01235ab58a9cff780e - referenced here - https://github.com/mautrix/telegramgo/commit/124f0967ed195b5a380c9bd02e170ada9710dde3 - https://github.com/mautrix/telegramgo/commit/4205047aab2e0639217148b5d125bfaab668bd8e
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
package tdesktop
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"io"
|
||||
"io/fs"
|
||||
"testing"
|
||||
"testing/fstest"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
var (
|
||||
testBytes = bytes.Repeat([]byte("abcd"), 4)
|
||||
zeros = make([]byte, 32)
|
||||
)
|
||||
|
||||
func Test_open(t *testing.T) {
|
||||
b := bytes.NewBuffer(nil)
|
||||
if err := writeFile(b, testBytes, [4]byte{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
fs fs.FS
|
||||
fileName string
|
||||
wantErr bool
|
||||
}{
|
||||
{"Empty", fstest.MapFS{}, "testfile", true},
|
||||
{"SkipInvalidLength", fstest.MapFS{
|
||||
// open should skip first file and read next
|
||||
"testfile0": &fstest.MapFile{
|
||||
Data: zeros[:4],
|
||||
},
|
||||
"testfile1": &fstest.MapFile{
|
||||
Data: b.Bytes(),
|
||||
},
|
||||
}, "testfile", false},
|
||||
{"SkipInvalidMagic", fstest.MapFS{
|
||||
// open should skip first file and read next
|
||||
"testfile0": &fstest.MapFile{
|
||||
Data: zeros,
|
||||
},
|
||||
"testfile1": &fstest.MapFile{
|
||||
Data: b.Bytes(),
|
||||
},
|
||||
}, "testfile", false},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
a := require.New(t)
|
||||
if _, err := open(tt.fs, tt.fileName); tt.wantErr {
|
||||
a.Error(err)
|
||||
} else {
|
||||
a.NoError(err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_fromFile(t *testing.T) {
|
||||
justBytes := func(data []byte, datas ...[]byte) func() io.Reader {
|
||||
return func() (r io.Reader) {
|
||||
r = bytes.NewReader(data)
|
||||
for _, d := range datas {
|
||||
r = io.MultiReader(r, bytes.NewReader(d))
|
||||
}
|
||||
return r
|
||||
}
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
data func() io.Reader
|
||||
wantErr bool
|
||||
}{
|
||||
{"Empty", justBytes(nil), true},
|
||||
{"InvalidMagic", justBytes(zeros), true},
|
||||
{"InvalidLength", justBytes(tdesktopFileMagic[:], zeros[:8]), true},
|
||||
{"InvalidHash", justBytes(tdesktopFileMagic[:], zeros), true},
|
||||
{"WriteFile", func() io.Reader {
|
||||
b := bytes.NewBuffer(nil)
|
||||
if err := writeFile(b, testBytes, [4]byte{}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return b
|
||||
}, false},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
a := require.New(t)
|
||||
if r, err := fromFile(tt.data()); tt.wantErr {
|
||||
a.Error(err)
|
||||
} else {
|
||||
a.NoError(err)
|
||||
a.Equal(testBytes, r.data)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func Test_telegramFileHash(t *testing.T) {
|
||||
data := bytes.Repeat([]byte{'a'}, 100)
|
||||
expected := [16]uint8{
|
||||
0xa8, 0xa9, 0xa1, 0x38,
|
||||
0xcf, 0x32, 0x37, 0xa9,
|
||||
0x4b, 0x78, 0xd0, 0x2d,
|
||||
0x03, 0xe0, 0x16, 0x81,
|
||||
}
|
||||
require.Equal(t, expected, telegramFileHash(data, [4]byte{0, 0, 0, 1}))
|
||||
}
|
||||
|
||||
func Test_readArray(t *testing.T) {
|
||||
var validData bytes.Buffer
|
||||
if err := writeArray(&validData, testBytes, binary.LittleEndian); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
data []byte
|
||||
expect []byte
|
||||
order binary.ByteOrder
|
||||
wantErr bool
|
||||
}{
|
||||
{"LengthEOF", nil, nil, binary.LittleEndian, true},
|
||||
{"DataEOF", []byte{255, 0, 0, 0}, nil, binary.LittleEndian, true},
|
||||
{"OK", validData.Bytes(), testBytes, binary.LittleEndian, false},
|
||||
{"0xffffffff", []byte{0xff, 0xff, 0xff, 0xff}, nil, binary.LittleEndian, false},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
a := require.New(t)
|
||||
if data, n, err := readArray(tt.data, tt.order); tt.wantErr {
|
||||
a.Error(err)
|
||||
} else {
|
||||
a.NoError(err)
|
||||
a.Equal(len(tt.expect)+4, n)
|
||||
a.Equal(tt.expect, data)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user