forked from TrueCloudLab/frostfs-http-gw
[#128] downloader: Simplify detecting the Content-Type from payload
Signed-off-by: Leonard Lyubich <leonard@nspcc.ru>
This commit is contained in:
parent
f55edbb613
commit
271451dc32
3 changed files with 70 additions and 140 deletions
|
@ -1,8 +1,6 @@
|
|||
package downloader
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"testing"
|
||||
|
@ -10,40 +8,6 @@ import (
|
|||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestReader(t *testing.T) {
|
||||
data := []byte("test string")
|
||||
err := fmt.Errorf("something wrong")
|
||||
|
||||
for _, tc := range []struct {
|
||||
err error
|
||||
buff []byte
|
||||
}{
|
||||
{err: nil, buff: make([]byte, len(data)+1)},
|
||||
{err: nil, buff: make([]byte, len(data))},
|
||||
{err: nil, buff: make([]byte, len(data)-1)},
|
||||
{err: err, buff: make([]byte, len(data)+1)},
|
||||
{err: err, buff: make([]byte, len(data))},
|
||||
{err: err, buff: make([]byte, len(data)-1)},
|
||||
} {
|
||||
var res []byte
|
||||
var err error
|
||||
var n int
|
||||
|
||||
r := newReader(data, tc.err)
|
||||
for err == nil {
|
||||
n, err = r.Read(tc.buff)
|
||||
res = append(res, tc.buff[:n]...)
|
||||
}
|
||||
|
||||
if tc.err == nil {
|
||||
require.Equal(t, io.EOF, err)
|
||||
} else {
|
||||
require.Equal(t, tc.err, err)
|
||||
}
|
||||
require.Equal(t, data, res)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDetector(t *testing.T) {
|
||||
txtContentType := "text/plain; charset=utf-8"
|
||||
sb := strings.Builder{}
|
||||
|
@ -68,19 +32,15 @@ func TestDetector(t *testing.T) {
|
|||
},
|
||||
} {
|
||||
t.Run(tc.Name, func(t *testing.T) {
|
||||
detector := newDetector()
|
||||
contentType, data, err := readContentType(uint64(len(tc.Expected)),
|
||||
func(sz uint64) (io.Reader, error) {
|
||||
return strings.NewReader(tc.Expected), nil
|
||||
},
|
||||
)
|
||||
|
||||
go func() {
|
||||
detector.SetReader(bytes.NewBufferString(tc.Expected))
|
||||
detector.Detect()
|
||||
}()
|
||||
|
||||
detector.Wait()
|
||||
require.Equal(t, tc.ContentType, detector.contentType)
|
||||
|
||||
data, err := io.ReadAll(detector.MultiReader())
|
||||
require.NoError(t, err)
|
||||
require.Equal(t, tc.Expected, string(data))
|
||||
require.Equal(t, tc.ContentType, contentType)
|
||||
require.True(t, strings.HasPrefix(tc.Expected, string(data)))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue