@@ -62,6 +62,8 @@ def __init__(self, **kwargs):
6262 self .messages .resource_class = fakes .FakeResource (None , {})
6363 self .resource_filters = mock .Mock ()
6464 self .resource_filters .resource_class = fakes .FakeResource (None , {})
65+ self .qos_specs = mock .Mock ()
66+ self .qos_specs .resource_class = fakes .FakeResource (None , {})
6567 self .restores = mock .Mock ()
6668 self .restores .resource_class = fakes .FakeResource (None , {})
6769 self .transfers = mock .Mock ()
@@ -1138,6 +1140,95 @@ def get_volume_attachments(attachments=None, count=2):
11381140 return mock .Mock (side_effect = attachments )
11391141
11401142
1143+ def create_one_qos (attrs = None ):
1144+ """Create a fake Qos specification.
1145+
1146+ :param dict attrs:
1147+ A dictionary with all attributes
1148+ :return:
1149+ A FakeResource object with id, name, consumer, etc.
1150+ """
1151+ attrs = attrs or {}
1152+
1153+ # Set default attributes.
1154+ qos_info = {
1155+ "id" : 'qos-id-' + uuid .uuid4 ().hex ,
1156+ "name" : 'qos-name-' + uuid .uuid4 ().hex ,
1157+ "consumer" : 'front-end' ,
1158+ "specs" : {"foo" : "bar" , "iops" : "9001" },
1159+ }
1160+
1161+ # Overwrite default attributes.
1162+ qos_info .update (attrs )
1163+
1164+ qos = fakes .FakeResource (info = copy .deepcopy (qos_info ), loaded = True )
1165+ return qos
1166+
1167+
1168+ def create_one_qos_association (attrs = None ):
1169+ """Create a fake Qos specification association.
1170+
1171+ :param dict attrs:
1172+ A dictionary with all attributes
1173+ :return:
1174+ A FakeResource object with id, name, association_type, etc.
1175+ """
1176+ attrs = attrs or {}
1177+
1178+ # Set default attributes.
1179+ qos_association_info = {
1180+ "id" : 'type-id-' + uuid .uuid4 ().hex ,
1181+ "name" : 'type-name-' + uuid .uuid4 ().hex ,
1182+ "association_type" : 'volume_type' ,
1183+ }
1184+
1185+ # Overwrite default attributes.
1186+ qos_association_info .update (attrs )
1187+
1188+ qos_association = fakes .FakeResource (
1189+ info = copy .deepcopy (qos_association_info ), loaded = True
1190+ )
1191+ return qos_association
1192+
1193+
1194+ def create_qoses (attrs = None , count = 2 ):
1195+ """Create multiple fake Qos specifications.
1196+
1197+ :param dict attrs:
1198+ A dictionary with all attributes
1199+ :param int count:
1200+ The number of Qos specifications to fake
1201+ :return:
1202+ A list of FakeResource objects faking the Qos specifications
1203+ """
1204+ qoses = []
1205+ for i in range (0 , count ):
1206+ qos = create_one_qos (attrs )
1207+ qoses .append (qos )
1208+
1209+ return qoses
1210+
1211+
1212+ def get_qoses (qoses = None , count = 2 ):
1213+ """Get an iterable MagicMock object with a list of faked qoses.
1214+
1215+ If qoses list is provided, then initialize the Mock object with the
1216+ list. Otherwise create one.
1217+
1218+ :param List qoses:
1219+ A list of FakeResource objects faking qoses
1220+ :param Integer count:
1221+ The number of qoses to be faked
1222+ :return
1223+ An iterable Mock object with side_effect set to a list of faked
1224+ qoses
1225+ """
1226+ if qoses is None :
1227+ qoses = create_qoses (count )
1228+
1229+ return mock .Mock (side_effect = qoses )
1230+
1231+
11411232def create_one_volume_type (attrs = None , methods = None ):
11421233 """Create a fake volume type.
11431234
0 commit comments