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