github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/state/resources_test.go (about)

     1  // Copyright 2015 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package state_test
     5  
     6  import (
     7  	"bytes"
     8  	"time"
     9  
    10  	jc "github.com/juju/testing/checkers"
    11  	gc "gopkg.in/check.v1"
    12  	charmresource "gopkg.in/juju/charm.v6-unstable/resource"
    13  
    14  	"github.com/juju/juju/component/all"
    15  	"github.com/juju/juju/resource"
    16  	"github.com/juju/juju/resource/resourcetesting"
    17  )
    18  
    19  func init() {
    20  	if err := all.RegisterForServer(); err != nil {
    21  		panic(err)
    22  	}
    23  }
    24  
    25  var _ = gc.Suite(&ResourcesSuite{})
    26  
    27  type ResourcesSuite struct {
    28  	ConnSuite
    29  }
    30  
    31  func (s *ResourcesSuite) TestFunctional(c *gc.C) {
    32  	ch := s.ConnSuite.AddTestingCharm(c, "wordpress")
    33  	s.ConnSuite.AddTestingService(c, "a-service", ch)
    34  
    35  	st, err := s.State.Resources()
    36  	c.Assert(err, jc.ErrorIsNil)
    37  
    38  	resources, err := st.ListResources("a-service")
    39  	c.Assert(err, jc.ErrorIsNil)
    40  
    41  	c.Check(resources.Resources, gc.HasLen, 0)
    42  
    43  	data := "spamspamspam"
    44  	res := newResource(c, "spam", data)
    45  	file := bytes.NewBufferString(data)
    46  
    47  	_, err = st.SetResource("a-service", res.Username, res.Resource, file)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	csResources := []charmresource.Resource{res.Resource}
    51  	err = st.SetCharmStoreResources("a-service", csResources, time.Now())
    52  	c.Assert(err, jc.ErrorIsNil)
    53  
    54  	resources, err = st.ListResources("a-service")
    55  	c.Assert(err, jc.ErrorIsNil)
    56  
    57  	res.Timestamp = resources.Resources[0].Timestamp
    58  	c.Check(resources, jc.DeepEquals, resource.ServiceResources{
    59  		Resources:           []resource.Resource{res},
    60  		CharmStoreResources: csResources,
    61  	})
    62  
    63  	// TODO(ericsnow) Add more as state.Resources grows more functionality.
    64  }
    65  
    66  func newResource(c *gc.C, name, data string) resource.Resource {
    67  	opened := resourcetesting.NewResource(c, nil, name, "a-service", data)
    68  	res := opened.Resource
    69  	res.Timestamp = time.Unix(res.Timestamp.Unix(), 0)
    70  	return res
    71  }