def test_ssh_into_instance(self, call_mock, _get_ssh_file_mock,
                               authorize_ssh_mock,
                               describe_security_group_mock,
                               describe_instance_mock):
        describe_instance_mock.return_value = mock_responses.DESCRIBE_INSTANCES_RESPONSE[
            'Reservations'][0]['Instances'][0]
        describe_security_group_mock.return_value = mock_responses.DESCRIBE_SECURITY_GROUPS_RESPONSE[
            'SecurityGroups'][0]
        _get_ssh_file_mock.return_value = 'aws-eb-us-west-2'
        call_mock.return_value = 0

        sshops.ssh_into_instance('instance-id')
    def test_ssh_into_instance__neither_public_nor_private_ip_found(
            self, call_mock, _get_ssh_file_mock, describe_instance_mock):
        describe_instance_response = deepcopy(
            mock_responses.DESCRIBE_INSTANCES_RESPONSE['Reservations'][0]
            ['Instances'][0])
        del describe_instance_response['PublicIpAddress']
        del describe_instance_response['PrivateIpAddress']
        describe_instance_mock.return_value = describe_instance_response
        _get_ssh_file_mock.return_value = 'aws-eb-us-west-2'
        call_mock.return_value = 0

        with self.assertRaises(sshops.NotFoundError):
            sshops.ssh_into_instance('instance-id')
    def test_ssh_into_instance__ssh_fails(self, call_mock, _get_ssh_file_mock,
                                          authorize_ssh_mock,
                                          describe_security_group_mock,
                                          describe_instance_mock):
        describe_instance_mock.return_value = mock_responses.DESCRIBE_INSTANCES_RESPONSE[
            'Reservations'][0]['Instances'][0]
        describe_security_group_mock.return_value = mock_responses.DESCRIBE_SECURITY_GROUPS_RESPONSE[
            'SecurityGroups'][0]
        _get_ssh_file_mock.return_value = 'aws-eb-us-west-2'
        call_mock.return_value = 1

        with self.assertRaises(sshops.CommandError) as context_manager:
            sshops.ssh_into_instance('instance-id')
        self.assertEqual('An error occurred while running: ssh.',
                         str(context_manager.exception))
    def test_ssh_into_instance__uses_private_address(
            self, call_mock, _get_ssh_file_mock, authorize_ssh_mock,
            describe_security_group_mock, describe_instance_mock):
        describe_instance_response = deepcopy(
            mock_responses.DESCRIBE_INSTANCES_RESPONSE['Reservations'][0]
            ['Instances'][0])
        del describe_instance_response['PublicIpAddress']
        describe_instance_mock.return_value = describe_instance_response
        describe_security_group_mock.return_value = mock_responses.DESCRIBE_SECURITY_GROUPS_RESPONSE[
            'SecurityGroups'][0]
        _get_ssh_file_mock.return_value = 'aws-eb-us-west-2'
        call_mock.return_value = 0

        sshops.ssh_into_instance('instance-id')
        call_mock.assert_called_once_with(
            ['ssh', '-i', 'aws-eb-us-west-2', '[email protected]'])
    def test_ssh_into_instance__no_ssh_rule_exists(
            self, call_mock, _get_ssh_file_mock, authorize_ssh_mock,
            revoke_ssh_mock, describe_security_group_mock,
            describe_instance_mock):
        describe_instance_response = deepcopy(
            mock_responses.DESCRIBE_INSTANCES_RESPONSE['Reservations'][0]
            ['Instances'][0])
        describe_instance_mock.return_value = describe_instance_response
        describe_security_group_mock.return_value = mock_responses.DESCRIBE_SECURITY_GROUPS_RESPONSE[
            'SecurityGroups'][1]
        _get_ssh_file_mock.return_value = 'aws-eb-us-west-2'
        call_mock.return_value = 0

        sshops.ssh_into_instance('instance-id')
        authorize_ssh_mock.assert_called_once_with('sg-12312313')
        revoke_ssh_mock.assert_called_once_with('sg-12312313')
        call_mock.assert_called_once_with(
            ['ssh', '-i', 'aws-eb-us-west-2', '[email protected]'])
 def test_ssh_into_instance__no_key_pair(self, describe_instance_mock):
     describe_instance_mock.return_value = dict()
     with self.assertRaises(sshops.NoKeypairError):
         sshops.ssh_into_instance('some-instance-id')