예제 #1
0
    def test_show_plan(self, stdout, Request, urlopen):
        lines = []
        stdout.write.side_effect = lambda data, **kw: lines.append(data)
        plan_data = u"""{"name":"small",
                         "description":"small stuff",
                         "config":{"SERVICEOFFERINGID":"abc123",
                                   "DO_STUFF":true,
                                   "PUBLIC_NETWORK_INDEX":0,
                                   "CLOUDSTACK_ZONE_ID":"__wow__"}}"""
        request = mock.Mock()
        Request.return_value = request
        result = mock.Mock()
        result.getcode.return_value = 200
        result.read.return_value = plan_data
        urlopen.return_value = result
        admin_plugin.handle_plan_flavor("plan", ["show", "-s", self.service_name, "small"])
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/plans/small")
        request.add_header.assert_any_call("Authorization", "bearer " + self.token)
        self.assertEqual("GET", request.get_method())
        expected_output = u"""Name: small
Description: small stuff
Config:

  CLOUDSTACK_ZONE_ID=__wow__
  DO_STUFF=True
  PUBLIC_NETWORK_INDEX=0
  SERVICEOFFERINGID=abc123
"""
        self.assertEqual(expected_output, "".join(lines))
예제 #2
0
    def test_update_plan_failure(self, stderr, Request, urlopen):
        request = mock.Mock()
        Request.return_value = request

        plan = {"name": "small", "description": "smalll vms", "config": {}}
        old_retrieve = admin_plugin._retrieve_plan_flavor
        admin_plugin._retrieve_plan_flavor = lambda option, service_name, name: plan

        def recover_retrieve():
            admin_plugin._retrieve_plan_flavor = old_retrieve
        self.addCleanup(recover_retrieve)

        result = mock.Mock()
        result.getcode.return_value = 404
        result.read.return_value = "plan not found\n"
        urlopen.return_value = result
        with self.assertRaises(SystemExit) as cm:
            admin_plugin.handle_plan_flavor("plan", ["update", "-s", self.service_name, "-n", "small",
                                                     "-d", "smalll vms", "-c", "SERVICE=abcdef-123"])
        exc = cm.exception
        self.assertEqual(1, exc.code)
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/plans/small")
        request.add_header.assert_any_call("Authorization", "bearer " + self.token)
        request.add_header.assert_any_call("Content-Type",
                                           "application/x-www-form-urlencoded")
        self.assertEqual("PUT", request.get_method())
        stderr.write.assert_called_with("ERROR: plan not found\n")
