Commit d03b6d5a authored by Ajit Jagtap's avatar Ajit Jagtap
Browse files

Merge branch 'Rahuls_ValidationMDL_StructValidation' into 'devbranch'

Added struct validation

See merge request !11
parents 296cf52f 6db1bc2f
Branches
Tags
2 merge requests!23Devbranch to Master,!11Added struct validation
Showing with 71 additions and 17 deletions
package validationmdl
import (
"bytes"
"net/http"
"net/url"
"github.com/pquerna/ffjson/ffjson"
"github.com/thedevsaddam/govalidator"
)
......@@ -27,7 +29,6 @@ func ValidateRequest(httpRequest *http.Request, validationRules, validationMessa
opts.Messages = validationMessages
}
if contentType == "application/json" || contentType == "text/plain" {
//Validate request type json and text (RAW data from request)
data := make(map[string]interface{}, 0)
......@@ -47,3 +48,40 @@ func ValidateRequest(httpRequest *http.Request, validationRules, validationMessa
}
return nil
}
// ValidateStruct validates the structures
func ValidateStruct(validationData interface{}, validationRules, validationMessages govalidator.MapData) map[string]interface{} {
//Initilize validation errors
var validationErrors url.Values
//Initialize dummy request
validationDataBytes, _ := ffjson.Marshal(&validationData)
dymmyHTTPRequest, _ := http.NewRequest("POST", "testUrl.com", bytes.NewBufferString(string(validationDataBytes)))
dymmyHTTPRequest.Header.Set("Content-Type", "application/json")
data := make(map[string]interface{}, 0)
//Set validator options
opts := govalidator.Options{
Request: dymmyHTTPRequest,
Rules: validationRules,
Data: &data,
}
//Set custom validation messages if sent from user
if validationMessages != nil {
opts.Messages = validationMessages
}
//Initialize the valiator and validate
validator := govalidator.New(opts)
validationErrors = validator.ValidateJSON()
if len(validationErrors) > 0 {
errs := map[string]interface{}{"validationErrors": validationErrors}
return errs
}
return nil
}
......@@ -207,23 +207,23 @@ func TestValidateRequest(t *testing.T) {
func BenchmarkValidationTest(b *testing.B) {
for i := 0; i < b.N; i++ {
//Validation rules
validationRules := govalidator.MapData{
"email": []string{"required", "min:5", "max:20", "email"},
"password": []string{"required"},
}
//Validation messages
validationMessages := govalidator.MapData{
"email": []string{"required:Email Id is required", "min:Min length 5 required", "max:Max length 20 allowed", "email:Enter a valid email"},
"password": []string{"required:Password is required"},
}
sunnyDayData := RequestBodyData{Email: "test@mkcl.org", Password: "test"}
sunnyDayByteArray, _ := ffjson.Marshal(&sunnyDayData)
sunnyDayHTTPRequest, _ := http.NewRequest("POST", "test.com", bytes.NewBufferString(string(sunnyDayByteArray)))
sunnyDayHTTPRequest.Header.Set("Content-Type", "application/json")
//Validation rules
validationRules := govalidator.MapData{
"email": []string{"required", "min:5", "max:20", "email"},
"password": []string{"required"},
}
//Validation messages
validationMessages := govalidator.MapData{
"email": []string{"required:Email Id is required", "min:Min length 5 required", "max:Max length 20 allowed", "email:Enter a valid email"},
"password": []string{"required:Password is required"},
}
sunnyDayData := RequestBodyData{Email: "test@mkcl.org", Password: "test"}
sunnyDayByteArray, _ := ffjson.Marshal(&sunnyDayData)
sunnyDayHTTPRequest, _ := http.NewRequest("POST", "test.com", bytes.NewBufferString(string(sunnyDayByteArray)))
sunnyDayHTTPRequest.Header.Set("Content-Type", "application/json")
for i := 0; i < b.N; i++ {
ValidateRequest(sunnyDayHTTPRequest, validationRules, validationMessages)
......@@ -260,3 +260,19 @@ func BenchmarkValidationTestAgainstYQL(b *testing.B) {
ValidateRequest(sunnyDayHTTPRequest, validationRules, nil)
}
}
func BenchmarkStructValidation(b *testing.B) {
type EmailValidation struct {
Email string `json:"email"`
Password string `json:"password"`
}
emailValidation := EmailValidation{}
emailValidation.Email = "test@mkcl.org"
emailValidation.Password = "testPassword"
for i := 0; i < b.N; i++ {
ValidateStruct(emailValidation, validationRules, validationMessages)
}
}
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment