#!/usr/bin/env python
# Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"). You
# may not use this file except in compliance with the License. A copy of
# the License is located at
#
#     http://aws.amazon.com/apache2.0/
#
# or in the "license" file accompanying this file. This file is
# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
# ANY KIND, either express or implied. See the License for the specific
# language governing permissions and limitations under the License.
from awscli.testutils import BaseAWSCommandParamsTest


class TestDescribeInstances(BaseAWSCommandParamsTest):
    prefix = 'ec2 describe-instances'

    def test_no_params(self):
        cmdline = self.prefix
        result = {}
        self.assert_params_for_cmd(cmdline, result)

    def test_instance_id(self):
        args = ' --instance-ids i-12345678'
        cmdline = self.prefix + args
        result = {'InstanceIds': ['i-12345678']}
        self.assert_params_for_cmd(cmdline, result)

    def test_instance_ids(self):
        args = ' --instance-ids i-12345678 i-87654321'
        cmdline = self.prefix + args
        result = {'InstanceIds': ['i-12345678', 'i-87654321']}
        self.assert_params_for_cmd(cmdline, result)

    def test_instance_ids_alternate(self):
        # Not required, but will still work if you use JSON.
        args = ' --instance-ids ["i-12345678","i-87654321"]'
        cmdline = self.prefix + args
        result = {'InstanceIds': ['i-12345678', 'i-87654321']}
        self.assert_params_for_cmd(cmdline, result)

    def test_filter_json(self):
        args = """ --filters {"Name":"group-name","Values":["foobar"]}"""
        cmdline = self.prefix + args
        result = {
            'Filters': [
                {'Name': 'group-name', 'Values': ['foobar']},
            ],
        }
        self.assert_params_for_cmd(cmdline, result)

    def test_filter_simple(self):
        args = """ --filters Name=group-name,Values=foobar"""
        cmdline = self.prefix + args
        result = {
            'Filters': [
                {'Name': 'group-name', 'Values': ['foobar']},
            ],
        }
        self.assert_params_for_cmd(cmdline, result)

    def test_filter_values(self):
        args = """ --filters Name=group-name,Values=foobar,fiebaz"""
        cmdline = self.prefix + args
        result = {
            'Filters': [
                {'Name': 'group-name', 'Values': ['foobar', 'fiebaz']},
            ],
        }
        self.assert_params_for_cmd(cmdline, result)

    def test_multiple_filters(self):
        args = (
            ' --filters Name=group-name,Values=foobar '
            'Name=instance-id,Values=i-12345'
        )
        cmdline = self.prefix + args
        result = {
            'Filters': [
                {'Name': 'group-name', 'Values': ['foobar']},
                {'Name': 'instance-id', 'Values': ['i-12345']},
            ],
        }
        self.assert_params_for_cmd(cmdline, result)

    def test_multiple_filters_alternate(self):
        cmdlist = 'ec2 describe-instances'.split()
        cmdlist.extend(
            [
                '--filters',
                'Name = group-name, Values= foobar',
                'Name=instance-id,Values=i-12345',
            ]
        )
        result = {
            'Filters': [
                {'Name': 'group-name', 'Values': ['foobar']},
                {'Name': 'instance-id', 'Values': ['i-12345']},
            ],
        }
        self.assert_params_for_cmd(cmdlist, result)

    def test_page_size(self):
        args = ' --page-size 10'
        cmdline = self.prefix + args
        result = {'MaxResults': 10}
        self.assert_params_for_cmd(cmdline, result)


if __name__ == "__main__":
    unittest.main()
