gopkg.in/juju/charm.v6-unstable@v6.0.0-20171026192109-50d0c219b496/resource/meta_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the LGPLv3, see LICENCE file for details.
     3  
     4  package resource_test
     5  
     6  import (
     7  	"github.com/juju/errors"
     8  	jc "github.com/juju/testing/checkers"
     9  	gc "gopkg.in/check.v1"
    10  
    11  	"gopkg.in/juju/charm.v6-unstable/resource"
    12  )
    13  
    14  var _ = gc.Suite(&MetaSuite{})
    15  
    16  type MetaSuite struct{}
    17  
    18  func (s *MetaSuite) TestValidateFull(c *gc.C) {
    19  	res := resource.Meta{
    20  		Name:        "my-resource",
    21  		Type:        resource.TypeFile,
    22  		Path:        "filename.tgz",
    23  		Description: "One line that is useful when operators need to push it.",
    24  	}
    25  	err := res.Validate()
    26  
    27  	c.Check(err, jc.ErrorIsNil)
    28  }
    29  
    30  func (s *MetaSuite) TestValidateZeroValue(c *gc.C) {
    31  	var res resource.Meta
    32  	err := res.Validate()
    33  
    34  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    35  }
    36  
    37  func (s *MetaSuite) TestValidateMissingName(c *gc.C) {
    38  	res := resource.Meta{
    39  		Type:        resource.TypeFile,
    40  		Path:        "filename.tgz",
    41  		Description: "One line that is useful when operators need to push it.",
    42  	}
    43  	err := res.Validate()
    44  
    45  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    46  	c.Check(err, gc.ErrorMatches, `resource missing name`)
    47  }
    48  
    49  func (s *MetaSuite) TestValidateMissingType(c *gc.C) {
    50  	res := resource.Meta{
    51  		Name:        "my-resource",
    52  		Path:        "filename.tgz",
    53  		Description: "One line that is useful when operators need to push it.",
    54  	}
    55  	err := res.Validate()
    56  
    57  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    58  	c.Check(err, gc.ErrorMatches, `resource missing type`)
    59  }
    60  
    61  func (s *MetaSuite) TestValidateMissingPath(c *gc.C) {
    62  	res := resource.Meta{
    63  		Name:        "my-resource",
    64  		Type:        resource.TypeFile,
    65  		Description: "One line that is useful when operators need to push it.",
    66  	}
    67  	err := res.Validate()
    68  
    69  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    70  	c.Check(err, gc.ErrorMatches, `resource missing filename`)
    71  }
    72  
    73  func (s *MetaSuite) TestValidateNestedPath(c *gc.C) {
    74  	res := resource.Meta{
    75  		Name: "my-resource",
    76  		Type: resource.TypeFile,
    77  		Path: "spam/eggs",
    78  	}
    79  	err := res.Validate()
    80  
    81  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    82  	c.Check(err, gc.ErrorMatches, `.*filename cannot contain "/" .*`)
    83  }
    84  
    85  func (s *MetaSuite) TestValidateAbsolutePath(c *gc.C) {
    86  	res := resource.Meta{
    87  		Name: "my-resource",
    88  		Type: resource.TypeFile,
    89  		Path: "/spam/eggs",
    90  	}
    91  	err := res.Validate()
    92  
    93  	c.Check(err, jc.Satisfies, errors.IsNotValid)
    94  	c.Check(err, gc.ErrorMatches, `.*filename cannot contain "/" .*`)
    95  }
    96  
    97  func (s *MetaSuite) TestValidateSuspectPath(c *gc.C) {
    98  	res := resource.Meta{
    99  		Name: "my-resource",
   100  		Type: resource.TypeFile,
   101  		Path: "git@github.com:juju/juju.git",
   102  	}
   103  	err := res.Validate()
   104  
   105  	c.Check(err, jc.Satisfies, errors.IsNotValid)
   106  	c.Check(err, gc.ErrorMatches, `.*filename cannot contain "/" .*`)
   107  }
   108  
   109  func (s *MetaSuite) TestValidateMissingComment(c *gc.C) {
   110  	res := resource.Meta{
   111  		Name: "my-resource",
   112  		Type: resource.TypeFile,
   113  		Path: "filename.tgz",
   114  	}
   115  	err := res.Validate()
   116  
   117  	c.Check(err, jc.ErrorIsNil)
   118  }