mirror of
				https://github.com/TeaOSLab/EdgeCommon.git
				synced 2025-11-04 13:10:24 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			1072 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			1072 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
package shared
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"fmt"
 | 
						|
	"github.com/iwind/TeaGo/assert"
 | 
						|
	"net"
 | 
						|
	"regexp"
 | 
						|
	"testing"
 | 
						|
)
 | 
						|
 | 
						|
func TestRequestCond_Compare1(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorRegexp,
 | 
						|
			Value:    "abc",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorRegexp,
 | 
						|
			Value:    "/\\w+",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/article/123.html",
 | 
						|
			Operator: RequestCondOperatorRegexp,
 | 
						|
			Value:    `^/article/\d+\.html$`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorRegexp,
 | 
						|
			Value:    "[",
 | 
						|
		}
 | 
						|
		a.IsNotNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorNotRegexp,
 | 
						|
			Value:    "abc",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorNotRegexp,
 | 
						|
			Value:    "/\\w+",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorWildcardMatch,
 | 
						|
			Value:    "/*",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorWildcardMatch,
 | 
						|
			Value:    "/*/world",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorWildcardMatch,
 | 
						|
			Value:    "/H*/world",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorWildcardMatch,
 | 
						|
			Value:    "/hello/*",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorWildcardNotMatch,
 | 
						|
			Value:    "/hello/*",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		var cond = HTTPRequestCond{
 | 
						|
			Param:    "/hello",
 | 
						|
			Operator: RequestCondOperatorWildcardNotMatch,
 | 
						|
			Value:    "/hello/*",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(format string) string {
 | 
						|
			return format
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123.123",
 | 
						|
			Operator: RequestCondOperatorEqInt,
 | 
						|
			Value:    "123",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123",
 | 
						|
			Operator: RequestCondOperatorEqInt,
 | 
						|
			Value:    "123",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "abc",
 | 
						|
			Operator: RequestCondOperatorEqInt,
 | 
						|
			Value:    "abc",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123",
 | 
						|
			Operator: RequestCondOperatorEqFloat,
 | 
						|
			Value:    "123",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123.0",
 | 
						|
			Operator: RequestCondOperatorEqFloat,
 | 
						|
			Value:    "123",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123.123",
 | 
						|
			Operator: RequestCondOperatorEqFloat,
 | 
						|
			Value:    "123.12",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123",
 | 
						|
			Operator: RequestCondOperatorGtFloat,
 | 
						|
			Value:    "1",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "123",
 | 
						|
			Operator: RequestCondOperatorGtFloat,
 | 
						|
			Value:    "125",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorGteFloat,
 | 
						|
			Value:    "125",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorLtFloat,
 | 
						|
			Value:    "127",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorLteFloat,
 | 
						|
			Value:    "127",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorEqString,
 | 
						|
			Value:    "125",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorNeqString,
 | 
						|
			Value:    "125",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "125",
 | 
						|
			Operator: RequestCondOperatorNeqString,
 | 
						|
			Value:    "127",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorHasPrefix,
 | 
						|
			Value:    "/hello",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorHasPrefix,
 | 
						|
			Value:    "/hello2",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorHasSuffix,
 | 
						|
			Value:    "world",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorHasSuffix,
 | 
						|
			Value:    "world/",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorContainsString,
 | 
						|
			Value:    "wo",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorContainsString,
 | 
						|
			Value:    "wr",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorNotContainsString,
 | 
						|
			Value:    "HELLO",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "/hello/world",
 | 
						|
			Operator: RequestCondOperatorNotContainsString,
 | 
						|
			Value:    "hello",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_IP(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "hello",
 | 
						|
			Operator: RequestCondOperatorEqIP,
 | 
						|
			Value:    "hello",
 | 
						|
		}
 | 
						|
		a.IsNotNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorEqIP,
 | 
						|
			Value:    "hello",
 | 
						|
		}
 | 
						|
		a.IsNotNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorEqIP,
 | 
						|
			Value:    "192.168.1.100",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorGtIP,
 | 
						|
			Value:    "192.168.1.90",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorGteIP,
 | 
						|
			Value:    "192.168.1.90",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.80",
 | 
						|
			Operator: RequestCondOperatorLtIP,
 | 
						|
			Value:    "192.168.1.90",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.0.100",
 | 
						|
			Operator: RequestCondOperatorLteIP,
 | 
						|
			Value:    "192.168.1.90",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.0.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "192.168.0.90,",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.0.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "192.168.0.90,192.168.1.100",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.0.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    ",192.168.1.100",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "192.168.0.90,192.168.1.99",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "192.168.0.90/24",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "192.168.0.90/18",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPRange,
 | 
						|
			Value:    "a/18",
 | 
						|
		}
 | 
						|
		a.IsNotNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPMod10,
 | 
						|
			Value:    "6",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPMod100,
 | 
						|
			Value:    "76",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "192.168.1.100",
 | 
						|
			Operator: RequestCondOperatorIPMod,
 | 
						|
			Value:    "10,6",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCondIPCompare(t *testing.T) {
 | 
						|
	{
 | 
						|
		ip1 := net.ParseIP("192.168.3.100")
 | 
						|
		ip2 := net.ParseIP("192.168.2.100")
 | 
						|
		t.Log(bytes.Compare(ip1, ip2))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		ip1 := net.ParseIP("192.168.3.100")
 | 
						|
		ip2 := net.ParseIP("a")
 | 
						|
		t.Log(bytes.Compare(ip1, ip2))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		ip1 := net.ParseIP("b")
 | 
						|
		ip2 := net.ParseIP("192.168.2.100")
 | 
						|
		t.Log(bytes.Compare(ip1, ip2))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		ip1 := net.ParseIP("b")
 | 
						|
		ip2 := net.ParseIP("a")
 | 
						|
		t.Log(ip1 == nil)
 | 
						|
		t.Log(bytes.Compare(ip1, ip2))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{}
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("192.168.1.100")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("192.168.1.99")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("0.0.0.0")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("127.0.0.1")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("abc")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("192.168")))
 | 
						|
		t.Log(cond.ipToInt64(net.ParseIP("2001:0db8:0000:0000:0000:ff00:0042:8329")))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_In(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a",
 | 
						|
			Operator: RequestCondOperatorIn,
 | 
						|
			Value:    `a`,
 | 
						|
		}
 | 
						|
		a.IsNotNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a",
 | 
						|
			Operator: RequestCondOperatorIn,
 | 
						|
			Value:    `["a", "b"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "c",
 | 
						|
			Operator: RequestCondOperatorNotIn,
 | 
						|
			Value:    `["a", "b"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a",
 | 
						|
			Operator: RequestCondOperatorNotIn,
 | 
						|
			Value:    `["a", "b"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_File(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a",
 | 
						|
			Operator: RequestCondOperatorFileExt,
 | 
						|
			Value:    `["jpeg", "jpg", "png"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a.gif",
 | 
						|
			Operator: RequestCondOperatorFileExt,
 | 
						|
			Value:    `["jpeg", "jpg", "png"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a.png",
 | 
						|
			Operator: RequestCondOperatorFileExt,
 | 
						|
			Value:    `["jpeg", "jpg", "png"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	/**{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a.png",
 | 
						|
			Operator: RequestCondOperatorFileExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    Tea.Root + "/README.md",
 | 
						|
			Operator: RequestCondOperatorFileExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    Tea.Root + "/README.md?v=1",
 | 
						|
			Operator: RequestCondOperatorFileExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    Tea.Root,
 | 
						|
			Operator: RequestCondOperatorFileExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    Tea.Root,
 | 
						|
			Operator: RequestCondOperatorFileExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "a.png",
 | 
						|
			Operator: RequestCondOperatorFileNotExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    Tea.Root + "/README.md",
 | 
						|
			Operator: RequestCondOperatorFileNotExist,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}**/
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_MimeType(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "text/html; charset=utf-8",
 | 
						|
			Operator: RequestCondOperatorFileMimeType,
 | 
						|
			Value:    `["text/html"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "text/html; charset=utf-8",
 | 
						|
			Operator: RequestCondOperatorFileMimeType,
 | 
						|
			Value:    `["text/*"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "text/html; charset=utf-8",
 | 
						|
			Operator: RequestCondOperatorFileMimeType,
 | 
						|
			Value:    `["image/*"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "text/plain; charset=utf-8",
 | 
						|
			Operator: RequestCondOperatorFileMimeType,
 | 
						|
			Value:    `["text/html", "image/jpeg", "image/png"]`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_Version(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1.0",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `1.0,1.1`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1.0",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `1.0,`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1.0",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `,1.1`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "0.9",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `1.0,1.1`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "0.9",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `1.0`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1.1",
 | 
						|
			Operator: RequestCondOperatorVersionRange,
 | 
						|
			Value:    `1.0`,
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_RegexpQuote(t *testing.T) {
 | 
						|
	t.Log(regexp.QuoteMeta("a"))
 | 
						|
	t.Log(regexp.QuoteMeta("*"))
 | 
						|
	t.Log(regexp.QuoteMeta("([\\d]).*"))
 | 
						|
}
 | 
						|
 | 
						|
func TestRequestCond_Mod(t *testing.T) {
 | 
						|
	a := assert.NewAssertion(t)
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "1",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "2",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsFalse(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "3",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "3",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "1",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "11,1",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "3",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "11,3",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	{
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    "4",
 | 
						|
			Operator: RequestCondOperatorMod,
 | 
						|
			Value:    "2,0",
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	for i := 0; i < 100; i++ {
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    fmt.Sprintf("%d", i),
 | 
						|
			Operator: RequestCondOperatorMod10,
 | 
						|
			Value:    fmt.Sprintf("%d", i%10),
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
 | 
						|
	for i := 0; i < 2000; i++ {
 | 
						|
		cond := HTTPRequestCond{
 | 
						|
			Param:    fmt.Sprintf("%d", i),
 | 
						|
			Operator: RequestCondOperatorMod100,
 | 
						|
			Value:    fmt.Sprintf("%d", i%100),
 | 
						|
		}
 | 
						|
		a.IsNil(cond.Init())
 | 
						|
		a.IsTrue(cond.Match(func(source string) string {
 | 
						|
			return source
 | 
						|
		}))
 | 
						|
	}
 | 
						|
}
 |