1# Copyright (c) 2016 IBM 2# 3# Licensed under the Apache License, Version 2.0 (the "License"); 4# you may not use this file except in compliance with the License. 5# You may obtain a copy of the License at 6# 7# http://www.apache.org/licenses/LICENSE-2.0 8# 9# Unless required by applicable law or agreed to in writing, software 10# distributed under the License is distributed on an "AS IS" BASIS, 11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12# See the License for the specific language governing permissions and 13# limitations under the License. 14 15from openstack.cloud import exc 16from openstack.tests.functional import base 17 18 19class TestRangeSearch(base.BaseFunctionalTest): 20 21 def _filter_m1_flavors(self, results): 22 """The m1 flavors are the original devstack flavors""" 23 new_results = [] 24 for flavor in results: 25 if flavor['name'].startswith("m1."): 26 new_results.append(flavor) 27 return new_results 28 29 def test_range_search_bad_range(self): 30 flavors = self.user_cloud.list_flavors(get_extra=False) 31 self.assertRaises( 32 exc.OpenStackCloudException, 33 self.user_cloud.range_search, flavors, {"ram": "<1a0"}) 34 35 def test_range_search_exact(self): 36 flavors = self.user_cloud.list_flavors(get_extra=False) 37 result = self.user_cloud.range_search(flavors, {"ram": "4096"}) 38 self.assertIsInstance(result, list) 39 # should only be 1 m1 flavor with 4096 ram 40 result = self._filter_m1_flavors(result) 41 self.assertEqual(1, len(result)) 42 self.assertEqual("m1.medium", result[0]['name']) 43 44 def test_range_search_min(self): 45 flavors = self.user_cloud.list_flavors(get_extra=False) 46 result = self.user_cloud.range_search(flavors, {"ram": "MIN"}) 47 self.assertIsInstance(result, list) 48 self.assertEqual(1, len(result)) 49 # older devstack does not have cirros256 50 self.assertIn(result[0]['name'], ('cirros256', 'm1.tiny')) 51 52 def test_range_search_max(self): 53 flavors = self.user_cloud.list_flavors(get_extra=False) 54 result = self.user_cloud.range_search(flavors, {"ram": "MAX"}) 55 self.assertIsInstance(result, list) 56 self.assertEqual(1, len(result)) 57 self.assertEqual("m1.xlarge", result[0]['name']) 58 59 def test_range_search_lt(self): 60 flavors = self.user_cloud.list_flavors(get_extra=False) 61 result = self.user_cloud.range_search(flavors, {"ram": "<1024"}) 62 self.assertIsInstance(result, list) 63 # should only be 1 m1 flavor with <1024 ram 64 result = self._filter_m1_flavors(result) 65 self.assertEqual(1, len(result)) 66 self.assertEqual("m1.tiny", result[0]['name']) 67 68 def test_range_search_gt(self): 69 flavors = self.user_cloud.list_flavors(get_extra=False) 70 result = self.user_cloud.range_search(flavors, {"ram": ">4096"}) 71 self.assertIsInstance(result, list) 72 # should only be 2 m1 flavors with >4096 ram 73 result = self._filter_m1_flavors(result) 74 self.assertEqual(2, len(result)) 75 flavor_names = [r['name'] for r in result] 76 self.assertIn("m1.large", flavor_names) 77 self.assertIn("m1.xlarge", flavor_names) 78 79 def test_range_search_le(self): 80 flavors = self.user_cloud.list_flavors(get_extra=False) 81 result = self.user_cloud.range_search(flavors, {"ram": "<=4096"}) 82 self.assertIsInstance(result, list) 83 # should only be 3 m1 flavors with <=4096 ram 84 result = self._filter_m1_flavors(result) 85 self.assertEqual(3, len(result)) 86 flavor_names = [r['name'] for r in result] 87 self.assertIn("m1.tiny", flavor_names) 88 self.assertIn("m1.small", flavor_names) 89 self.assertIn("m1.medium", flavor_names) 90 91 def test_range_search_ge(self): 92 flavors = self.user_cloud.list_flavors(get_extra=False) 93 result = self.user_cloud.range_search(flavors, {"ram": ">=4096"}) 94 self.assertIsInstance(result, list) 95 # should only be 3 m1 flavors with >=4096 ram 96 result = self._filter_m1_flavors(result) 97 self.assertEqual(3, len(result)) 98 flavor_names = [r['name'] for r in result] 99 self.assertIn("m1.medium", flavor_names) 100 self.assertIn("m1.large", flavor_names) 101 self.assertIn("m1.xlarge", flavor_names) 102 103 def test_range_search_multi_1(self): 104 flavors = self.user_cloud.list_flavors(get_extra=False) 105 result = self.user_cloud.range_search( 106 flavors, {"ram": "MIN", "vcpus": "MIN"}) 107 self.assertIsInstance(result, list) 108 self.assertEqual(1, len(result)) 109 # older devstack does not have cirros256 110 self.assertIn(result[0]['name'], ('cirros256', 'm1.tiny')) 111 112 def test_range_search_multi_2(self): 113 flavors = self.user_cloud.list_flavors(get_extra=False) 114 result = self.user_cloud.range_search( 115 flavors, {"ram": "<1024", "vcpus": "MIN"}) 116 self.assertIsInstance(result, list) 117 result = self._filter_m1_flavors(result) 118 self.assertEqual(1, len(result)) 119 flavor_names = [r['name'] for r in result] 120 self.assertIn("m1.tiny", flavor_names) 121 122 def test_range_search_multi_3(self): 123 flavors = self.user_cloud.list_flavors(get_extra=False) 124 result = self.user_cloud.range_search( 125 flavors, {"ram": ">=4096", "vcpus": "<6"}) 126 self.assertIsInstance(result, list) 127 result = self._filter_m1_flavors(result) 128 self.assertEqual(2, len(result)) 129 flavor_names = [r['name'] for r in result] 130 self.assertIn("m1.medium", flavor_names) 131 self.assertIn("m1.large", flavor_names) 132 133 def test_range_search_multi_4(self): 134 flavors = self.user_cloud.list_flavors(get_extra=False) 135 result = self.user_cloud.range_search( 136 flavors, {"ram": ">=4096", "vcpus": "MAX"}) 137 self.assertIsInstance(result, list) 138 self.assertEqual(1, len(result)) 139 # This is the only result that should have max vcpu 140 self.assertEqual("m1.xlarge", result[0]['name']) 141