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))
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")
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")
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")
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")
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))
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")
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")
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)
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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")
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)
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")
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")