예제 #3
0
 def test_create_plan(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 201
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor("plan", ["create", "-s", self.service_name, "-n", "small",
                                              "-d", "smalll vms", "-c",
                                              'SERVICE=abcdef-123 NAME="something nice" '
                                              'DATA="go go go" DATE=\'2015\''])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_any_call("Authorization", "bearer " + self.token)
     request.add_header.assert_any_call("Content-Type",
                                        "application/x-www-form-urlencoded")
     params = {
         "name": "small",
         "description": "smalll vms",
         "config": json.dumps({"SERVICE": "abcdef-123",
                               "NAME": "something nice",
                               "DATA": "go go go",
                               "DATE": "2015"}),
     }
     request.add_data.assert_called_with(urllib.urlencode(params))
     self.assertEqual("POST", request.get_method())
     stdout.write.assert_called_with("Plan successfully created\n")
예제 #4
0
 def test_create_plan(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 201
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor("plan", [
         "create", "-s", self.service_name, "-n", "small", "-d",
         "smalll vms", "-c", 'SERVICE=abcdef-123 NAME="something nice" '
         'DATA="go go go" DATE=\'2015\''
     ])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_any_call("Authorization",
                                        "bearer " + self.token)
     request.add_header.assert_any_call(
         "Content-Type", "application/x-www-form-urlencoded")
     params = {
         "name":
         "small",
         "description":
         "smalll vms",
         "config":
         json.dumps({
             "SERVICE": "abcdef-123",
             "NAME": "something nice",
             "DATA": "go go go",
             "DATE": "2015"
         }),
     }
     request.add_data.assert_called_with(urllib.urlencode(params))
     self.assertEqual("POST", request.get_method())
     stdout.write.assert_called_with("Plan successfully created\n")
예제 #5
0
    def test_update_plan_failure(self, stderr, Request, urlopen):
        request = mock.Mock()
        Request.return_value = request

        plan = {"name": "small", "description": "smalll vms", "config": {}}
        old_retrieve = admin_plugin._retrieve_plan_flavor
        admin_plugin._retrieve_plan_flavor = lambda option, service_name, name: plan

        def recover_retrieve():
            admin_plugin._retrieve_plan_flavor = old_retrieve

        self.addCleanup(recover_retrieve)

        result = mock.Mock()
        result.getcode.return_value = 404
        result.read.return_value = "plan not found\n"
        urlopen.return_value = result
        with self.assertRaises(SystemExit) as cm:
            admin_plugin.handle_plan_flavor("plan", [
                "update", "-s", self.service_name, "-n", "small", "-d",
                "smalll vms", "-c", "SERVICE=abcdef-123"
            ])
        exc = cm.exception
        self.assertEqual(1, exc.code)
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/plans/small")
        request.add_header.assert_any_call("Authorization",
                                           "bearer " + self.token)
        request.add_header.assert_any_call(
            "Content-Type", "application/x-www-form-urlencoded")
        self.assertEqual("PUT", request.get_method())
        stderr.write.assert_called_with("ERROR: plan not found\n")
예제 #6
0
    def test_show_plan(self, stdout, Request, urlopen):
        lines = []
        stdout.write.side_effect = lambda data, **kw: lines.append(data)
        plan_data = u"""{"name":"small",
                         "description":"small stuff",
                         "config":{"SERVICEOFFERINGID":"abc123",
                                   "DO_STUFF":true,
                                   "PUBLIC_NETWORK_INDEX":0,
                                   "CLOUDSTACK_ZONE_ID":"__wow__"}}"""
        request = mock.Mock()
        Request.return_value = request
        result = mock.Mock()
        result.getcode.return_value = 200
        result.read.return_value = plan_data
        urlopen.return_value = result
        admin_plugin.handle_plan_flavor(
            "plan", ["show", "-s", self.service_name, "small"])
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/plans/small")
        request.add_header.assert_any_call("Authorization",
                                           "bearer " + self.token)
        self.assertEqual("GET", request.get_method())
        expected_output = u"""Name: small
Description: small stuff
Config:

  CLOUDSTACK_ZONE_ID=__wow__
  DO_STUFF=True
  PUBLIC_NETWORK_INDEX=0
  SERVICEOFFERINGID=abc123
"""
        self.assertEqual(expected_output, "".join(lines))
예제 #7
0
 def test_plans_with_invalid_option(self, stderr, stdout, Request, urlopen):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["invalid"])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with("plan: error: invalid choice: 'invalid' "
                                     "(choose from 'list', 'create', 'update', 'delete', 'show')\n")
예제 #8
0
 def test_plans_as_default_option_with_no_args_failure(
         self, stderr, stdout, Request, urlopen):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", [])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with("plan: error: too few arguments\n")
예제 #9
0
 def test_list_flavors(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 200
     result.read.return_value = """[
         {"name":"small","description":"small vm","config":{"serviceofferingid":"abcdef-123"}},
         {"name":"medium","description":"medium vm","config":{"serviceofferingid":"abcdef-126"}}
     ]"""
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor("flavor",
                                     ["list", "-s", self.service_name])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/flavors")
     request.add_header.assert_called_with("Authorization",
                                           "bearer " + self.token)
     self.assertEqual("GET", request.get_method())
     urlopen.assert_called_with(request)
     expected_calls = [
         mock.call(
             "List of available flavors (use flavor show for details):\n\n"
         ),
         mock.call("small\t\tsmall vm\n"),
         mock.call("medium\t\tmedium vm\n"),
     ]
     self.assertEqual(expected_calls, stdout.write.call_args_list)
예제 #10
0
 def test_update_plan_invalid_config(self, stderr):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["update", "-s", self.service_name, "-n", "small",
                                                  "-d", "smalll vms", "-c", "SERVICE"])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with(
         "ERROR: Invalid config format, supported format is KEY=VALUE\n")
예제 #11
0
 def test_plans_with_invalid_option(self, stderr, stdout, Request, urlopen):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["invalid"])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with(
         "plan: error: invalid choice: 'invalid' "
         "(choose from 'list', 'create', 'update', 'delete', 'show')\n")
예제 #12
0
 def test_delete_plan_invalid_args(self, stderr):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor(
             "plan", ["delete", "-s", self.service_name])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with(
         "plan delete: error: too few arguments\n")
