Files
core/http/middleware/session/session_test.go
2024-10-10 16:35:39 +02:00

165 lines
4.6 KiB
Go

package session
import (
"net/http"
"testing"
"github.com/datarhei/core/v16/encoding/json"
"github.com/datarhei/core/v16/mem"
"github.com/stretchr/testify/require"
)
func TestVerifySession(t *testing.T) {
jsondata := []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**",
"remote": [
"foo.example.com"
]
}`)
var rawdata interface{}
err := json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://foo.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://bar.example.com")
require.Error(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-0000-963869718d8d/main.m3u8", "http://foo.example.com")
require.Error(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "")
require.Error(t, err)
}
func TestVerifySessionNoRemote(t *testing.T) {
jsondata := []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**",
"remote": []
}`)
var rawdata interface{}
err := json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://cm.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "")
require.NoError(t, err)
jsondata = []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**"
}`)
err = json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://cm.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "")
require.NoError(t, err)
}
func TestVerifySessionWildcardRemote(t *testing.T) {
jsondata := []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**",
"remote": [
"*.example.com"
]
}`)
var rawdata interface{}
err := json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://foo.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://bar.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://sub.bar.example.com")
require.Error(t, err)
}
func TestVerifySessionSuperWildcardRemote(t *testing.T) {
jsondata := []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**",
"remote": [
"**.example.com"
]
}`)
var rawdata interface{}
err := json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://foo.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://bar.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://sub.bar.example.com")
require.NoError(t, err)
}
func TestVerifySessionMultipleRemote(t *testing.T) {
jsondata := []byte(`{
"match": "/memfs/6faad99a-c440-4df1-9344-963869718d8d/**",
"remote": [
"foo.example.com",
"bar.otherdomain.com"
]
}`)
var rawdata interface{}
err := json.Unmarshal(jsondata, &rawdata)
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://foo.example.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://bar.otherdomain.com")
require.NoError(t, err)
_, err = verifySession(rawdata, "/memfs/6faad99a-c440-4df1-9344-963869718d8d/main.m3u8", "http://bar.example.com")
require.Error(t, err)
}
func TestHeaderSize(t *testing.T) {
header := http.Header{}
header.Add("Content-Type", "application/json")
header.Add("Content-Encoding", "gzip")
buffer := &mem.Buffer{}
size := headerSize(header, buffer)
require.Equal(t, "Content-Encoding: gzip\r\nContent-Type: application/json\r\n", buffer.String())
require.Equal(t, int64(56), size)
}
func BenchmarkHeaderSize(b *testing.B) {
header := http.Header{}
header.Add("Content-Type", "application/json")
header.Add("Content-Encoding", "gzip")
buffer := &mem.Buffer{}
for i := 0; i < b.N; i++ {
headerSize(header, buffer)
}
}