mirror of
https://github.com/TeaOSLab/EdgeNode.git
synced 2025-11-05 09:30:26 +08:00
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
|
|
// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||
|
|
|
||
|
|
package readers_test
|
||
|
|
|
||
|
|
import (
|
||
|
|
"bytes"
|
||
|
|
"fmt"
|
||
|
|
"github.com/TeaOSLab/EdgeNode/internal/utils/readers"
|
||
|
|
"io"
|
||
|
|
"io/ioutil"
|
||
|
|
"net/textproto"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestNewByteRangesReader(t *testing.T) {
|
||
|
|
var boundary = "7143cd51d2ee12a1"
|
||
|
|
var dashBoundary = "--" + boundary
|
||
|
|
var b = bytes.NewReader([]byte(dashBoundary + "\r\nContent-Range: bytes 0-4/36\r\nContent-Type: text/plain\r\n\r\n01234\r\n" + dashBoundary + "\r\nContent-Range: bytes 5-9/36\r\nContent-Type: text/plain\r\n\r\n56789\r\n--" + boundary + "\r\nContent-Range: bytes 10-12/36\r\nContent-Type: text/plain\r\n\r\nabc\r\n" + dashBoundary + "--\r\n"))
|
||
|
|
|
||
|
|
var reader = readers.NewByteRangesReaderCloser(ioutil.NopCloser(b), boundary)
|
||
|
|
var p = make([]byte, 16)
|
||
|
|
for {
|
||
|
|
n, err := reader.Read(p)
|
||
|
|
if n > 0 {
|
||
|
|
fmt.Print(string(p[:n]))
|
||
|
|
}
|
||
|
|
if err != nil {
|
||
|
|
if err != io.EOF {
|
||
|
|
t.Fatal(err)
|
||
|
|
}
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestByteRangesReader_OnPartRead(t *testing.T) {
|
||
|
|
var boundary = "7143cd51d2ee12a1"
|
||
|
|
var dashBoundary = "--" + boundary
|
||
|
|
var b = bytes.NewReader([]byte(dashBoundary + "\r\nContent-Range: bytes 0-4/36\r\nContent-Type: text/plain\r\n\r\n01234\r\n" + dashBoundary + "\r\nContent-Range: bytes 5-9/36\r\nContent-Type: text/plain\r\n\r\n56789\r\n--" + boundary + "\r\nContent-Range: bytes 10-12/36\r\nContent-Type: text/plain\r\n\r\nabc\r\n" + dashBoundary + "--\r\n"))
|
||
|
|
|
||
|
|
var reader = readers.NewByteRangesReaderCloser(ioutil.NopCloser(b), boundary)
|
||
|
|
reader.OnPartRead(func(start int64, end int64, total int64, data []byte, header textproto.MIMEHeader) {
|
||
|
|
t.Log(start, "-", end, "/", total, string(data))
|
||
|
|
})
|
||
|
|
var p = make([]byte, 3)
|
||
|
|
for {
|
||
|
|
_, err := reader.Read(p)
|
||
|
|
if err != nil {
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|