예제 #13
0
    def test_update_plan(self, stdout, Request, urlopen):
        request = mock.Mock()
        Request.return_value = request
        result = mock.Mock()
        result.getcode.return_value = 200
        urlopen.return_value = result

        plan = {
            "name": "small",
            "description": "smalll vms",
            "config": {
                "SERVICE": "abcd",
                "GREETINGS": "hello"
            }
        }
        old_retrieve = admin_plugin._retrieve_plan_flavor
        admin_plugin._retrieve_plan_flavor = lambda option, service_name, name: plan

        def recover_retrieve():
            admin_plugin._retrieve_plan_flavor = old_retrieve

        self.addCleanup(recover_retrieve)

        admin_plugin.handle_plan_flavor("plan", [
            "update", "-s", self.service_name, "-n", "small", "-d",
            "smalll vms", "-c", '''SERVICE=abcdef-123 NAME="some thing" '''
            '''DATA="go go go" DATE=\'2015\' wat="" '''
            '''RANDOM_BASE64=bm90aGluZyB0byBzZWUgaGVyZQo= '''
            '''GREETINGS=""'''
        ])
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/plans/small")
        request.add_header.assert_any_call("Authorization",
                                           "bearer " + self.token)
        request.add_header.assert_any_call(
            "Content-Type", "application/x-www-form-urlencoded")

        raw_params = request.add_data.call_args[0][0]
        parsed_params = urlparse.parse_qs(raw_params)
        parsed_params["description"] = unicode(parsed_params["description"][0])
        parsed_params["config"] = json.loads(parsed_params["config"][0])

        expected_params = {
            "description": u"smalll vms",
            "config": {
                "SERVICE": "abcdef-123",
                "NAME": "some thing",
                "DATA": "go go go",
                "DATE": "2015",
                "RANDOM_BASE64": "bm90aGluZyB0byBzZWUgaGVyZQo="
            },
        }
        self.assertEqual(expected_params, parsed_params)
        self.assertEqual("PUT", request.get_method())
        stdout.write.assert_called_with("Plan successfully updated\n")
예제 #14
0
 def test_update_plan_invalid_config(self, stderr):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", [
             "update", "-s", self.service_name, "-n", "small", "-d",
             "smalll vms", "-c", "SERVICE"
         ])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with(
         "ERROR: Invalid config format, supported format is KEY=VALUE\n")
예제 #15
0
 def test_delete_plan(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 200
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor("plan", ["delete", "-s", self.service_name, "medium"])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans/medium")
     request.add_header.assert_any_call("Authorization", "bearer " + self.token)
     self.assertEqual("DELETE", request.get_method())
     stdout.write.assert_called_with("Plan successfully deleted\n")
예제 #16
0
 def test_delete_plan(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 200
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor(
         "plan", ["delete", "-s", self.service_name, "medium"])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans/medium")
     request.add_header.assert_any_call("Authorization",
                                        "bearer " + self.token)
     self.assertEqual("DELETE", request.get_method())
     stdout.write.assert_called_with("Plan successfully deleted\n")
예제 #17
0
 def test_delete_plan_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 404
     result.read.return_value = "plan not found\n"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["delete", "-s", self.service_name, "medium"])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans/medium")
     request.add_header.assert_any_call("Authorization", "bearer " + self.token)
     self.assertEqual("DELETE", request.get_method())
     stderr.write.assert_called_with("ERROR: plan not found\n")
예제 #18
0
    def test_update_flavor(self, stdout, Request, urlopen):
        request = mock.Mock()
        Request.return_value = request
        result = mock.Mock()
        result.getcode.return_value = 200
        urlopen.return_value = result

        flavor = {"name": "vanilla", "description": "nginx 1.12",
                  "config": {"NGINX": "1.12", "GREETINGS": "hello"}}
        old_retrieve = admin_plugin._retrieve_plan_flavor
        admin_plugin._retrieve_plan_flavor = lambda option, service_name, name: flavor

        def recover_retrieve():
            admin_plugin._retrieve_plan_flavor = old_retrieve
        self.addCleanup(recover_retrieve)

        admin_plugin.handle_plan_flavor("flavor", ["update", "-s", self.service_name, "-n", "vanilla", "-d",
                                                   "nginx 1.12", "-c",
                                                   '''NGINX=1.12 NAME="some thing" '''
                                                   '''DATA="go go go" DATE=\'2015\' wat="" '''
                                                   '''RANDOM_BASE64=bm90aGluZyB0byBzZWUgaGVyZQo= '''
                                                   '''GREETINGS=""'''])
        Request.assert_called_with(self.target +
                                   "services/proxy/service/rpaas?" +
                                   "callback=/admin/flavors/vanilla")
        request.add_header.assert_any_call("Authorization", "bearer " + self.token)
        request.add_header.assert_any_call("Content-Type",
                                           "application/x-www-form-urlencoded")

        raw_params = request.add_data.call_args[0][0]
        parsed_params = urlparse.parse_qs(raw_params)
        parsed_params["description"] = unicode(parsed_params["description"][0])
        parsed_params["config"] = json.loads(parsed_params["config"][0])

        expected_params = {
            "description": u"nginx 1.12",
            "config": {"NGINX": "1.12",
                       "NAME": "some thing",
                       "DATA": "go go go",
                       "DATE": "2015",
                       "RANDOM_BASE64": "bm90aGluZyB0byBzZWUgaGVyZQo="},
        }
        self.assertEqual(expected_params, parsed_params)
        self.assertEqual("PUT", request.get_method())
        stdout.write.assert_called_with("Flavor successfully updated\n")
예제 #19
0
 def test_delete_plan_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 404
     result.read.return_value = "plan not found\n"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor(
             "plan", ["delete", "-s", self.service_name, "medium"])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans/medium")
     request.add_header.assert_any_call("Authorization",
                                        "bearer " + self.token)
     self.assertEqual("DELETE", request.get_method())
     stderr.write.assert_called_with("ERROR: plan not found\n")
예제 #20
0
 def test_list_plans_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 400
     result.read.return_value = "Something went wrong"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["list", "-s", self.service_name])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_called_with("Authorization",
                                           "bearer " + self.token)
     self.assertEqual("GET", request.get_method())
     urlopen.assert_called_with(request)
     stderr.write.assert_called_with("ERROR: Something went wrong\n")
