Coverage for manila/tests/scheduler/drivers/test_simple.py: 100%
79 statements
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
« prev ^ index » next coverage.py v7.11.0, created at 2026-02-18 22:19 +0000
1# Copyright 2010 United States Government as represented by the
2# Administrator of the National Aeronautics and Space Administration.
3# All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16"""
17Tests For Simple Scheduler
18"""
20from unittest import mock
22from oslo_config import cfg
24from manila import context
25from manila import db
26from manila import exception
27from manila.scheduler.drivers import base
28from manila.scheduler.drivers import simple
29from manila.share import rpcapi as share_rpcapi
30from manila import test
31from manila.tests import db_utils
32from manila import utils
34CONF = cfg.CONF
37class SimpleSchedulerSharesTestCase(test.TestCase):
38 """Test case for simple scheduler create share method."""
40 def setUp(self):
41 super(SimpleSchedulerSharesTestCase, self).setUp()
42 self.mock_object(share_rpcapi, 'ShareAPI')
43 self.driver = simple.SimpleScheduler()
45 self.context = context.RequestContext('fake_user', 'fake_project')
46 self.admin_context = context.RequestContext('fake_admin_user',
47 'fake_project')
48 self.admin_context.is_admin = True
50 @mock.patch.object(utils, 'service_is_up', mock.Mock(return_value=True))
51 def test_create_share_if_two_services_up(self):
52 share_id = 'fake'
53 fake_share = {'id': share_id, 'size': 1}
54 fake_service_1 = {'disabled': False, 'host': 'fake_host1'}
55 fake_service_2 = {'disabled': False, 'host': 'fake_host2'}
56 fake_result = [(fake_service_1, 2), (fake_service_2, 1)]
57 fake_request_spec = {
58 'share_id': share_id,
59 'share_properties': fake_share,
60 }
61 self.mock_object(db, 'service_get_all_share_sorted',
62 mock.Mock(return_value=fake_result))
63 self.mock_object(base, 'share_update_db',
64 mock.Mock(return_value=db_utils.create_share()))
66 self.driver.schedule_create_share(self.context,
67 fake_request_spec, {})
68 utils.service_is_up.assert_called_once_with(utils.IsAMatcher(dict))
69 db.service_get_all_share_sorted.assert_called_once_with(
70 utils.IsAMatcher(context.RequestContext))
71 base.share_update_db.assert_called_once_with(
72 utils.IsAMatcher(context.RequestContext), share_id, 'fake_host1')
74 def test_create_share_if_services_not_available(self):
75 share_id = 'fake'
76 fake_share = {'id': share_id, 'size': 1}
77 fake_result = []
78 fake_request_spec = {
79 'share_id': share_id,
80 'share_properties': fake_share,
81 }
82 with mock.patch.object(db, 'service_get_all_share_sorted',
83 mock.Mock(return_value=fake_result)):
84 self.assertRaises(exception.NoValidHost,
85 self.driver.schedule_create_share,
86 self.context, fake_request_spec, {})
87 db.service_get_all_share_sorted.assert_called_once_with(
88 utils.IsAMatcher(context.RequestContext))
90 def test_create_share_if_max_gigabytes_exceeded(self):
91 share_id = 'fake'
92 fake_share = {'id': share_id, 'size': 10001}
93 fake_service_1 = {'disabled': False, 'host': 'fake_host1'}
94 fake_service_2 = {'disabled': False, 'host': 'fake_host2'}
95 fake_result = [(fake_service_1, 5), (fake_service_2, 7)]
96 fake_request_spec = {
97 'share_id': share_id,
98 'share_properties': fake_share,
99 }
100 with mock.patch.object(db, 'service_get_all_share_sorted',
101 mock.Mock(return_value=fake_result)):
102 self.assertRaises(exception.NoValidHost,
103 self.driver.schedule_create_share,
104 self.context, fake_request_spec, {})
105 db.service_get_all_share_sorted.assert_called_once_with(
106 utils.IsAMatcher(context.RequestContext))
108 @mock.patch.object(utils, 'service_is_up', mock.Mock(return_value=True))
109 def test_create_share_availability_zone(self):
110 share_id = 'fake'
111 fake_share = {
112 'id': share_id,
113 'size': 1,
114 }
115 fake_instance = {
116 'availability_zone_id': 'fake',
117 }
118 fake_service_1 = {
119 'disabled': False, 'host': 'fake_host1',
120 'availability_zone_id': 'fake',
121 }
122 fake_service_2 = {
123 'disabled': False, 'host': 'fake_host2',
124 'availability_zone_id': 'super_fake',
125 }
126 fake_result = [(fake_service_1, 0), (fake_service_2, 1)]
127 fake_request_spec = {
128 'share_id': share_id,
129 'share_properties': fake_share,
130 'share_instance_properties': fake_instance,
131 }
132 self.mock_object(db, 'service_get_all_share_sorted',
133 mock.Mock(return_value=fake_result))
134 self.mock_object(base, 'share_update_db',
135 mock.Mock(return_value=db_utils.create_share()))
137 self.driver.schedule_create_share(self.context,
138 fake_request_spec, {})
139 utils.service_is_up.assert_called_once_with(fake_service_1)
140 base.share_update_db.assert_called_once_with(
141 utils.IsAMatcher(context.RequestContext), share_id,
142 fake_service_1['host'])
143 db.service_get_all_share_sorted.assert_called_once_with(
144 utils.IsAMatcher(context.RequestContext))
146 @mock.patch.object(utils, 'service_is_up', mock.Mock(return_value=True))
147 def test_create_share_availability_zone_on_host(self):
148 share_id = 'fake'
149 fake_share = {
150 'id': share_id,
151 'availability_zone': 'fake:fake',
152 'size': 1,
153 }
154 fake_service = {'disabled': False, 'host': 'fake'}
155 fake_request_spec = {
156 'share_id': share_id,
157 'share_properties': fake_share,
158 }
159 self.mock_object(db, 'service_get_all_share_sorted',
160 mock.Mock(return_value=[(fake_service, 1)]))
161 self.mock_object(base, 'share_update_db',
162 mock.Mock(return_value=db_utils.create_share()))
164 self.driver.schedule_create_share(self.admin_context,
165 fake_request_spec, {})
166 utils.service_is_up.assert_called_once_with(fake_service)
167 db.service_get_all_share_sorted.assert_called_once_with(
168 utils.IsAMatcher(context.RequestContext))
169 base.share_update_db.assert_called_once_with(
170 utils.IsAMatcher(context.RequestContext), share_id, 'fake')