github.com/EagleQL/Xray-core@v1.4.3/infra/conf/router_test.go (about) 1 package conf_test 2 3 import ( 4 "encoding/json" 5 "testing" 6 7 "github.com/golang/protobuf/proto" 8 9 "github.com/xtls/xray-core/app/router" 10 "github.com/xtls/xray-core/common/net" 11 . "github.com/xtls/xray-core/infra/conf" 12 ) 13 14 func TestRouterConfig(t *testing.T) { 15 createParser := func() func(string) (proto.Message, error) { 16 return func(s string) (proto.Message, error) { 17 config := new(RouterConfig) 18 if err := json.Unmarshal([]byte(s), config); err != nil { 19 return nil, err 20 } 21 return config.Build() 22 } 23 } 24 25 runMultiTestCase(t, []TestCase{ 26 { 27 Input: `{ 28 "strategy": "rules", 29 "settings": { 30 "domainStrategy": "AsIs", 31 "rules": [ 32 { 33 "type": "field", 34 "domain": [ 35 "baidu.com", 36 "qq.com" 37 ], 38 "outboundTag": "direct" 39 }, 40 { 41 "type": "field", 42 "ip": [ 43 "10.0.0.0/8", 44 "::1/128" 45 ], 46 "outboundTag": "test" 47 },{ 48 "type": "field", 49 "port": "53, 443, 1000-2000", 50 "outboundTag": "test" 51 },{ 52 "type": "field", 53 "port": 123, 54 "outboundTag": "test" 55 } 56 ] 57 }, 58 "balancers": [ 59 { 60 "tag": "b1", 61 "selector": ["test"] 62 } 63 ] 64 }`, 65 Parser: createParser(), 66 Output: &router.Config{ 67 DomainStrategy: router.Config_AsIs, 68 BalancingRule: []*router.BalancingRule{ 69 { 70 Tag: "b1", 71 OutboundSelector: []string{"test"}, 72 }, 73 }, 74 Rule: []*router.RoutingRule{ 75 { 76 Domain: []*router.Domain{ 77 { 78 Type: router.Domain_Plain, 79 Value: "baidu.com", 80 }, 81 { 82 Type: router.Domain_Plain, 83 Value: "qq.com", 84 }, 85 }, 86 TargetTag: &router.RoutingRule_Tag{ 87 Tag: "direct", 88 }, 89 }, 90 { 91 Geoip: []*router.GeoIP{ 92 { 93 Cidr: []*router.CIDR{ 94 { 95 Ip: []byte{10, 0, 0, 0}, 96 Prefix: 8, 97 }, 98 { 99 Ip: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 100 Prefix: 128, 101 }, 102 }, 103 }, 104 }, 105 TargetTag: &router.RoutingRule_Tag{ 106 Tag: "test", 107 }, 108 }, 109 { 110 PortList: &net.PortList{ 111 Range: []*net.PortRange{ 112 {From: 53, To: 53}, 113 {From: 443, To: 443}, 114 {From: 1000, To: 2000}, 115 }, 116 }, 117 TargetTag: &router.RoutingRule_Tag{ 118 Tag: "test", 119 }, 120 }, 121 { 122 PortList: &net.PortList{ 123 Range: []*net.PortRange{ 124 {From: 123, To: 123}, 125 }, 126 }, 127 TargetTag: &router.RoutingRule_Tag{ 128 Tag: "test", 129 }, 130 }, 131 }, 132 }, 133 }, 134 { 135 Input: `{ 136 "strategy": "rules", 137 "settings": { 138 "domainStrategy": "IPIfNonMatch", 139 "rules": [ 140 { 141 "type": "field", 142 "domain": [ 143 "baidu.com", 144 "qq.com" 145 ], 146 "outboundTag": "direct" 147 }, 148 { 149 "type": "field", 150 "ip": [ 151 "10.0.0.0/8", 152 "::1/128" 153 ], 154 "outboundTag": "test" 155 } 156 ] 157 } 158 }`, 159 Parser: createParser(), 160 Output: &router.Config{ 161 DomainStrategy: router.Config_IpIfNonMatch, 162 Rule: []*router.RoutingRule{ 163 { 164 Domain: []*router.Domain{ 165 { 166 Type: router.Domain_Plain, 167 Value: "baidu.com", 168 }, 169 { 170 Type: router.Domain_Plain, 171 Value: "qq.com", 172 }, 173 }, 174 TargetTag: &router.RoutingRule_Tag{ 175 Tag: "direct", 176 }, 177 }, 178 { 179 Geoip: []*router.GeoIP{ 180 { 181 Cidr: []*router.CIDR{ 182 { 183 Ip: []byte{10, 0, 0, 0}, 184 Prefix: 8, 185 }, 186 { 187 Ip: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 188 Prefix: 128, 189 }, 190 }, 191 }, 192 }, 193 TargetTag: &router.RoutingRule_Tag{ 194 Tag: "test", 195 }, 196 }, 197 }, 198 }, 199 }, 200 { 201 Input: `{ 202 "domainStrategy": "AsIs", 203 "rules": [ 204 { 205 "type": "field", 206 "domain": [ 207 "baidu.com", 208 "qq.com" 209 ], 210 "outboundTag": "direct" 211 }, 212 { 213 "type": "field", 214 "ip": [ 215 "10.0.0.0/8", 216 "::1/128" 217 ], 218 "outboundTag": "test" 219 } 220 ] 221 }`, 222 Parser: createParser(), 223 Output: &router.Config{ 224 DomainStrategy: router.Config_AsIs, 225 Rule: []*router.RoutingRule{ 226 { 227 Domain: []*router.Domain{ 228 { 229 Type: router.Domain_Plain, 230 Value: "baidu.com", 231 }, 232 { 233 Type: router.Domain_Plain, 234 Value: "qq.com", 235 }, 236 }, 237 TargetTag: &router.RoutingRule_Tag{ 238 Tag: "direct", 239 }, 240 }, 241 { 242 Geoip: []*router.GeoIP{ 243 { 244 Cidr: []*router.CIDR{ 245 { 246 Ip: []byte{10, 0, 0, 0}, 247 Prefix: 8, 248 }, 249 { 250 Ip: []byte{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, 251 Prefix: 128, 252 }, 253 }, 254 }, 255 }, 256 TargetTag: &router.RoutingRule_Tag{ 257 Tag: "test", 258 }, 259 }, 260 }, 261 }, 262 }, 263 }) 264 }