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

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package uniter_test
     5  
     6  import (
     7  	jc "github.com/juju/testing/checkers"
     8  	gc "gopkg.in/check.v1"
     9  
    10  	"github.com/juju/juju/apiserver/common"
    11  	commontesting "github.com/juju/juju/apiserver/common/testing"
    12  	meterstatustesting "github.com/juju/juju/apiserver/meterstatus/testing"
    13  	"github.com/juju/juju/apiserver/params"
    14  	apiservertesting "github.com/juju/juju/apiserver/testing"
    15  	"github.com/juju/juju/apiserver/uniter"
    16  	"github.com/juju/juju/state"
    17  )
    18  
    19  type uniterV0Suite struct {
    20  	uniterBaseSuite
    21  	*commontesting.EnvironWatcherTest
    22  
    23  	uniter        *uniter.UniterAPIV0
    24  	meteredUniter *uniter.UniterAPIV0
    25  }
    26  
    27  var _ = gc.Suite(&uniterV0Suite{})
    28  
    29  func (s *uniterV0Suite) SetUpTest(c *gc.C) {
    30  	s.uniterBaseSuite.setUpTest(c)
    31  
    32  	uniterAPIV0, err := uniter.NewUniterAPIV0(
    33  		s.State,
    34  		s.resources,
    35  		s.authorizer,
    36  	)
    37  	c.Assert(err, jc.ErrorIsNil)
    38  	s.uniter = uniterAPIV0
    39  
    40  	meteredAuthorizer := apiservertesting.FakeAuthorizer{
    41  		Tag: s.meteredUnit.Tag(),
    42  	}
    43  	s.meteredUniter, err = uniter.NewUniterAPIV0(
    44  		s.State,
    45  		s.resources,
    46  		meteredAuthorizer,
    47  	)
    48  	c.Assert(err, jc.ErrorIsNil)
    49  
    50  	s.EnvironWatcherTest = commontesting.NewEnvironWatcherTest(
    51  		s.uniter,
    52  		s.State,
    53  		s.resources,
    54  		commontesting.NoSecrets,
    55  	)
    56  }
    57  
    58  func (s *uniterV0Suite) TestUniterFailsWithNonUnitAgentUser(c *gc.C) {
    59  	factory := func(st *state.State, res *common.Resources, auth common.Authorizer) error {
    60  		_, err := uniter.NewUniterAPIV0(st, res, auth)
    61  		return err
    62  	}
    63  	s.testUniterFailsWithNonUnitAgentUser(c, factory)
    64  }
    65  
    66  func (s *uniterV0Suite) TestSetStatus(c *gc.C) {
    67  	s.testSetStatus(c, s.uniter)
    68  }
    69  
    70  func (s *uniterV0Suite) TestLife(c *gc.C) {
    71  	s.testLife(c, s.uniter)
    72  }
    73  
    74  func (s *uniterV0Suite) TestEnsureDead(c *gc.C) {
    75  	s.testEnsureDead(c, s.uniter)
    76  }
    77  
    78  func (s *uniterV0Suite) TestWatch(c *gc.C) {
    79  	s.testWatch(c, s.uniter)
    80  }
    81  
    82  func (s *uniterV0Suite) TestPublicAddress(c *gc.C) {
    83  	s.testPublicAddress(c, s.uniter)
    84  }
    85  
    86  func (s *uniterV0Suite) TestPrivateAddress(c *gc.C) {
    87  	s.testPrivateAddress(c, s.uniter)
    88  }
    89  
    90  func (s *uniterV0Suite) TestResolved(c *gc.C) {
    91  	s.testResolved(c, s.uniter)
    92  }
    93  
    94  func (s *uniterV0Suite) TestClearResolved(c *gc.C) {
    95  	s.testClearResolved(c, s.uniter)
    96  }
    97  
    98  func (s *uniterV0Suite) TestGetPrincipal(c *gc.C) {
    99  	factory := func(
   100  		st *state.State,
   101  		resources *common.Resources,
   102  		authorizer common.Authorizer,
   103  	) (getPrincipal, error) {
   104  		return uniter.NewUniterAPIV0(st, resources, authorizer)
   105  	}
   106  	s.testGetPrincipal(c, s.uniter, factory)
   107  }
   108  
   109  func (s *uniterV0Suite) TestHasSubordinates(c *gc.C) {
   110  	s.testHasSubordinates(c, s.uniter)
   111  }
   112  
   113  func (s *uniterV0Suite) TestDestroy(c *gc.C) {
   114  	s.testDestroy(c, s.uniter)
   115  }
   116  
   117  func (s *uniterV0Suite) TestDestroyAllSubordinates(c *gc.C) {
   118  	s.testDestroyAllSubordinates(c, s.uniter)
   119  }
   120  
   121  func (s *uniterV0Suite) TestCharmURL(c *gc.C) {
   122  	s.testCharmURL(c, s.uniter)
   123  }
   124  
   125  func (s *uniterV0Suite) TestSetCharmURL(c *gc.C) {
   126  	s.testSetCharmURL(c, s.uniter)
   127  }
   128  
   129  func (s *uniterV0Suite) TestOpenPorts(c *gc.C) {
   130  	s.testOpenPorts(c, s.uniter)
   131  }
   132  
   133  func (s *uniterV0Suite) TestClosePorts(c *gc.C) {
   134  	s.testClosePorts(c, s.uniter)
   135  }
   136  
   137  func (s *uniterV0Suite) TestOpenPort(c *gc.C) {
   138  	s.testOpenPort(c, s.uniter)
   139  }
   140  
   141  func (s *uniterV0Suite) TestClosePort(c *gc.C) {
   142  	s.testClosePort(c, s.uniter)
   143  }
   144  
   145  func (s *uniterV0Suite) TestWatchConfigSettings(c *gc.C) {
   146  	s.testWatchConfigSettings(c, s.uniter)
   147  }
   148  
   149  func (s *uniterV0Suite) TestWatchActionNotifications(c *gc.C) {
   150  	s.testWatchActionNotifications(c, s.uniter)
   151  }
   152  
   153  func (s *uniterV0Suite) TestWatchPreexistingActions(c *gc.C) {
   154  	s.testWatchPreexistingActions(c, s.uniter)
   155  }
   156  
   157  func (s *uniterV0Suite) TestWatchActionNotificationsMalformedTag(c *gc.C) {
   158  	s.testWatchActionNotificationsMalformedTag(c, s.uniter)
   159  }
   160  
   161  func (s *uniterV0Suite) TestWatchActionNotificationsMalformedUnitName(c *gc.C) {
   162  	s.testWatchActionNotificationsMalformedUnitName(c, s.uniter)
   163  }
   164  
   165  func (s *uniterV0Suite) TestWatchActionNotificationsNotUnit(c *gc.C) {
   166  	s.testWatchActionNotificationsNotUnit(c, s.uniter)
   167  }
   168  
   169  func (s *uniterV0Suite) TestWatchActionNotificationsPermissionDenied(c *gc.C) {
   170  	s.testWatchActionNotificationsPermissionDenied(c, s.uniter)
   171  }
   172  
   173  func (s *uniterV0Suite) TestConfigSettings(c *gc.C) {
   174  	s.testConfigSettings(c, s.uniter)
   175  }
   176  
   177  func (s *uniterV0Suite) TestWatchServiceRelations(c *gc.C) {
   178  	s.testWatchServiceRelations(c, s.uniter)
   179  }
   180  
   181  func (s *uniterV0Suite) TestCharmArchiveSha256(c *gc.C) {
   182  	s.testCharmArchiveSha256(c, s.uniter)
   183  }
   184  
   185  func (s *uniterV0Suite) TestCharmArchiveURLs(c *gc.C) {
   186  	s.testCharmArchiveURLs(c, s.uniter)
   187  }
   188  
   189  func (s *uniterV0Suite) TestCurrentEnvironUUID(c *gc.C) {
   190  	s.testCurrentEnvironUUID(c, s.uniter)
   191  }
   192  
   193  func (s *uniterV0Suite) TestCurrentEnvironment(c *gc.C) {
   194  	s.testCurrentEnvironment(c, s.uniter)
   195  }
   196  
   197  func (s *uniterV0Suite) TestActions(c *gc.C) {
   198  	s.testActions(c, s.uniter)
   199  }
   200  
   201  func (s *uniterV0Suite) TestActionsNotPresent(c *gc.C) {
   202  	s.testActionsNotPresent(c, s.uniter)
   203  }
   204  
   205  func (s *uniterV0Suite) TestActionsWrongUnit(c *gc.C) {
   206  	factory := func(
   207  		st *state.State,
   208  		resources *common.Resources,
   209  		authorizer common.Authorizer,
   210  	) (actions, error) {
   211  		return uniter.NewUniterAPIV0(st, resources, authorizer)
   212  	}
   213  	s.testActionsWrongUnit(c, factory)
   214  }
   215  
   216  func (s *uniterV0Suite) TestActionsPermissionDenied(c *gc.C) {
   217  	s.testActionsPermissionDenied(c, s.uniter)
   218  }
   219  
   220  func (s *uniterV0Suite) TestFinishActionsSuccess(c *gc.C) {
   221  	s.testFinishActionsSuccess(c, s.uniter)
   222  }
   223  
   224  func (s *uniterV0Suite) TestFinishActionsFailure(c *gc.C) {
   225  	s.testFinishActionsFailure(c, s.uniter)
   226  }
   227  
   228  func (s *uniterV0Suite) TestFinishActionsAuthAccess(c *gc.C) {
   229  	s.testFinishActionsAuthAccess(c, s.uniter)
   230  }
   231  
   232  func (s *uniterV0Suite) TestBeginActions(c *gc.C) {
   233  	s.testBeginActions(c, s.uniter)
   234  }
   235  
   236  func (s *uniterV0Suite) TestRelation(c *gc.C) {
   237  	s.testRelation(c, s.uniter)
   238  }
   239  
   240  func (s *uniterV0Suite) TestRelationById(c *gc.C) {
   241  	s.testRelationById(c, s.uniter)
   242  }
   243  
   244  func (s *uniterV0Suite) TestProviderType(c *gc.C) {
   245  	s.testProviderType(c, s.uniter)
   246  }
   247  
   248  func (s *uniterV0Suite) TestEnterScope(c *gc.C) {
   249  	s.testEnterScope(c, s.uniter)
   250  }
   251  
   252  func (s *uniterV0Suite) TestLeaveScope(c *gc.C) {
   253  	s.testLeaveScope(c, s.uniter)
   254  }
   255  
   256  func (s *uniterV0Suite) TestJoinedRelations(c *gc.C) {
   257  	s.testJoinedRelations(c, s.uniter)
   258  }
   259  
   260  func (s *uniterV0Suite) TestReadSettings(c *gc.C) {
   261  	s.testReadSettings(c, s.uniter)
   262  }
   263  
   264  func (s *uniterV0Suite) TestReadSettingsWithNonStringValuesFails(c *gc.C) {
   265  	s.testReadSettingsWithNonStringValuesFails(c, s.uniter)
   266  }
   267  
   268  func (s *uniterV0Suite) TestReadRemoteSettings(c *gc.C) {
   269  	s.testReadRemoteSettings(c, s.uniter)
   270  }
   271  
   272  func (s *uniterV0Suite) TestReadRemoteSettingsWithNonStringValuesFails(c *gc.C) {
   273  	s.testReadRemoteSettingsWithNonStringValuesFails(c, s.uniter)
   274  }
   275  
   276  func (s *uniterV0Suite) TestUpdateSettings(c *gc.C) {
   277  	s.testUpdateSettings(c, s.uniter)
   278  }
   279  
   280  func (s *uniterV0Suite) TestWatchRelationUnits(c *gc.C) {
   281  	s.testWatchRelationUnits(c, s.uniter)
   282  }
   283  
   284  func (s *uniterV0Suite) TestAPIAddresses(c *gc.C) {
   285  	s.testAPIAddresses(c, s.uniter)
   286  }
   287  
   288  func (s *uniterV0Suite) TestWatchUnitAddresses(c *gc.C) {
   289  	s.testWatchUnitAddresses(c, s.uniter)
   290  }
   291  
   292  func (s *uniterV0Suite) TestGetMeterStatus(c *gc.C) {
   293  	meterstatustesting.TestGetMeterStatus(c, s.uniter, s.wordpressUnit)
   294  }
   295  
   296  func (s *uniterV0Suite) TestGetMeterStatusUnauthenticated(c *gc.C) {
   297  	s.testGetMeterStatusUnauthenticated(c, s.uniter)
   298  }
   299  
   300  func (s *uniterV0Suite) TestGetMeterStatusBadTag(c *gc.C) {
   301  	s.testGetMeterStatusBadTag(c, s.uniter)
   302  }
   303  
   304  func (s *uniterV0Suite) TestWatchMeterStatus(c *gc.C) {
   305  	meterstatustesting.TestWatchMeterStatus(c, s.uniter, s.wordpressUnit, s.State, s.resources)
   306  }
   307  
   308  func (s *uniterV0Suite) TestGetOwnerTag(c *gc.C) {
   309  	tag := s.mysql.Tag().String()
   310  	args := params.Entities{Entities: []params.Entity{
   311  		{Tag: tag},
   312  	}}
   313  	result, err := s.uniter.GetOwnerTag(args)
   314  	c.Assert(err, jc.ErrorIsNil)
   315  	c.Assert(result, gc.DeepEquals, params.StringResult{
   316  		Result: s.AdminUserTag(c).String(),
   317  	})
   318  }
   319  
   320  func (s *uniterV0Suite) TestServiceOwnerV0NotImplemented(c *gc.C) {
   321  	apiservertesting.AssertNotImplemented(c, s.uniter, "ServiceOwner")
   322  }
   323  
   324  func (s *uniterV0Suite) TestAssignedMachineV0NotImplemented(c *gc.C) {
   325  	apiservertesting.AssertNotImplemented(c, s.uniter, "AssignedMachine")
   326  }
   327  
   328  func (s *uniterV0Suite) TestAllMachinePortsV0NotImplemented(c *gc.C) {
   329  	apiservertesting.AssertNotImplemented(c, s.uniter, "AllMachinePorts")
   330  }
   331  
   332  func (s *uniterV0Suite) TestRequestReboot(c *gc.C) {
   333  	args := params.Entities{Entities: []params.Entity{
   334  		{Tag: s.machine0.Tag().String()},
   335  		{Tag: s.machine1.Tag().String()},
   336  		{Tag: "bogus"},
   337  		{Tag: "nasty-tag"},
   338  	}}
   339  	errResult, err := s.uniter.RequestReboot(args)
   340  	c.Assert(err, jc.ErrorIsNil)
   341  	c.Assert(errResult, gc.DeepEquals, params.ErrorResults{
   342  		Results: []params.ErrorResult{
   343  			{Error: nil},
   344  			{Error: apiservertesting.ErrUnauthorized},
   345  			{Error: apiservertesting.ErrUnauthorized},
   346  			{Error: apiservertesting.ErrUnauthorized},
   347  		}})
   348  
   349  	rFlag, err := s.machine0.GetRebootFlag()
   350  	c.Assert(err, jc.ErrorIsNil)
   351  	c.Assert(rFlag, jc.IsTrue)
   352  
   353  	rFlag, err = s.machine1.GetRebootFlag()
   354  	c.Assert(err, jc.ErrorIsNil)
   355  	c.Assert(rFlag, jc.IsFalse)
   356  }