7a04f298d2
- 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
147 lines
3.2 KiB
Go
147 lines
3.2 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|