github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/core/payloads/payload_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package payloads_test
     5  
     6  import (
     7  	"github.com/juju/charm/v12"
     8  	"github.com/juju/testing"
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/core/payloads"
    13  )
    14  
    15  var _ = gc.Suite(&payloadSuite{})
    16  
    17  type payloadSuite struct {
    18  	testing.IsolationSuite
    19  }
    20  
    21  func (s *payloadSuite) newPayload(name, pType string) payloads.Payload {
    22  	return payloads.Payload{
    23  		PayloadClass: charm.PayloadClass{
    24  			Name: name,
    25  			Type: pType,
    26  		},
    27  		ID:     "id" + name,
    28  		Status: payloads.StateRunning,
    29  		Labels: []string{"a-tag"},
    30  		Unit:   "a-application/0",
    31  	}
    32  }
    33  
    34  func (s *payloadSuite) TestFullID(c *gc.C) {
    35  	payload := s.newPayload("spam", "docker")
    36  	id := payload.FullID()
    37  
    38  	c.Check(id, gc.Equals, "spam/idspam")
    39  }
    40  
    41  func (s *payloadSuite) TestFullIDMissingID(c *gc.C) {
    42  	payload := s.newPayload("spam", "docker")
    43  	payload.ID = ""
    44  	id := payload.FullID()
    45  
    46  	c.Check(id, gc.Equals, "spam")
    47  }
    48  
    49  func (s *payloadSuite) TestValidateOkay(c *gc.C) {
    50  	payload := s.newPayload("spam", "docker")
    51  	err := payload.Validate()
    52  
    53  	c.Check(err, jc.ErrorIsNil)
    54  }
    55  
    56  func (s *payloadSuite) TestValidateMissingName(c *gc.C) {
    57  	payload := s.newPayload("spam", "docker")
    58  	payload.Name = ""
    59  	err := payload.Validate()
    60  
    61  	c.Check(err, gc.ErrorMatches, `payload class missing name`)
    62  }
    63  
    64  func (s *payloadSuite) TestValidateMissingType(c *gc.C) {
    65  	payload := s.newPayload("spam", "docker")
    66  	payload.Type = ""
    67  	err := payload.Validate()
    68  
    69  	c.Check(err, gc.ErrorMatches, `payload class missing type`)
    70  }
    71  
    72  func (s *payloadSuite) TestValidateMissingID(c *gc.C) {
    73  	payload := s.newPayload("spam", "docker")
    74  	payload.ID = ""
    75  	err := payload.Validate()
    76  
    77  	c.Check(err, gc.ErrorMatches, `missing ID .*`)
    78  }
    79  
    80  func (s *payloadSuite) TestValidateMissingStatus(c *gc.C) {
    81  	payload := s.newPayload("spam", "docker")
    82  	payload.Status = ""
    83  	err := payload.Validate()
    84  
    85  	c.Check(err, gc.ErrorMatches, `status .* not supported; expected one of .*`)
    86  }
    87  
    88  func (s *payloadSuite) TestValidateUnknownStatus(c *gc.C) {
    89  	payload := s.newPayload("spam", "docker")
    90  	payload.Status = "some-unknown-value"
    91  	err := payload.Validate()
    92  
    93  	c.Check(err, gc.ErrorMatches, `status .* not supported; expected one of .*`)
    94  }
    95  
    96  func (s *payloadSuite) TestValidateMissingUnit(c *gc.C) {
    97  	payload := s.newPayload("spam", "docker")
    98  	payload.Unit = ""
    99  	err := payload.Validate()
   100  
   101  	c.Check(err, gc.ErrorMatches, `missing Unit .*`)
   102  }