mirror of
https://github.com/AvengeMedia/DankMaterialShell.git
synced 2026-10-14 23:34:01 -04:00
58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package netfetch
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestTransportIsSharedPerDialShape(t *testing.T) {
|
|
plain := Options{Timeout: time.Second}
|
|
require.Same(t, transportFor(plain), transportFor(plain))
|
|
require.Same(t, transportFor(plain), transportFor(Options{Timeout: time.Minute}))
|
|
require.NotSame(t, transportFor(plain), transportFor(Options{ConnectTimeout: 3 * time.Second}))
|
|
require.NotSame(t, transportFor(plain), transportFor(Options{IPv4Only: true}))
|
|
require.NotZero(t, transportFor(plain).IdleConnTimeout)
|
|
}
|
|
|
|
func TestRepeatedFetchesReuseOneConnection(t *testing.T) {
|
|
var mu sync.Mutex
|
|
var conns []string
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
mu.Lock()
|
|
conns = append(conns, r.RemoteAddr)
|
|
mu.Unlock()
|
|
w.Write([]byte("ok"))
|
|
}))
|
|
defer server.Close()
|
|
|
|
opts := Options{ConnectTimeout: 2 * time.Second, Timeout: 5 * time.Second}
|
|
for range 3 {
|
|
_, err := Bytes(context.Background(), server.URL, opts)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
require.Len(t, conns, 3)
|
|
require.Equal(t, conns[0], conns[1])
|
|
require.Equal(t, conns[0], conns[2])
|
|
}
|
|
|
|
func TestBytesConditionalMaxBytes(t *testing.T) {
|
|
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write(make([]byte, 2048))
|
|
}))
|
|
defer server.Close()
|
|
|
|
_, err := BytesConditional(context.Background(), server.URL, "", Options{Timeout: 5 * time.Second, MaxBytes: 1024})
|
|
require.Error(t, err)
|
|
|
|
res, err := BytesConditional(context.Background(), server.URL, "", Options{Timeout: 5 * time.Second, MaxBytes: 4096})
|
|
require.NoError(t, err)
|
|
require.Len(t, res.Body, 2048)
|
|
}
|