github.com/cloud-green/juju@v0.0.0-20151002100041-a00291338d3d/apiserver/imagemetadata/functions_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package imagemetadata_test
     5  
     6  import (
     7  	"fmt"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  
    12  	"github.com/juju/juju/apiserver/imagemetadata"
    13  	"github.com/juju/juju/apiserver/params"
    14  	"github.com/juju/juju/state/cloudimagemetadata"
    15  	"github.com/juju/juju/testing"
    16  )
    17  
    18  type funcSuite struct {
    19  	testing.BaseSuite
    20  
    21  	expected cloudimagemetadata.Metadata
    22  }
    23  
    24  func (s *funcSuite) SetUpTest(c *gc.C) {
    25  	s.BaseSuite.SetUpTest(c)
    26  
    27  	s.expected = cloudimagemetadata.Metadata{
    28  		cloudimagemetadata.MetadataAttributes{
    29  			Stream: "released",
    30  			Source: cloudimagemetadata.Custom,
    31  		},
    32  		"",
    33  	}
    34  }
    35  
    36  var _ = gc.Suite(&funcSuite{})
    37  
    38  func (s *funcSuite) TestParseMetadataSourcePanic(c *gc.C) {
    39  	m := func() { imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{}) }
    40  	c.Assert(m, gc.PanicMatches, `unknown cloud image metadata source ""`)
    41  }
    42  
    43  func (s *funcSuite) TestParseMetadataCustom(c *gc.C) {
    44  	m := imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{Source: "custom"})
    45  	c.Assert(m, gc.DeepEquals, s.expected)
    46  
    47  	m = imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{Source: "CusTOM"})
    48  	c.Assert(m, gc.DeepEquals, s.expected)
    49  }
    50  
    51  func (s *funcSuite) TestParseMetadataPublic(c *gc.C) {
    52  	s.expected.Source = cloudimagemetadata.Public
    53  
    54  	m := imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{Source: "public"})
    55  	c.Assert(m, gc.DeepEquals, s.expected)
    56  
    57  	m = imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{Source: "PubLic"})
    58  	c.Assert(m, gc.DeepEquals, s.expected)
    59  }
    60  
    61  func (s *funcSuite) TestParseMetadataAnyStream(c *gc.C) {
    62  	stream := "happy stream"
    63  	s.expected.Stream = stream
    64  
    65  	m := imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{
    66  		Source: "custom",
    67  		Stream: stream,
    68  	})
    69  	c.Assert(m, gc.DeepEquals, s.expected)
    70  }
    71  
    72  func (s *funcSuite) TestParseMetadataDefaultStream(c *gc.C) {
    73  	m := imagemetadata.ParseMetadataFromParams(params.CloudImageMetadata{
    74  		Source: "custom",
    75  	})
    76  	c.Assert(m, gc.DeepEquals, s.expected)
    77  }
    78  
    79  type funcMetadataSuite struct {
    80  	testing.BaseSuite
    81  }
    82  
    83  var _ = gc.Suite(&funcMetadataSuite{})
    84  
    85  func (s *funcMetadataSuite) TestProcessErrorsNil(c *gc.C) {
    86  	s.assertProcessErrorsNone(c, nil)
    87  }
    88  
    89  func (s *funcMetadataSuite) TestProcessErrorsEmpty(c *gc.C) {
    90  	s.assertProcessErrorsNone(c, []params.ErrorResult{})
    91  }
    92  
    93  func (s *funcMetadataSuite) TestProcessErrorsNilError(c *gc.C) {
    94  	s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: nil}})
    95  }
    96  
    97  func (s *funcMetadataSuite) TestProcessErrorsEmptyMessageError(c *gc.C) {
    98  	s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: &params.Error{Message: ""}}})
    99  }
   100  
   101  func (s *funcMetadataSuite) TestProcessErrorsFullError(c *gc.C) {
   102  	msg := "my bad"
   103  
   104  	errs := []params.ErrorResult{{Error: &params.Error{Message: msg}}}
   105  
   106  	expected := fmt.Sprintf(`
   107  saving some image metadata:
   108  %v`[1:], msg)
   109  
   110  	s.assertProcessErrors(c, errs, expected)
   111  }
   112  
   113  func (s *funcMetadataSuite) TestProcessErrorsMany(c *gc.C) {
   114  	msg1 := "my bad"
   115  	msg2 := "my good"
   116  
   117  	errs := []params.ErrorResult{
   118  		{Error: &params.Error{Message: msg1}},
   119  		{Error: &params.Error{Message: ""}},
   120  		{Error: nil},
   121  		{Error: &params.Error{Message: msg2}},
   122  	}
   123  
   124  	expected := fmt.Sprintf(`
   125  saving some image metadata:
   126  %v
   127  %v`[1:], msg1, msg2)
   128  
   129  	s.assertProcessErrors(c, errs, expected)
   130  }
   131  
   132  var process = imagemetadata.ProcessErrors
   133  
   134  func (s *funcMetadataSuite) assertProcessErrorsNone(c *gc.C, errs []params.ErrorResult) {
   135  	c.Assert(process(errs), jc.ErrorIsNil)
   136  }
   137  
   138  func (s *funcMetadataSuite) assertProcessErrors(c *gc.C, errs []params.ErrorResult, expected string) {
   139  	c.Assert(process(errs), gc.ErrorMatches, expected)
   140  }