|  | @@ -135,3 +135,31 @@ func TestIPRule(t *testing.T) {
 | 
											
												
													
														|  |  		Destination: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80),
 |  |  		Destination: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80),
 | 
											
												
													
														|  |  	})).IsTrue()
 |  |  	})).IsTrue()
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +func TestSourceIPRule(t *testing.T) {
 | 
											
												
													
														|  | 
 |  | +	assert := assert.On(t)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +	rule := ParseRule([]byte(`{
 | 
											
												
													
														|  | 
 |  | +    "type": "field",
 | 
											
												
													
														|  | 
 |  | +    "source": [
 | 
											
												
													
														|  | 
 |  | +      "10.0.0.0/8",
 | 
											
												
													
														|  | 
 |  | +      "192.0.0.0/24"
 | 
											
												
													
														|  | 
 |  | +    ],
 | 
											
												
													
														|  | 
 |  | +    "outboundTag": "direct"
 | 
											
												
													
														|  | 
 |  | +  }`))
 | 
											
												
													
														|  | 
 |  | +	assert.Pointer(rule).IsNotNil()
 | 
											
												
													
														|  | 
 |  | +	cond, err := rule.BuildCondition()
 | 
											
												
													
														|  | 
 |  | +	assert.Error(err).IsNil()
 | 
											
												
													
														|  | 
 |  | +	assert.Bool(cond.Apply(&proxy.SessionInfo{
 | 
											
												
													
														|  | 
 |  | +		Source: v2net.TCPDestination(v2net.DomainAddress("www.ooxx.com"), 80),
 | 
											
												
													
														|  | 
 |  | +	})).IsFalse()
 | 
											
												
													
														|  | 
 |  | +	assert.Bool(cond.Apply(&proxy.SessionInfo{
 | 
											
												
													
														|  | 
 |  | +		Source: v2net.TCPDestination(v2net.IPAddress([]byte{10, 0, 0, 1}), 80),
 | 
											
												
													
														|  | 
 |  | +	})).IsTrue()
 | 
											
												
													
														|  | 
 |  | +	assert.Bool(cond.Apply(&proxy.SessionInfo{
 | 
											
												
													
														|  | 
 |  | +		Source: v2net.TCPDestination(v2net.IPAddress([]byte{127, 0, 0, 1}), 80),
 | 
											
												
													
														|  | 
 |  | +	})).IsFalse()
 | 
											
												
													
														|  | 
 |  | +	assert.Bool(cond.Apply(&proxy.SessionInfo{
 | 
											
												
													
														|  | 
 |  | +		Source: v2net.TCPDestination(v2net.IPAddress([]byte{192, 0, 0, 1}), 80),
 | 
											
												
													
														|  | 
 |  | +	})).IsTrue()
 | 
											
												
													
														|  | 
 |  | +}
 |