github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/uniter/application_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package uniter_test
     5  
     6  import (
     7  	"time"
     8  
     9  	jc "github.com/juju/testing/checkers"
    10  	gc "gopkg.in/check.v1"
    11  	"gopkg.in/juju/names.v2"
    12  
    13  	"github.com/juju/juju/api/uniter"
    14  	"github.com/juju/juju/apiserver/params"
    15  	"github.com/juju/juju/core/status"
    16  	"github.com/juju/juju/core/watcher/watchertest"
    17  	"github.com/juju/juju/state"
    18  )
    19  
    20  type applicationSuite struct {
    21  	uniterSuite
    22  
    23  	apiApplication *uniter.Application
    24  }
    25  
    26  var _ = gc.Suite(&applicationSuite{})
    27  
    28  func (s *applicationSuite) SetUpTest(c *gc.C) {
    29  	s.uniterSuite.SetUpTest(c)
    30  
    31  	var err error
    32  	s.apiApplication, err = s.uniter.Application(s.wordpressApplication.Tag().(names.ApplicationTag))
    33  	c.Assert(err, jc.ErrorIsNil)
    34  }
    35  
    36  func (s *applicationSuite) TestNameTagAndString(c *gc.C) {
    37  	c.Assert(s.apiApplication.Name(), gc.Equals, s.wordpressApplication.Name())
    38  	c.Assert(s.apiApplication.String(), gc.Equals, s.wordpressApplication.String())
    39  	c.Assert(s.apiApplication.Tag(), gc.Equals, s.wordpressApplication.Tag().(names.ApplicationTag))
    40  }
    41  
    42  func (s *applicationSuite) TestWatch(c *gc.C) {
    43  	c.Assert(s.apiApplication.Life(), gc.Equals, params.Alive)
    44  
    45  	w, err := s.apiApplication.Watch()
    46  	c.Assert(err, jc.ErrorIsNil)
    47  	wc := watchertest.NewNotifyWatcherC(c, w, s.BackingState.StartSync)
    48  	defer wc.AssertStops()
    49  
    50  	// Initial event.
    51  	wc.AssertOneChange()
    52  
    53  	// Change something and check it's detected.
    54  	err = s.wordpressApplication.SetExposed()
    55  	c.Assert(err, jc.ErrorIsNil)
    56  	wc.AssertOneChange()
    57  
    58  	// Destroy the application and check it's detected.
    59  	err = s.wordpressApplication.Destroy()
    60  	c.Assert(err, jc.ErrorIsNil)
    61  	wc.AssertOneChange()
    62  }
    63  
    64  func (s *applicationSuite) TestRefresh(c *gc.C) {
    65  	c.Assert(s.apiApplication.Life(), gc.Equals, params.Alive)
    66  
    67  	err := s.wordpressApplication.Destroy()
    68  	c.Assert(err, jc.ErrorIsNil)
    69  	c.Assert(s.apiApplication.Life(), gc.Equals, params.Alive)
    70  
    71  	err = s.apiApplication.Refresh()
    72  	c.Assert(err, jc.ErrorIsNil)
    73  	c.Assert(s.apiApplication.Life(), gc.Equals, params.Dying)
    74  }
    75  
    76  func (s *applicationSuite) TestCharmURL(c *gc.C) {
    77  	// Get the charm URL through state calls.
    78  	curl, force := s.wordpressApplication.CharmURL()
    79  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
    80  	c.Assert(force, jc.IsFalse)
    81  
    82  	// Now check the same through the API.
    83  	curl, force, err := s.apiApplication.CharmURL()
    84  	c.Assert(err, jc.ErrorIsNil)
    85  	c.Assert(curl, gc.DeepEquals, s.wordpressCharm.URL())
    86  	c.Assert(force, jc.IsFalse)
    87  }
    88  
    89  func (s *applicationSuite) TestCharmModifiedVersion(c *gc.C) {
    90  	// Get the charm URL through state calls.
    91  	ver, err := s.apiApplication.CharmModifiedVersion()
    92  	c.Assert(err, jc.ErrorIsNil)
    93  	c.Assert(ver, gc.Equals, s.wordpressApplication.CharmModifiedVersion())
    94  }
    95  
    96  func (s *applicationSuite) TestSetApplicationStatus(c *gc.C) {
    97  	message := "a test message"
    98  	stat, err := s.wordpressApplication.Status()
    99  	c.Assert(err, jc.ErrorIsNil)
   100  	c.Assert(stat.Status, gc.Not(gc.Equals), status.Active)
   101  	c.Assert(stat.Message, gc.Not(gc.Equals), message)
   102  
   103  	err = s.apiApplication.SetStatus(s.wordpressUnit.Name(), status.Active, message, map[string]interface{}{})
   104  	c.Check(err, gc.ErrorMatches, `"wordpress/0" is not leader of "wordpress"`)
   105  
   106  	s.claimLeadership(c, s.wordpressUnit, s.wordpressApplication)
   107  
   108  	err = s.apiApplication.SetStatus(s.wordpressUnit.Name(), status.Active, message, map[string]interface{}{})
   109  	c.Check(err, jc.ErrorIsNil)
   110  
   111  	stat, err = s.wordpressApplication.Status()
   112  	c.Check(err, jc.ErrorIsNil)
   113  	c.Check(stat.Status, gc.Equals, status.Active)
   114  	c.Check(stat.Message, gc.Equals, message)
   115  }
   116  
   117  func (s *applicationSuite) TestApplicationStatus(c *gc.C) {
   118  	message := "a test message"
   119  	stat, err := s.wordpressApplication.Status()
   120  	c.Assert(err, jc.ErrorIsNil)
   121  	c.Assert(stat.Status, gc.Not(gc.Equals), status.Active)
   122  	c.Assert(stat.Message, gc.Not(gc.Equals), message)
   123  
   124  	now := time.Now()
   125  	sInfo := status.StatusInfo{
   126  		Status:  status.Active,
   127  		Message: message,
   128  		Data:    map[string]interface{}{},
   129  		Since:   &now,
   130  	}
   131  	err = s.wordpressApplication.SetStatus(sInfo)
   132  	c.Check(err, jc.ErrorIsNil)
   133  
   134  	stat, err = s.wordpressApplication.Status()
   135  	c.Check(err, jc.ErrorIsNil)
   136  	c.Check(stat.Status, gc.Equals, status.Active)
   137  	c.Check(stat.Message, gc.Equals, message)
   138  
   139  	result, err := s.apiApplication.Status(s.wordpressUnit.Name())
   140  	c.Check(err, gc.ErrorMatches, `"wordpress/0" is not leader of "wordpress"`)
   141  
   142  	s.claimLeadership(c, s.wordpressUnit, s.wordpressApplication)
   143  	result, err = s.apiApplication.Status(s.wordpressUnit.Name())
   144  	c.Check(err, jc.ErrorIsNil)
   145  	c.Check(result.Application.Status, gc.Equals, status.Active.String())
   146  }
   147  
   148  func (s *applicationSuite) claimLeadership(c *gc.C, unit *state.Unit, app *state.Application) {
   149  	claimer := s.State.LeadershipClaimer()
   150  	err := claimer.ClaimLeadership(app.Name(), unit.Name(), time.Minute)
   151  	c.Assert(err, jc.ErrorIsNil)
   152  }