github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/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/environs"
    15  	"github.com/juju/juju/environs/config"
    16  	envtesting "github.com/juju/juju/environs/testing"
    17  	"github.com/juju/juju/jujuclient/jujuclienttesting"
    18  	"github.com/juju/juju/state/cloudimagemetadata"
    19  	"github.com/juju/juju/testing"
    20  )
    21  
    22  type funcSuite struct {
    23  	baseImageMetadataSuite
    24  
    25  	env      environs.Environ
    26  	expected cloudimagemetadata.Metadata
    27  }
    28  
    29  var _ = gc.Suite(&funcSuite{})
    30  
    31  func (s *funcSuite) SetUpTest(c *gc.C) {
    32  	s.baseImageMetadataSuite.SetUpTest(c)
    33  
    34  	var err error
    35  	s.env, err = environs.Prepare(
    36  		envtesting.BootstrapContext(c),
    37  		jujuclienttesting.NewMemStore(),
    38  		environs.PrepareParams{
    39  			ControllerName: "dummycontroller",
    40  			BaseConfig:     mockConfig(),
    41  			CloudName:      "dummy",
    42  		},
    43  	)
    44  	c.Assert(err, jc.ErrorIsNil)
    45  	s.state = s.constructState(s.env.Config())
    46  
    47  	s.expected = cloudimagemetadata.Metadata{
    48  		cloudimagemetadata.MetadataAttributes{
    49  			Stream: "released",
    50  			Source: "custom",
    51  			Series: config.LatestLtsSeries(),
    52  			Arch:   "amd64",
    53  			Region: "dummy_region",
    54  		},
    55  		0,
    56  		"",
    57  	}
    58  }
    59  
    60  func (s *funcSuite) TestParseMetadataNoSource(c *gc.C) {
    61  	m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{}, s.env)
    62  	c.Assert(err, jc.ErrorIsNil)
    63  	c.Assert(m, gc.DeepEquals, s.expected)
    64  }
    65  
    66  func (s *funcSuite) TestParseMetadataAnySource(c *gc.C) {
    67  	s.expected.Source = "any"
    68  	m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Source: "any"}, s.env)
    69  	c.Assert(err, jc.ErrorIsNil)
    70  	c.Assert(m, gc.DeepEquals, s.expected)
    71  }
    72  
    73  func (s *funcSuite) TestParseMetadataAnyStream(c *gc.C) {
    74  	stream := "happy stream"
    75  	s.expected.Stream = stream
    76  
    77  	m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Stream: stream}, s.env)
    78  	c.Assert(err, jc.ErrorIsNil)
    79  	c.Assert(m, gc.DeepEquals, s.expected)
    80  }
    81  
    82  func (s *funcSuite) TestParseMetadataDefaultStream(c *gc.C) {
    83  	m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{}, s.env)
    84  	c.Assert(err, jc.ErrorIsNil)
    85  	c.Assert(m, gc.DeepEquals, s.expected)
    86  }
    87  
    88  func (s *funcSuite) TestParseMetadataAnyRegion(c *gc.C) {
    89  	region := "region"
    90  	s.expected.Region = region
    91  
    92  	m, err := imagemetadata.ParseMetadataFromParams(s.api, params.CloudImageMetadata{Region: region}, s.env)
    93  	c.Assert(err, jc.ErrorIsNil)
    94  	c.Assert(m, gc.DeepEquals, s.expected)
    95  }
    96  
    97  type funcMetadataSuite struct {
    98  	testing.BaseSuite
    99  }
   100  
   101  var _ = gc.Suite(&funcMetadataSuite{})
   102  
   103  func (s *funcMetadataSuite) TestProcessErrorsNil(c *gc.C) {
   104  	s.assertProcessErrorsNone(c, nil)
   105  }
   106  
   107  func (s *funcMetadataSuite) TestProcessErrorsEmpty(c *gc.C) {
   108  	s.assertProcessErrorsNone(c, []params.ErrorResult{})
   109  }
   110  
   111  func (s *funcMetadataSuite) TestProcessErrorsNilError(c *gc.C) {
   112  	s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: nil}})
   113  }
   114  
   115  func (s *funcMetadataSuite) TestProcessErrorsEmptyMessageError(c *gc.C) {
   116  	s.assertProcessErrorsNone(c, []params.ErrorResult{{Error: &params.Error{Message: ""}}})
   117  }
   118  
   119  func (s *funcMetadataSuite) TestProcessErrorsFullError(c *gc.C) {
   120  	msg := "my bad"
   121  
   122  	errs := []params.ErrorResult{{Error: &params.Error{Message: msg}}}
   123  
   124  	expected := fmt.Sprintf(`
   125  saving some image metadata:
   126  %v`[1:], msg)
   127  
   128  	s.assertProcessErrors(c, errs, expected)
   129  }
   130  
   131  func (s *funcMetadataSuite) TestProcessErrorsMany(c *gc.C) {
   132  	msg1 := "my bad"
   133  	msg2 := "my good"
   134  
   135  	errs := []params.ErrorResult{
   136  		{Error: &params.Error{Message: msg1}},
   137  		{Error: &params.Error{Message: ""}},
   138  		{Error: nil},
   139  		{Error: &params.Error{Message: msg2}},
   140  	}
   141  
   142  	expected := fmt.Sprintf(`
   143  saving some image metadata:
   144  %v
   145  %v`[1:], msg1, msg2)
   146  
   147  	s.assertProcessErrors(c, errs, expected)
   148  }
   149  
   150  var process = imagemetadata.ProcessErrors
   151  
   152  func (s *funcMetadataSuite) assertProcessErrorsNone(c *gc.C, errs []params.ErrorResult) {
   153  	c.Assert(process(errs), jc.ErrorIsNil)
   154  }
   155  
   156  func (s *funcMetadataSuite) assertProcessErrors(c *gc.C, errs []params.ErrorResult, expected string) {
   157  	c.Assert(process(errs), gc.ErrorMatches, expected)
   158  }