Skip to content
This repository has been archived by the owner on Aug 22, 2023. It is now read-only.

Commit

Permalink
Merge 5f0f4d8 into 533d010
Browse files Browse the repository at this point in the history
  • Loading branch information
outime committed Aug 31, 2016
2 parents 533d010 + 5f0f4d8 commit 16eec13
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 3 deletions.
12 changes: 9 additions & 3 deletions piu/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -318,14 +318,20 @@ def request_access_interactive():
instance_list.append({'name': name, 'stack_name': stack_name, 'stack_version': stack_version,
'instance_id': r.instance_id, 'private_ip': r.private_ip_address})
instance_count = len(instance_list)
if instance_count == 0:
raise click.ClickException('No running instances were found.')
sorted_instance_list = sorted(instance_list, key=operator.itemgetter('stack_name', 'stack_version'))
{d.update({'index': idx}) for idx, d in enumerate(sorted_instance_list, start=1)}
print()
print_table('index name stack_name stack_version private_ip instance_id'.split(), sorted_instance_list)
print()
allowed_choices = ["{}".format(n) for n in range(1, instance_count + 1)]
instance_index = int(click.prompt('Choose an instance (1-{})'.format(instance_count),
type=click.Choice(allowed_choices))) - 1
if instance_count > 1:
allowed_choices = ["{}".format(n) for n in range(1, instance_count + 1)]
instance_index = int(click.prompt('Choose an instance (1-{})'.format(instance_count),
type=click.Choice(allowed_choices))) - 1
else:
click.confirm('Connect to {}?'.format(sorted_instance_list[0]['name']), default=True, abort=True)
instance_index = 0
host = sorted_instance_list[instance_index]['private_ip']
reason = click.prompt('Reason', default='Troubleshooting')
return (host, reason)
Expand Down
41 changes: 41 additions & 0 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -171,3 +171,44 @@ def test_interactive_success(monkeypatch):
result = runner.invoke(cli, ['request-access', '--interactive', '--even-url=https://localhost/', '--odd-host=odd.example.org'], input=input_stream, catch_exceptions=False)

assert request_access.called


def test_interactive_single_instance_success(monkeypatch):
ec2 = MagicMock()
request_access = MagicMock()

response = []
response.append(MagicMock(**{'instance_id': 'i-123456', 'private_ip_address': '172.31.10.10', 'tags': [{'Key': 'Name', 'Value': 'stack1-0o1o0'}, {'Key': 'StackVersion', 'Value': '0o1o0'}, {'Key': 'StackName', 'Value': 'stack1'}]}))
ec2.instances.filter = MagicMock(return_value=response)
boto3 = MagicMock()
monkeypatch.setattr('boto3.resource', MagicMock(return_value=ec2))
monkeypatch.setattr('piu.cli._request_access', MagicMock(side_effect=request_access))

runner = CliRunner()
input_stream = '\n'.join(['eu-west-1', '', 'Troubleshooting']) + '\n'

with runner.isolated_filesystem():
result = runner.invoke(cli, ['request-access', '--interactive', '--even-url=https://localhost/', '--odd-host=odd.example.org'], input=input_stream, catch_exceptions=False)

assert request_access.called



def test_interactive_no_instances_failure(monkeypatch):
ec2 = MagicMock()
request_access = MagicMock()

response = []
ec2.instances.filter = MagicMock(return_value=response)
boto3 = MagicMock()
monkeypatch.setattr('boto3.resource', MagicMock(return_value=ec2))
monkeypatch.setattr('piu.cli._request_access', MagicMock(side_effect=request_access))

runner = CliRunner()
input_stream = '\neu-west-1\n'

with runner.isolated_filesystem():
result = runner.invoke(cli, ['request-access', '--interactive', '--even-url=https://localhost/', '--odd-host=odd.example.org'], input=input_stream, catch_exceptions=False)

assert result.exception
assert 'Error: No running instances were found.' in result.output

0 comments on commit 16eec13

Please sign in to comment.