| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- package router_test
- import (
- "reflect"
- "testing"
- "github.com/xtls/xray-core/app/router"
- )
- func TestWeight(t *testing.T) {
- manager := router.NewWeightManager(
- []*router.StrategyWeight{
- {
- Match: "x5",
- Value: 100,
- },
- {
- Match: "x8",
- },
- {
- Regexp: true,
- Match: `\bx0+(\.\d+)?\b`,
- Value: 1,
- },
- {
- Regexp: true,
- Match: `\bx\d+(\.\d+)?\b`,
- },
- },
- 1, func(v, w float64) float64 {
- return v * w
- },
- )
- tags := []string{
- "node name, x5, and more",
- "node name, x8",
- "node name, x15",
- "node name, x0100, and more",
- "node name, x10.1",
- "node name, x00.1, and more",
- }
- // test weight
- expected := []float64{100, 8, 15, 100, 10.1, 1}
- actual := make([]float64, 0)
- for _, tag := range tags {
- actual = append(actual, manager.Get(tag))
- }
- if !reflect.DeepEqual(expected, actual) {
- t.Errorf("expected: %v, actual: %v", expected, actual)
- }
- // test scale
- expected2 := []float64{1000, 80, 150, 1000, 101, 10}
- actual2 := make([]float64, 0)
- for _, tag := range tags {
- actual2 = append(actual2, manager.Apply(tag, 10))
- }
- if !reflect.DeepEqual(expected2, actual2) {
- t.Errorf("expected2: %v, actual2: %v", expected2, actual2)
- }
- }
|