This is an automated email from the ASF dual-hosted git repository. dewrich pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-trafficcontrol.git
commit 7ddd35e8f7eaa3f364ee2056766ecfb7e0a66646 Author: Dan Kirkwood <dang...@apache.org> AuthorDate: Thu Mar 1 09:49:15 2018 -0700 update CDN to nullable struct --- traffic_ops/traffic_ops_golang/cdn/cdns.go | 38 +++++++++++++++---------- traffic_ops/traffic_ops_golang/cdn/cdns_test.go | 21 ++++++++++---- 2 files changed, 39 insertions(+), 20 deletions(-) diff --git a/traffic_ops/traffic_ops_golang/cdn/cdns.go b/traffic_ops/traffic_ops_golang/cdn/cdns.go index 309c1e6..3501e67 100644 --- a/traffic_ops/traffic_ops_golang/cdn/cdns.go +++ b/traffic_ops/traffic_ops_golang/cdn/cdns.go @@ -22,6 +22,7 @@ package cdn import ( "errors" "fmt" + "strconv" "strings" "github.com/apache/incubator-trafficcontrol/lib/go-log" @@ -37,10 +38,10 @@ import ( ) //we need a type alias to define functions on -type TOCDN tc.CDN +type TOCDN tc.CDNNullable //the refType is passed into the handlers where a copy of its type is used to decode the json. -var refType = TOCDN(tc.CDN{}) +var refType = TOCDN{} func GetRefType() *TOCDN { return &refType @@ -48,11 +49,18 @@ func GetRefType() *TOCDN { //Implementation of the Identifier, Validator interface functions func (cdn TOCDN) GetID() (int, bool) { - return cdn.ID, true + if cdn.ID == nil { + return 0, false + } + return *cdn.ID, true } func (cdn TOCDN) GetAuditName() string { - return cdn.Name + if cdn.Name != nil { + return *cdn.Name + } + id, _ := cdn.GetID() + return strconv.Itoa(id) } func (cdn TOCDN) GetType() string { @@ -60,7 +68,7 @@ func (cdn TOCDN) GetType() string { } func (cdn *TOCDN) SetID(i int) { - cdn.ID = i + cdn.ID = &i } func isValidCDNchar(r rune) bool { @@ -70,7 +78,10 @@ func isValidCDNchar(r rune) bool { if r >= 'A' && r <= 'Z' { return true } - if r == '.' || r == '_' { + if r >= '0' && r <= '9' { + return true + } + if r == '.' || r == '-' { return true } return false @@ -84,16 +95,13 @@ func IsValidCDNName(str string) bool { // Validate fulfills the api.Validator interface func (cdn TOCDN) Validate(db *sqlx.DB) []error { - validName := validation.NewStringRule(IsValidCDNName, "invalid characters found") + validName := validation.NewStringRule(IsValidCDNName, "invalid characters found - Use alphanumeric . or - .") validDomainName := validation.NewStringRule(govalidator.IsDNSName, "not a valid domain name") errs := validation.Errors{ "name": validation.Validate(cdn.Name, validation.Required, validName), "domainName": validation.Validate(cdn.DomainName, validation.Required, validDomainName), } - if errs != nil { - return tovalidate.ToErrors(errs) - } - return nil + return tovalidate.ToErrors(errs) } //The TOCDN implementation of the Creator interface @@ -136,7 +144,7 @@ func (cdn *TOCDN) Create(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiError defer resultRows.Close() var id int - var lastUpdated tc.Time + var lastUpdated tc.TimeNoMod rowsAffected := 0 for resultRows.Next() { rowsAffected++ @@ -155,7 +163,7 @@ func (cdn *TOCDN) Create(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiError return tc.DBError, tc.SystemError } cdn.SetID(id) - cdn.LastUpdated = lastUpdated + cdn.LastUpdated = &lastUpdated err = tx.Commit() if err != nil { log.Errorln("Could not commit transaction: ", err) @@ -242,7 +250,7 @@ func (cdn *TOCDN) Update(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiError } defer resultRows.Close() - var lastUpdated tc.Time + var lastUpdated tc.TimeNoMod rowsAffected := 0 for resultRows.Next() { rowsAffected++ @@ -252,7 +260,7 @@ func (cdn *TOCDN) Update(db *sqlx.DB, user auth.CurrentUser) (error, tc.ApiError } } log.Debugf("lastUpdated: %++v", lastUpdated) - cdn.LastUpdated = lastUpdated + cdn.LastUpdated = &lastUpdated if rowsAffected != 1 { if rowsAffected < 1 { return errors.New("no cdn found with this id"), tc.DataMissingError diff --git a/traffic_ops/traffic_ops_golang/cdn/cdns_test.go b/traffic_ops/traffic_ops_golang/cdn/cdns_test.go index eb92b42..65b676f 100644 --- a/traffic_ops/traffic_ops_golang/cdn/cdns_test.go +++ b/traffic_ops/traffic_ops_golang/cdn/cdns_test.go @@ -42,7 +42,7 @@ func getTestCDNs() []tc.CDN { DomainName: "domainName", ID: 1, Name: "cdn1", - LastUpdated: tc.Time{Time: time.Now()}, + LastUpdated: tc.TimeNoMod{Time: time.Now()}, } cdns = append(cdns, testCDN) @@ -129,17 +129,28 @@ func TestInterfaces(t *testing.T) { } func TestValidate(t *testing.T) { - c := TOCDN{Name: "not-a-valid-cdn"} + // invalid name, empty domainname + n := "not_a_valid_cdn" + c := TOCDN{Name: &n} errs := c.Validate(nil) expectedErrs := []error{ - errors.New(`'name' invalid characters found`), + errors.New(`'name' invalid characters found - Use alphanumeric . or - .`), errors.New(`'domainName' cannot be blank`), } if !reflect.DeepEqual(expectedErrs, errs) { t.Errorf("expected %s, got %s", expectedErrs, errs) } - c.Name = "This.is.2.a_Valid___CDNNAME." - c.DomainName = `awesome-cdn.example.net` + + // name, domainname both valid + n = "This.is.2.a-Valid---CDNNAME." + d := `awesome-cdn.example.net` + c = TOCDN{Name: &n, DomainName: &d} + expectedErrs = []error{} + errs = c.Validate(nil) + if !reflect.DeepEqual(expectedErrs, errs) { + t.Errorf("expected %s, got %s", expectedErrs, errs) + } + } -- To stop receiving notification emails like this one, please contact dewr...@apache.org.