Skip to content

Commit

Permalink
Merge pull request #73 from candlepin/bkearney/829803
Browse files Browse the repository at this point in the history
829803: Added an unset command to service level.
  • Loading branch information
bkearney committed Jun 14, 2012
2 parents da029ad + bacae26 commit f86a275
Show file tree
Hide file tree
Showing 3 changed files with 58 additions and 7 deletions.
30 changes: 23 additions & 7 deletions src/subscription_manager/managercli.py
Original file line number Diff line number Diff line change
Expand Up @@ -656,6 +656,8 @@ def _do_command(self):
class ServiceLevelCommand(UserPassCommand):

def __init__(self, ent_dir=None, prod_dir=None):
self.consumerIdentity = ConsumerIdentity

shortdesc = _("Manage service levels for this system.")

super(ServiceLevelCommand, self).__init__("service-level", shortdesc,
Expand All @@ -670,14 +672,19 @@ def __init__(self, ent_dir=None, prod_dir=None):
help=_("list all service levels available"))
self.parser.add_option("--set", dest="service_level",
help=_("service level to apply to this system"))
self.parser.add_option("--unset", dest="unset",
action='store_true',
help=_("unset the service level for this system"))

def _validate_options(self):

# Assume --show if run with no args:
if not self.options.list and not self.options.show:
if not self.options.list and \
not self.options.show and \
not self.options.unset:
self.options.show = True

if not ConsumerIdentity.existsAndValid():
if not self.consumerIdentity.existsAndValid():
if self.options.list:
if not (self.options.username and self.options.password):
print(_("Error: you must register or specify --username and --password to list service levels"))
Expand All @@ -699,13 +706,16 @@ def _do_command(self):
self.cp = self._get_UEP(username=self.username,
password=self.password)
else:
cert_file = ConsumerIdentity.certpath()
key_file = ConsumerIdentity.keypath()
cert_file = self.consumerIdentity.certpath()
key_file = self.consumerIdentity.keypath()

# get an UEP as consumer
self.cp = self._get_UEP(cert_file=cert_file,
key_file=key_file)

if self.options.unset:
self.unset_service_level()

if self.options.service_level is not None:
self.set_service_level(self.options.service_level)

Expand All @@ -723,15 +733,21 @@ def _do_command(self):
handle_exception(_("Error: Unable to retrieve service levels."), e)

def set_service_level(self, service_level):
consumer_uuid = ConsumerIdentity.read().getConsumerId()
consumer_uuid = self.consumerIdentity.read().getConsumerId()
consumer = self.cp.getConsumer(consumer_uuid)
if 'serviceLevel' not in consumer:
systemExit(-1, _("Error: The service-level command is not supported "
"by the server."))
self.cp.updateConsumer(consumer_uuid, service_level=service_level)

def unset_service_level(self):
self.set_service_level("")
print _("Service level preference has been unset")



def show_service_level(self):
consumer_uuid = ConsumerIdentity.read().getConsumerId()
consumer_uuid = self.consumerIdentity.read().getConsumerId()
consumer = self.cp.getConsumer(consumer_uuid)
if 'serviceLevel' not in consumer:
systemExit(-1, _("Error: The service-level command is not supported by "
Expand All @@ -748,7 +764,7 @@ def list_service_levels(self):

org_key = self.options.org
if not org_key:
consumer_uuid = ConsumerIdentity.read().getConsumerId()
consumer_uuid = self.consumerIdentity.read().getConsumerId()
org_key = self.cp.getOwner(consumer_uuid)['key']

try:
Expand Down
9 changes: 9 additions & 0 deletions test/stubs.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,6 +402,15 @@ def setEnvironmentList(self, env_list):
def getEnvironmentList(self, owner):
return self.environment_list

def setConsumer(self, consumer):
self.consumer = consumer

def getConsumer(self, consumerId):
return self.consumer





class StubBackend:
def __init__(self, uep=StubUEP()):
Expand Down
26 changes: 26 additions & 0 deletions test/test_managercli.py
Original file line number Diff line number Diff line change
Expand Up @@ -350,6 +350,32 @@ def test_no_certificates(self):
# i18n_optparse returns 2 on no args
self.assertEquals(e.code, -1)

class TestServiceLevelCommand(TestCliProxyCommand):
command_class = managercli.ServiceLevelCommand

def setUp(self):
TestCliProxyCommand.setUp(self)
self.cc.consumerIdentity = StubConsumerIdentity
self.cc.cp = StubUEP()


def test_service_level_not_supported(self):
self.cc.cp.setConsumer({})
try:
self.cc.set_service_level('JARJAR')
except SystemExit, e:
self.assertEquals(e.code, -1)
else:
self.fail("No Exception Raised")

def test_service_level_supported(self):
self.cc.cp.setConsumer({'serviceLevel' : 'Jarjar'})
try:
self.cc.set_service_level('JRJAR')
except SystemExit, e:
self.fail("Exception Raised")



class TestReleaseCommand(TestCliProxyCommand):
command_class = managercli.ReleaseCommand
Expand Down

0 comments on commit f86a275

Please sign in to comment.