github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/audit/audit_test.go (about)

     1  // Copyright 2016 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package audit_test
     5  
     6  import (
     7  	"time"
     8  
     9  	"github.com/juju/errors"
    10  	"github.com/juju/testing"
    11  	jc "github.com/juju/testing/checkers"
    12  	"github.com/juju/utils"
    13  	"github.com/juju/version"
    14  	gc "gopkg.in/check.v1"
    15  
    16  	"github.com/juju/juju/audit"
    17  )
    18  
    19  type auditSuite struct {
    20  	testing.IsolationSuite
    21  }
    22  
    23  var _ = gc.Suite(&auditSuite{})
    24  
    25  func (s *auditSuite) TestValidate_EmptyModelUUIDErrors(c *gc.C) {
    26  	invalidEntry := validEntry()
    27  	invalidEntry.ModelUUID = ""
    28  
    29  	validationErr := invalidEntry.Validate()
    30  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    31  	c.Check(validationErr, gc.ErrorMatches, "ModelUUID not assigned")
    32  }
    33  
    34  func (s *auditSuite) TestValidate_InvalidModelUUIDErrors(c *gc.C) {
    35  	invalidEntry := validEntry()
    36  	invalidEntry.ModelUUID = "."
    37  
    38  	validationErr := invalidEntry.Validate()
    39  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    40  	c.Check(validationErr, gc.ErrorMatches, "ModelUUID not valid")
    41  }
    42  
    43  func (s *auditSuite) TestValidate_EmptyTimestampErrors(c *gc.C) {
    44  	invalidEntry := validEntry()
    45  	invalidEntry.Timestamp = time.Time{}
    46  
    47  	validationErr := invalidEntry.Validate()
    48  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    49  	c.Check(validationErr, gc.ErrorMatches, "Timestamp not assigned")
    50  }
    51  
    52  func (s *auditSuite) TestValidate_NonUTCTimestampInvalid(c *gc.C) {
    53  	invalidEntry := validEntry()
    54  	invalidEntry.Timestamp = invalidEntry.Timestamp.In(time.FixedZone("x", 3600))
    55  
    56  	validationErr := invalidEntry.Validate()
    57  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    58  	c.Check(validationErr, gc.ErrorMatches, "must be set to UTC: Timestamp not valid")
    59  }
    60  
    61  func (s *auditSuite) TestValidate_NilOriginIPErrors(c *gc.C) {
    62  	invalidEntry := validEntry()
    63  	invalidEntry.RemoteAddress = ""
    64  
    65  	validationErr := invalidEntry.Validate()
    66  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    67  	c.Check(validationErr, gc.ErrorMatches, "RemoteAddress not assigned")
    68  }
    69  
    70  func (s *auditSuite) TestValidate_EmptyOriginTypeErrors(c *gc.C) {
    71  	invalidEntry := validEntry()
    72  	invalidEntry.OriginType = ""
    73  
    74  	validationErr := invalidEntry.Validate()
    75  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    76  	c.Check(validationErr, gc.ErrorMatches, "OriginType not assigned")
    77  }
    78  
    79  func (s *auditSuite) TestValidate_EmptyOriginNameErrors(c *gc.C) {
    80  	invalidEntry := validEntry()
    81  	invalidEntry.OriginName = ""
    82  
    83  	validationErr := invalidEntry.Validate()
    84  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    85  	c.Check(validationErr, gc.ErrorMatches, "OriginName not assigned")
    86  }
    87  
    88  func (s *auditSuite) TestValidate_EmptyOperationErrors(c *gc.C) {
    89  	invalidEntry := validEntry()
    90  	invalidEntry.Operation = ""
    91  
    92  	validationErr := invalidEntry.Validate()
    93  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
    94  	c.Check(validationErr, gc.ErrorMatches, "Operation not assigned")
    95  }
    96  
    97  func (s *auditSuite) TestValidate_EmptyJujuServerVersionErrors(c *gc.C) {
    98  	invalidEntry := validEntry()
    99  	invalidEntry.JujuServerVersion = version.Zero
   100  
   101  	validationErr := invalidEntry.Validate()
   102  	c.Check(validationErr, jc.Satisfies, errors.IsNotValid)
   103  	c.Check(validationErr, gc.ErrorMatches, "JujuServerVersion not assigned")
   104  }
   105  
   106  func validEntry() audit.AuditEntry {
   107  	return audit.AuditEntry{
   108  		JujuServerVersion: version.MustParse("1.0.0"),
   109  		ModelUUID:         utils.MustNewUUID().String(),
   110  		Timestamp:         time.Now().UTC(),
   111  		RemoteAddress:     "8.8.8.8",
   112  		OriginType:        ".",
   113  		OriginName:        ".",
   114  		Operation:         ".",
   115  	}
   116  }