187 lines
3.5 KiB
Go
187 lines
3.5 KiB
Go
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
|
|
//go:build plus
|
|
|
|
package minifiers_test
|
|
|
|
import (
|
|
"bytes"
|
|
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs"
|
|
"github.com/TeaOSLab/EdgeNode/internal/utils/minifiers"
|
|
"io"
|
|
"net/http"
|
|
"runtime"
|
|
"testing"
|
|
)
|
|
|
|
func TestMinifyResponse_HTML(t *testing.T) {
|
|
var resp = &http.Response{
|
|
Header: map[string][]string{
|
|
"Content-Type": []string{"text/html"},
|
|
},
|
|
}
|
|
var s = []byte(`
|
|
<!DOCTYPE html>
|
|
<html lang="zh">
|
|
<head>
|
|
<title>GoEdge管理员系统</title>
|
|
<meta charset="UTF-8"/>
|
|
</head>
|
|
<body>
|
|
|
|
<div>
|
|
<a href="https://example.com">Example.com</a>
|
|
</div>
|
|
|
|
</body>
|
|
</html>`)
|
|
resp.ContentLength = int64(len(s))
|
|
resp.Body = io.NopCloser(bytes.NewReader(s))
|
|
|
|
var config = &serverconfigs.HTTPPageOptimizationConfig{}
|
|
config.HTML = &serverconfigs.HTTPHTMLOptimizationConfig{
|
|
IsOn: true,
|
|
}
|
|
err := config.Init()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log("isOn:", config.IsOn())
|
|
|
|
err = minifiers.MinifyResponse(config, "", resp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(string(data))
|
|
}
|
|
|
|
func TestMinifyResponse_Javascript(t *testing.T) {
|
|
var resp = &http.Response{
|
|
Header: map[string][]string{
|
|
"Content-Type": []string{"text/javascript"},
|
|
},
|
|
}
|
|
var s = []byte(`(function () {
|
|
function sayHello(name) {
|
|
console.log("Hello, ", name)
|
|
}
|
|
|
|
sayHello("lily")
|
|
})()`)
|
|
resp.ContentLength = int64(len(s))
|
|
resp.Body = io.NopCloser(bytes.NewReader(s))
|
|
|
|
var config = &serverconfigs.HTTPPageOptimizationConfig{}
|
|
config.Javascript = &serverconfigs.HTTPJavascriptOptimizationConfig{
|
|
IsOn: true,
|
|
}
|
|
err := config.Init()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log("isOn:", config.IsOn())
|
|
|
|
err = minifiers.MinifyResponse(config, "", resp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(string(data))
|
|
}
|
|
|
|
func TestMinifyResponse_CSS(t *testing.T) {
|
|
var resp = &http.Response{
|
|
Header: map[string][]string{
|
|
"Content-Type": []string{"text/css"},
|
|
},
|
|
}
|
|
var s = []byte(`
|
|
form {
|
|
margin: 10em auto;
|
|
text-align: center;
|
|
}`)
|
|
resp.ContentLength = int64(len(s))
|
|
resp.Body = io.NopCloser(bytes.NewReader(s))
|
|
|
|
var config = &serverconfigs.HTTPPageOptimizationConfig{}
|
|
config.CSS = &serverconfigs.HTTPCSSOptimizationConfig{
|
|
IsOn: true,
|
|
}
|
|
err := config.Init()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log("isOn:", config.IsOn())
|
|
|
|
err = minifiers.MinifyResponse(config, "", resp)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Log(string(data))
|
|
}
|
|
|
|
func BenchmarkMinifyResponse(b *testing.B) {
|
|
runtime.GOMAXPROCS(4)
|
|
|
|
var config = &serverconfigs.HTTPPageOptimizationConfig{}
|
|
config.HTML = &serverconfigs.HTTPHTMLOptimizationConfig{
|
|
IsOn: true,
|
|
}
|
|
err := config.Init()
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
b.ResetTimer()
|
|
|
|
b.RunParallel(func(pb *testing.PB) {
|
|
for pb.Next() {
|
|
var resp = &http.Response{
|
|
Header: map[string][]string{
|
|
"Content-Type": []string{"text/html"},
|
|
},
|
|
}
|
|
var s = []byte(`
|
|
<!DOCTYPE html>
|
|
<html lang="zh">
|
|
<head>
|
|
<title>GoEdge管理员系统</title>
|
|
<meta charset="UTF-8"/>
|
|
</head>
|
|
<body>
|
|
|
|
<div>
|
|
<a href="https://example.com">Example.com</a>
|
|
</div>
|
|
|
|
</body>
|
|
</html>`)
|
|
resp.ContentLength = int64(len(s))
|
|
resp.Body = io.NopCloser(bytes.NewReader(s))
|
|
|
|
err = minifiers.MinifyResponse(config, "", resp)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
|
|
data, err := io.ReadAll(resp.Body)
|
|
if err != nil {
|
|
b.Fatal(err)
|
|
}
|
|
_ = data
|
|
}
|
|
})
|
|
}
|