예제 #21
0
 def test_create_plan_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 409
     result.read.return_value = "Plan already exists\n"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["create", "-s", self.service_name, "-n", "small",
                                                  "-d", "smalll vms", "-c", "SERVICE=abcdef-123"])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_any_call("Authorization", "bearer " + self.token)
     request.add_header.assert_any_call("Content-Type",
                                        "application/x-www-form-urlencoded")
     self.assertEqual("POST", request.get_method())
     stderr.write.assert_called_with("ERROR: Plan already exists\n")
예제 #22
0
 def test_list_plans_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 400
     result.read.return_value = "Something went wrong"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan",
                                         ["list", "-s", self.service_name])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_called_with("Authorization",
                                           "bearer " + self.token)
     self.assertEqual("GET", request.get_method())
     urlopen.assert_called_with(request)
     stderr.write.assert_called_with("ERROR: Something went wrong\n")
예제 #23
0
 def test_create_plan_failure(self, stderr, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 409
     result.read.return_value = "Plan already exists\n"
     urlopen.return_value = result
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", [
             "create", "-s", self.service_name, "-n", "small", "-d",
             "smalll vms", "-c", "SERVICE=abcdef-123"
         ])
     exc = cm.exception
     self.assertEqual(1, exc.code)
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/plans")
     request.add_header.assert_any_call("Authorization",
                                        "bearer " + self.token)
     request.add_header.assert_any_call(
         "Content-Type", "application/x-www-form-urlencoded")
     self.assertEqual("POST", request.get_method())
     stderr.write.assert_called_with("ERROR: Plan already exists\n")
예제 #24
0
 def test_list_flavors(self, stdout, Request, urlopen):
     request = mock.Mock()
     Request.return_value = request
     result = mock.Mock()
     result.getcode.return_value = 200
     result.read.return_value = """[
         {"name":"small","description":"small vm","config":{"serviceofferingid":"abcdef-123"}},
         {"name":"medium","description":"medium vm","config":{"serviceofferingid":"abcdef-126"}}
     ]"""
     urlopen.return_value = result
     admin_plugin.handle_plan_flavor("flavor", ["list", "-s", self.service_name])
     Request.assert_called_with(self.target +
                                "services/proxy/service/rpaas?" +
                                "callback=/admin/flavors")
     request.add_header.assert_called_with("Authorization",
                                           "bearer " + self.token)
     self.assertEqual("GET", request.get_method())
     urlopen.assert_called_with(request)
     expected_calls = [
         mock.call("List of available flavors (use flavor show for details):\n\n"),
         mock.call("small\t\tsmall vm\n"),
         mock.call("medium\t\tmedium vm\n"),
     ]
     self.assertEqual(expected_calls, stdout.write.call_args_list)
예제 #25
0
 def test_plans_as_default_option_with_no_args_failure(self, stderr, stdout, Request, urlopen):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", [])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with("plan: error: too few arguments\n")
예제 #26
0
 def test_delete_plan_invalid_args(self, stderr):
     with self.assertRaises(SystemExit) as cm:
         admin_plugin.handle_plan_flavor("plan", ["delete", "-s", self.service_name])
     exc = cm.exception
     self.assertEqual(2, exc.code)
     stderr.write.assert_called_with("plan delete: error: too few arguments\n")