ranger/orm/tests/unit/ormcli/test_cmscli.py
am9518 222fd98f16 :[US356394] NC 1.0 - Update Ranger CLI and Keystone code for Ocata
Change-Id: I4532e43b4fe54a8c0d66ca5e96731dd7f851956f
2018-09-24 19:02:19 +00:00

233 lines
9.4 KiB
Python
Executable File

from cStringIO import StringIO
import json
import mock
import requests
import sys
from unittest import TestCase
from orm.orm_client.ormcli import cmscli
from orm.orm_client.ormcli import ormcli
TJ = {'access': {'token': {'id': 'test'}}}
class CmsTests(TestCase):
def setUp(self):
out, sys.stdout, err, sys.stderr = sys.stdout, StringIO(), \
sys.stderr, StringIO()
self.mock_response = mock.Mock()
def respond(self, value, code, headers={}, oy=False):
# Set the response according to the parameter
if oy:
response = mock.Mock()
else:
response = self.mock_response
response.json.return_value = value
response.status_code = code
response.headers = headers
return response
def test_cmd_details(self):
# Set up the args parameter
args = mock.MagicMock()
args.custid = 'test_custid'
args.regionid = 'test_region'
args.userid = 'test_userid'
args.region = 'test_region'
args.user = 'test_user'
args.starts_with = 'test_startswith'
args.contains = 'test_contains'
args.force_delete is False
subcmd_to_result = {
'create_customer': (requests.post, '',),
'delete_customer': (requests.delete, '/%s' % args.custid,),
'update_customer': (requests.put, '/%s' % args.custid,),
'add_region': (requests.post, '/%s/regions' % args.custid,),
'replace_region': (requests.put, '/%s/regions' % args.custid,),
'delete_region': (
requests.delete,
'/%s/regions/%s/%s' % (args.custid, args.regionid,
args.force_delete),),
'add_user': (
requests.post,
'/%s/regions/%s/users' % (args.custid, args.regionid),),
'replace_user': (
requests.put,
'/%s/regions/%s/users' % (args.custid, args.regionid),),
'delete_user': (requests.delete, '/%s/regions/%s/users/%s' % (
args.custid, args.regionid, args.userid),),
'add_default_user': (requests.post, '/%s/users' % args.custid,),
'replace_default_user': (requests.put, '/%s/users' % args.custid,),
'delete_default_user': (
requests.delete, '/%s/users/%s' % (args.custid, args.userid),),
'add_metadata': (requests.post, '/%s/metadata' % args.custid,),
'replace_metadata': (requests.put, '/%s/metadata' % args.custid,),
'get_customer': (requests.get, '/%s' % args.custid,),
'list_customers': (requests.get,
'/?region=%s&user=%s&starts_with=%s'
'&contains=%s' % (args.region,
args.user, args.starts_with,
args.contains))
}
# Assert that each subcommand returns the expected details
for subcmd in subcmd_to_result:
args.subcmd = subcmd
self.assertEqual(subcmd_to_result[subcmd],
cmscli.cmd_details(args))
@mock.patch.object(cmscli.cli_common, 'get_keystone_ep',
return_value=None)
def test_get_token_keystone_ep_not_found(self, mock_get_keystone_ep):
args = mock.MagicMock()
args.username = 'test'
self.assertRaises(cmscli.ConnectionError, cmscli.get_token,
'a', args, 'c')
@mock.patch.object(cmscli.cli_common, 'get_keystone_ep')
@mock.patch.object(cmscli.requests, 'post')
def test_get_token_errors(self, mock_post, mock_get_keystone_ep):
# Bad status code
my_response = mock.MagicMock()
my_response.status_code = 200
mock_post.return_value = my_response
self.assertRaises(cmscli.ConnectionError, cmscli.get_token,
3, mock.MagicMock(), 'c')
# Post fails
mock_post.side_effect = ValueError('test')
self.assertRaises(cmscli.ConnectionError, cmscli.get_token,
3, mock.MagicMock(), 'c')
@mock.patch.object(cmscli.cli_common, 'get_keystone_ep')
@mock.patch.object(cmscli.requests, 'post')
@mock.patch.object(cmscli.requests, 'get')
def test_list_customers(self, mock_get, mock_post, mock_get_keystone_ep):
mock_post.return_value = self.respond(TJ, 200)
mock_get.return_value = self.mock_response
args = ormcli.main('orm cms list_customers t'.split())
sys.stdout.seek(0)
output = sys.stdout.read()
self.assertIn(json.dumps(TJ), output)
# @mock.patch.object(cmscli.cli_common, 'get_keystone_ep')
# @mock.patch.object(cmscli.requests, 'post')
# @mock.patch.object(cmscli.requests, 'get')
# @mock.patch.object(cmscli, 'get_token')
# def test_list_customers_a(self, mock_get_token,
# mock_get, mock_post, mock_get_keystone_ep):
# mock_post.return_value = self.respond(TJ, 200)
# mock_get.return_value = self.mock_response
# mock_get.__name__ = 'a'
# args = ormcli.main('orm cms --verbose list_customers t'.split())
# sys.stdout.seek(0)
# output = sys.stdout.read()
# self.assertIn(json.dumps(TJ), output)
@mock.patch.object(cmscli.cli_common, 'get_keystone_ep')
@mock.patch.object(cmscli.requests, 'post')
@mock.patch.object(cmscli.requests, 'get')
def test_list_customers_e(self, mock_get, mock_post, mock_get_keystone_ep):
mock_post.return_value = self.respond(TJ, 200)
mock_get.side_effect = Exception('e')
with self.assertRaises(SystemExit) as cm:
args = ormcli.main('orm cms list_customers t'.split())
self.assertEqual(cm.exception.code, 1)
sys.stdout.seek(0)
output = sys.stdout.read()
self.assertIn('e', output)
@mock.patch.object(cmscli.cli_common, 'get_keystone_ep')
@mock.patch.object(cmscli.requests, 'post')
@mock.patch.object(cmscli.requests, 'get')
@mock.patch.object(cmscli, 'get_token')
@mock.patch.object(cmscli, 'globals')
def test_list_customers_errors(self, mock_globals, mock_get_token,
mock_get, mock_post,
mock_get_keystone_ep):
mock_post.return_value = self.respond(TJ, 200)
mock_get.return_value = self.respond(TJ, 204, oy=True)
with self.assertRaises(SystemExit) as cm:
args = ormcli.main('orm cms list_customers t'.split())
self.assertEqual(cm.exception.code, 0)
sys.stdout.seek(0)
output = sys.stdout.read()
self.assertEqual('', output)
# def test_parsing(self):
# cli = ormcli.Cli()
# cli.create_parser()
# cli.parse(
# 'orm cms --orm-base-url 12.11.10.9 --port 8832 --timeout 150 '
# 'add_user '
# 'client1 customer1 region1 '
# 'ormcli/tests/data/cms-add-cust.json'.split())
# args = cli.args
# self.assertEqual(args.orm_base_url, '12.11.10.9')
# self.assertEqual(args.port, 8832)
# self.assertEqual(args.timeout, 150)
#
# @mock.patch('requests.post')
# def test_timeout(self, mock_post):
# mock_post.side_effect = Exception("timeout boom")
# cli = ormcli.Cli()
# cli.create_parser()
# cli.parse(
# 'orm cms --faceless add_user client1 customer1 region1 '
# 'ormcli/tests/data/cms-add-cust.json'.split())
# with self.assertRaises(SystemExit) as cm:
# cli.logic()
# self.assertEqual(cm.exception.code, 1)
# sys.stdout.seek(0)
# output = sys.stdout.read()
# self.assertIn('timeout boom', output)
#
# @mock.patch('requests.post')
# @mock.patch.object(cmscli, 'get_token')
# def test_no_keystone(self, mock_get_token, mock_post):
# mock_post.side_effect = Exception("timeout boom")
# cli = ormcli.Cli()
# cli.create_parser()
# cli.parse(
# 'orm cms add_user client1 customer1 region1 '
# 'ormcli/tests/data/cms-add-cust.json'.split())
# with self.assertRaises(SystemExit) as cm:
# cli.logic()
#
# @mock.patch('requests.post')
# @mock.patch.object(cmscli, 'get_token')
# def test_response_code(self, mock_get_token, mock_post):
# cli = ormcli.Cli()
# cli.create_parser()
# cli.parse(
# 'orm cms create_customer client1 '
# 'ormcli/tests/data/cms-add-cust.json'.split())
# resp = self.respond({"access": {"token": {"id": 989}}}, 400)
# mock_post.return_value = resp
# with self.assertRaises(SystemExit) as cm:
# cli.logic()
#
# @mock.patch('requests.post')
# def test_ok(self, mock_post):
# cli = ormcli.Cli()
# cli.create_parser()
# cli.parse(
# 'orm cms create_customer client1 '
# 'ormcli/tests/data/cms-add-cust.json'.split())
# mock_post.return_value = self.respond(
# {"access": {"token": {"id": 989}}}, 200)
@mock.patch('requests.get')
@mock.patch('requests.post')
def test_list_customers(self, mock_post, mock_get):
cli = ormcli.Cli()
cli.create_parser()
cli.parse(
'orm cms list_customers --region 2 --user bob client1'.split())
resp = self.respond('{"Hi, mom"}', 200, {'X-Subject-Token': 989})
mock_post.return_value = self.respond(
{"access": {"token": {"id": 989}}}, 200)