61a40343fd
* Hides previously broken --page-size option * Adds --property to image list for filtering on properties * Adds Visibility, Protected, Owner, Properties/Tags to --long output * Adds api.utils.simple_filter() for selecting matches out of a list of objects * Adds tests for all of the above * Updates image docs There are additional filtering options to be added in later reviews. Change-Id: I32feff0ad61aae749b33621c817658d7dc90c3aa Closes-bug: 1401902
116 lines
3.3 KiB
Python
116 lines
3.3 KiB
Python
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License 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.
|
|
#
|
|
|
|
"""API Utilities Library Tests"""
|
|
|
|
import copy
|
|
|
|
from openstackclient.api import api
|
|
from openstackclient.api import utils as api_utils
|
|
from openstackclient.tests.api import fakes as api_fakes
|
|
|
|
|
|
class TestBaseAPIFilter(api_fakes.TestSession):
|
|
"""The filters can be tested independently"""
|
|
|
|
def setUp(self):
|
|
super(TestBaseAPIFilter, self).setUp()
|
|
self.api = api.BaseAPI(
|
|
session=self.sess,
|
|
endpoint=self.BASE_URL,
|
|
)
|
|
|
|
self.input_list = [
|
|
api_fakes.RESP_ITEM_1,
|
|
api_fakes.RESP_ITEM_2,
|
|
api_fakes.RESP_ITEM_3,
|
|
]
|
|
|
|
def test_simple_filter_none(self):
|
|
output = api_utils.simple_filter(
|
|
)
|
|
self.assertIsNone(output)
|
|
|
|
def test_simple_filter_no_attr(self):
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
)
|
|
self.assertEqual(self.input_list, output)
|
|
|
|
def test_simple_filter_attr_only(self):
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='status',
|
|
)
|
|
self.assertEqual(self.input_list, output)
|
|
|
|
def test_simple_filter_attr_value(self):
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='status',
|
|
value='',
|
|
)
|
|
self.assertEqual([], output)
|
|
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='status',
|
|
value='UP',
|
|
)
|
|
self.assertEqual(
|
|
[api_fakes.RESP_ITEM_1, api_fakes.RESP_ITEM_3],
|
|
output,
|
|
)
|
|
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='fred',
|
|
value='UP',
|
|
)
|
|
self.assertEqual([], output)
|
|
|
|
def test_simple_filter_prop_attr_only(self):
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='b',
|
|
property_field='props',
|
|
)
|
|
self.assertEqual(self.input_list, output)
|
|
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='status',
|
|
property_field='props',
|
|
)
|
|
self.assertEqual(self.input_list, output)
|
|
|
|
def test_simple_filter_prop_attr_value(self):
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='b',
|
|
value=2,
|
|
property_field='props',
|
|
)
|
|
self.assertEqual(
|
|
[api_fakes.RESP_ITEM_1, api_fakes.RESP_ITEM_2],
|
|
output,
|
|
)
|
|
|
|
output = api_utils.simple_filter(
|
|
copy.deepcopy(self.input_list),
|
|
attr='b',
|
|
value=9,
|
|
property_field='props',
|
|
)
|
|
self.assertEqual([], output)
|