Skip to content

Commit

Permalink
Extract validateObjectMetadata to a validate package ✂
Browse files Browse the repository at this point in the history
It doesn't depend on the API resources and can be reused and share
across multiple api version.

Signed-off-by: Vincent Demeester <vdemeest@redhat.com>
  • Loading branch information
vdemeester authored and tekton-robot committed Nov 25, 2019
1 parent 0cb2bf0 commit 40a827d
Show file tree
Hide file tree
Showing 9 changed files with 22 additions and 14 deletions.
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/cluster_task_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@ package v1alpha1
import (
"context"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"knative.dev/pkg/apis"
)

var _ apis.Validatable = (*ClusterTask)(nil)

func (t *ClusterTask) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(t.GetObjectMeta()); err != nil {
if err := validate.ObjectMetadata(t.GetObjectMeta()); err != nil {
return err.ViaField("metadata")
}
return t.Spec.Validate(ctx)
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/condition_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@ package v1alpha1
import (
"context"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"k8s.io/apimachinery/pkg/api/equality"
"knative.dev/pkg/apis"
)

var _ apis.Validatable = (*Condition)(nil)

func (c Condition) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(c.GetObjectMeta()); err != nil {
if err := validate.ObjectMetadata(c.GetObjectMeta()); err != nil {
return err.ViaField("metadata")
}
return c.Spec.Validate(ctx).ViaField("Spec")
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/pipeline_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"fmt"
"strings"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"github.com/tektoncd/pipeline/pkg/list"
"github.com/tektoncd/pipeline/pkg/reconciler/pipeline/dag"
"golang.org/x/xerrors"
Expand All @@ -34,7 +35,7 @@ var _ apis.Validatable = (*Pipeline)(nil)
// Validate checks that the Pipeline structure is valid but does not validate
// that any references resources exist, that is done at run time.
func (p *Pipeline) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(p.GetObjectMeta()); err != nil {
if err := validate.ObjectMetadata(p.GetObjectMeta()); err != nil {
return err.ViaField("metadata")
}
return p.Spec.Validate(ctx)
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/pipelineresource_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,14 +22,15 @@ import (
"strconv"
"strings"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"k8s.io/apimachinery/pkg/api/equality"
"knative.dev/pkg/apis"
)

var _ apis.Validatable = (*PipelineResource)(nil)

func (r *PipelineResource) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(r.GetObjectMeta()); err != nil {
if err := validate.ObjectMetadata(r.GetObjectMeta()); err != nil {
return err.ViaField("metadata")
}

Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/pipelinerun_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"fmt"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"k8s.io/apimachinery/pkg/api/equality"
"knative.dev/pkg/apis"
)
Expand All @@ -28,7 +29,7 @@ var _ apis.Validatable = (*PipelineRun)(nil)

// Validate pipelinerun
func (pr *PipelineRun) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(pr.GetObjectMeta()).ViaField("metadata"); err != nil {
if err := validate.ObjectMetadata(pr.GetObjectMeta()).ViaField("metadata"); err != nil {
return err
}
return pr.Spec.Validate(ctx)
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/task_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"fmt"
"strings"

"github.com/tektoncd/pipeline/pkg/apis/validate"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/equality"
"k8s.io/apimachinery/pkg/util/validation"
Expand All @@ -30,7 +31,7 @@ import (
var _ apis.Validatable = (*Task)(nil)

func (t *Task) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(t.GetObjectMeta()); err != nil {
if err := validate.ObjectMetadata(t.GetObjectMeta()); err != nil {
return err.ViaField("metadata")
}
return t.Spec.Validate(ctx)
Expand Down
3 changes: 2 additions & 1 deletion pkg/apis/pipeline/v1alpha1/taskrun_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"fmt"
"strings"

"github.com/tektoncd/pipeline/pkg/apis/validate"
"k8s.io/apimachinery/pkg/api/equality"
"knative.dev/pkg/apis"
)
Expand All @@ -29,7 +30,7 @@ var _ apis.Validatable = (*TaskRun)(nil)

// Validate taskrun
func (tr *TaskRun) Validate(ctx context.Context) *apis.FieldError {
if err := validateObjectMetadata(tr.GetObjectMeta()).ViaField("metadata"); err != nil {
if err := validate.ObjectMetadata(tr.GetObjectMeta()).ViaField("metadata"); err != nil {
return err
}
return tr.Spec.Validate(ctx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1
package validate

import (
"strings"
Expand All @@ -23,9 +23,9 @@ import (
"knative.dev/pkg/apis"
)

const maxLength = 63
const MaxLength = 63

func validateObjectMetadata(meta metav1.Object) *apis.FieldError {
func ObjectMetadata(meta metav1.Object) *apis.FieldError {
name := meta.GetName()

if strings.Contains(name, ".") {
Expand All @@ -35,7 +35,7 @@ func validateObjectMetadata(meta metav1.Object) *apis.FieldError {
}
}

if len(name) > maxLength {
if len(name) > MaxLength {
return &apis.FieldError{
Message: "Invalid resource name: length must be no more than 63 characters",
Paths: []string{"name"},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,24 @@ See the License for the specific language governing permissions and
limitations under the License.
*/

package v1alpha1
package validate_test

import (
"strings"
"testing"

"github.com/tektoncd/pipeline/pkg/apis/validate"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

func TestMetadataInvalidLongName(t *testing.T) {

invalidMetas := []*metav1.ObjectMeta{
{Name: strings.Repeat("s", maxLength+1)},
{Name: strings.Repeat("s", validate.MaxLength+1)},
{Name: "bad.name"},
}
for _, invalidMeta := range invalidMetas {
if err := validateObjectMetadata(invalidMeta); err == nil {
if err := validate.ObjectMetadata(invalidMeta); err == nil {
t.Errorf("Failed to validate object meta data: %s", err)
}
}
Expand Down

0 comments on commit 40a827d

Please sign in to comment.