mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Better URL validation (#1507)
* Add correct git branch name validation * Change git refname validation error constant name * Implement URL validation based on GoLang url.Parse method * Backward compatibility with older Go compiler * Add git reference name validation unit tests * Remove unused variable in unit test * Implement URL validation based on GoLang url.Parse method * Backward compatibility with older Go compiler * Add url validation unit tests
This commit is contained in:
		
							
								
								
									
										111
									
								
								modules/validation/validurl_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								modules/validation/validurl_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,111 @@ | ||||
| // Copyright 2017 The Gitea Authors. All rights reserved. | ||||
| // Use of this source code is governed by a MIT-style | ||||
| // license that can be found in the LICENSE file. | ||||
|  | ||||
| package validation | ||||
|  | ||||
| import ( | ||||
| 	"testing" | ||||
|  | ||||
| 	"github.com/go-macaron/binding" | ||||
| ) | ||||
|  | ||||
| var urlValidationTestCases = []validationTestCase{ | ||||
| 	{ | ||||
| 		description: "Empty URL", | ||||
| 		data: TestForm{ | ||||
| 			URL: "", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "URL without port", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://test.lan/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "URL with port", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://test.lan:3000/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "URL with IPv6 address without port", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://[::1]/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "URL with IPv6 address with port", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://[::1]:3000/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "Invalid URL", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http//test.lan/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{ | ||||
| 			binding.Error{ | ||||
| 				FieldNames:     []string{"URL"}, | ||||
| 				Classification: binding.ERR_URL, | ||||
| 				Message:        "Url", | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "Invalid schema", | ||||
| 		data: TestForm{ | ||||
| 			URL: "ftp://test.lan/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{ | ||||
| 			binding.Error{ | ||||
| 				FieldNames:     []string{"URL"}, | ||||
| 				Classification: binding.ERR_URL, | ||||
| 				Message:        "Url", | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "Invalid port", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://test.lan:3x4/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{ | ||||
| 			binding.Error{ | ||||
| 				FieldNames:     []string{"URL"}, | ||||
| 				Classification: binding.ERR_URL, | ||||
| 				Message:        "Url", | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| 	{ | ||||
| 		description: "Invalid port with IPv6 address", | ||||
| 		data: TestForm{ | ||||
| 			URL: "http://[::1]:3x4/", | ||||
| 		}, | ||||
| 		expectedErrors: binding.Errors{ | ||||
| 			binding.Error{ | ||||
| 				FieldNames:     []string{"URL"}, | ||||
| 				Classification: binding.ERR_URL, | ||||
| 				Message:        "Url", | ||||
| 			}, | ||||
| 		}, | ||||
| 	}, | ||||
| } | ||||
|  | ||||
| func Test_ValidURLValidation(t *testing.T) { | ||||
| 	AddBindingRules() | ||||
|  | ||||
| 	for _, testCase := range urlValidationTestCases { | ||||
| 		t.Run(testCase.description, func(t *testing.T) { | ||||
| 			performValidationTest(t, testCase) | ||||
| 		}) | ||||
| 	} | ||||
| } | ||||
		Reference in New Issue
	
	Block a user