diff options
author | krishnaa96 <krishna.moorthy6@wipro.com> | 2020-09-01 12:16:01 +0530 |
---|---|---|
committer | krishnaa96 <krishna.moorthy6@wipro.com> | 2020-09-11 19:49:58 +0530 |
commit | 62fa0a68bb9f15ada092bd8362d629ac6cc0a5b7 (patch) | |
tree | c6b9010915aa0c4753bdb369fafd19cf9738ecdd /conductor | |
parent | f7a27497dd184da6259ea8bd87c3c704df519923 (diff) |
Add generator plugin to generate slice profile
Issue-ID: OPTFRA-802
Signed-off-by: krishnaa96 <krishna.moorthy6@wipro.com>
Change-Id: I4dac19a11c560fbf193da46601b938a11a8f5aeb
Diffstat (limited to 'conductor')
14 files changed, 1099 insertions, 199 deletions
diff --git a/conductor/conductor/controller/translator_utils.py b/conductor/conductor/controller/translator_utils.py index a7452f2..17a9f82 100644 --- a/conductor/conductor/controller/translator_utils.py +++ b/conductor/conductor/controller/translator_utils.py @@ -21,7 +21,7 @@ VERSIONS = {'BASE': ["2016-11-01", "2017-10-10", "2018-02-01"], 'GENERIC': ["2020-08-13"]} LOCATION_KEYS = ['latitude', 'longitude', 'host_name', 'clli_code'] INVENTORY_PROVIDERS = ['aai', 'generator'] -INVENTORY_TYPES = ['cloud', 'service', 'transport', 'vfmodule', 'nssi'] +INVENTORY_TYPES = ['cloud', 'service', 'transport', 'vfmodule', 'nssi', 'nsi', 'slice_profiles'] DEFAULT_INVENTORY_PROVIDER = INVENTORY_PROVIDERS[0] CANDIDATE_KEYS = ['candidate_id', 'cost', 'inventory_type', 'location_id', 'location_type'] diff --git a/conductor/conductor/data/plugins/inventory_provider/candidates/candidate.py b/conductor/conductor/data/plugins/inventory_provider/candidates/candidate.py index 2b2eb4b..c052060 100644 --- a/conductor/conductor/data/plugins/inventory_provider/candidates/candidate.py +++ b/conductor/conductor/data/plugins/inventory_provider/candidates/candidate.py @@ -17,6 +17,7 @@ # ------------------------------------------------------------------------- # + class Candidate(object): def __init__(self, info): self.candidate_id = info.get('candidate_id') diff --git a/conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py b/conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py new file mode 100644 index 0000000..3e57d64 --- /dev/null +++ b/conductor/conductor/data/plugins/inventory_provider/candidates/slice_profiles_candidate.py @@ -0,0 +1,83 @@ +# +# ------------------------------------------------------------------------- +# Copyright (C) 2020 Wipro Limited. +# +# 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. +# +# ------------------------------------------------------------------------- +# + +import copy + +from conductor.data.plugins.inventory_provider.candidates.candidate import Candidate + + +def copy_first(x): + return list(filter(None, x))[0] + + +ATTRIBUTE_AGGREGATION = { + "max_bandwidth": copy_first, + "jitter": sum, + "sst": copy_first, + "latency": sum, + "resource_sharing_level": copy_first, + "s_nssai": copy_first, + "plmn_id_list": copy_first, + "availability": copy_first, + "throughput": min, + "reliability": copy_first, + "max_number_of_ues": copy_first, + "exp_data_rate_ul": min, + "exp_data_rate_dl": min, + "ue_mobility_level": copy_first, + "coverage_area_ta_list": copy_first, + "activity_factor": copy_first, + "survival_time": copy_first, + "max_number_of_conns": copy_first +} + + +class SliceProfilesCandidate(Candidate): + + def __init__(self, **kwargs): + super().__init__(kwargs["info"]) + self.subnet_requirements = kwargs["subnet_requirements"] + + def convert_nested_dict_to_dict(self): + nested_dict = self.__dict__ + + slice_requirements = self.get_slice_requirements() + + slice_profile_candidate = copy.deepcopy(nested_dict) + slice_profile_candidate.pop("subnet_requirements") + slice_profile_candidate.update(slice_requirements) + for subnet, slice_profile in self.subnet_requirements.items(): + subnet_req = {f'{subnet}_{key}': value for key, value in slice_profile.items()} + slice_profile_candidate.update(subnet_req) + + return slice_profile_candidate + + def get_slice_requirements(self): + slice_requirements_keys = set() + for slice_profile in self.subnet_requirements.values(): + slice_requirements_keys.update(slice_profile.keys()) + + slice_profile_tuples = {} + for key in slice_requirements_keys: + attributes = [] + for slice_profile in self.subnet_requirements.values(): + attributes.append(slice_profile.get(key)) + slice_profile_tuples[key] = attributes + + return {attr: ATTRIBUTE_AGGREGATION[attr](values) for attr, values in slice_profile_tuples.items()} diff --git a/conductor/conductor/data/plugins/inventory_provider/generator.py b/conductor/conductor/data/plugins/inventory_provider/generator.py index c9cf67f..693b7c7 100644 --- a/conductor/conductor/data/plugins/inventory_provider/generator.py +++ b/conductor/conductor/data/plugins/inventory_provider/generator.py @@ -23,6 +23,8 @@ import uuid from oslo_log import log from conductor.data.plugins.inventory_provider import base +from conductor.data.plugins.inventory_provider.candidates.candidate import Candidate +from conductor.data.plugins.inventory_provider.candidates.slice_profiles_candidate import SliceProfilesCandidate LOG = log.getLogger(__name__) @@ -35,60 +37,113 @@ class Generator(base.InventoryProviderBase): def name(self): """Return human-readable name.""" - return "Generator" + return "generator" def resolve_demands(self, demands, plan_info, triage_translator_data): """Resolve demands into candidate list""" - resolved_demands = dict() + resolved_demands = {} for name, requirements in demands.items(): - resolved_demands[name] = list() + resolved_demands[name] = [] for requirement in requirements: inventory_type = requirement.get('inventory_type').lower() candidate_uniqueness = requirement.get('unique', 'true') filtering_attributes = requirement.get('filtering_attributes') - - resolved_demands[name].append(self.generate_candidates(inventory_type, + resolved_demands[name].extend(self.generate_candidates(inventory_type, filtering_attributes, candidate_uniqueness)) return resolved_demands def generate_candidates(self, inventory_type, filtering_attributes, candidate_uniqueness): - candidate_list = list() - - if inventory_type == "nssi": - attribute_names, attribute_combinations = \ - self.generate_combinations(filtering_attributes) - for combination in attribute_combinations: - candidate = dict() - - for (name, value) in zip(attribute_names, combination): - candidate[name] = value - candidate['candidate_id'] = str(uuid.uuid4()) - candidate['cost'] = 1.0 - candidate['inventory_type'] = inventory_type - candidate['inventory_provider'] = 'generator' - candidate['uniqueness'] = candidate_uniqueness - candidate['candidate_type'] = 'nssi' - - candidate_list.append(candidate) + if inventory_type == "slice_profiles": + return self.generate_slice_profile_candidates(filtering_attributes, inventory_type, candidate_uniqueness) else: LOG.debug("No functionality implemented for \ generating candidates for inventory_type {}".format(inventory_type)) - - return candidate_list - - def generate_combinations(self, attributes): - """Generates all combination of the given attribute values.""" - attr = dict() - for attribute, attr_params in attributes.items(): - values = attr_params.get('values') - if not values: - values = range(attr_params.get('min', 1), attr_params.get('max'), - attr_params.get('steps', 1)) - attr[attribute] = values - - attribute_names = list(attr.keys()) - attribute_combinations = list(itertools.product(*attr.values())) - return attribute_names, attribute_combinations + return [] + + def generate_slice_profile_candidates(self, filtering_attributes, inventory_type, candidate_uniqueness): + """Generates a list of slice profile candidate based on the filtering attributes, + + A sample filtering attribute is given below + filtering_attributes = {'core': {'latency': {'min': 15, 'max': 20, 'steps': 1}, + 'reliability': {'values': [99.999]}}, + 'ran': {'latency': {'min': 10, 'max': 20, 'steps': 1}, + 'reliability': {'values': [99.99]}, + 'coverage_area_ta_list': {'values': ['City: Chennai']}}} + It will generate slice profile combination from the attributes for each subnet and + generates combination of slice profile tuples from the each subnet. + """ + subnet_combinations = {} + for subnet, attributes in filtering_attributes.items(): + attribute_names, attribute_combinations = generate_combinations(attributes) + subnet_combinations[subnet] = organize_combinations(attribute_names, attribute_combinations) + + subnet_names, slice_profile_combinations = get_combinations_from_dict(subnet_combinations) + organized_combinations = organize_combinations(subnet_names, slice_profile_combinations) + candidates = [] + for combination in organized_combinations: + info = Candidate.build_candidate_info(self.name(), inventory_type, 1.0, candidate_uniqueness, + str(uuid.uuid4())) + candidate = SliceProfilesCandidate(info=info, subnet_requirements=combination) + candidates.append(candidate.convert_nested_dict_to_dict()) + + return candidates + + +def generate_combinations(attributes): + """Generates all combination of the given attribute values. + + The params can have a values list or range(min, max) + from which the combinations are generated. + """ + attr = dict() + for attribute, attr_params in attributes.items(): + values = attr_params.get('values') + if not values: + values = range(attr_params.get('min', 1), attr_params.get('max'), + attr_params.get('steps', 1)) + attr[attribute] = values + + return get_combinations_from_dict(attr) + + +def get_combinations_from_dict(attr): + """Generates combinations from a dictionary containing lists + + Input: + attr = {"latency": [1,2,3], + "reliability": [99.99, 99.9] + } + Output: + attribute_name: ["latency", "reliability"] + attribute_combinations: [[1,99.99], [2,99.99], [3,99.99], [1,99.9], [2,99.9], [3,99.9]] + """ + attribute_names = list(attr.keys()) + attribute_combinations = list(itertools.product(*attr.values())) + return attribute_names, attribute_combinations + + +def organize_combinations(attribute_names, attribute_combinations): + """Organise the generated combinations into list of dicts. + + Input: + attribute_name: ["latency", "reliability"] + attribute_combinations: [[1,99.99], [2,99.99], [3,99.99], [1,99.9], [2,99.9], [3,99.9]] + Output: + combinations = [{'latency': 1, 'reliability': 99.99}, + {'latency': 2, 'reliability': 99.99}, + {'latency': 3, 'reliability': 99.99}, + {'latency': 1, 'reliability': 99.9}, + {'latency': 2, 'reliability': 99.9}, + {'latency': 3, 'reliability': 99.9} + ] + """ + combinations = [] + for combination in attribute_combinations: + comb = {} + for (name, value) in zip(attribute_names, combination): + comb[name] = value + combinations.append(comb) + return combinations diff --git a/conductor/conductor/data/plugins/inventory_provider/utils/aai_utils.py b/conductor/conductor/data/plugins/inventory_provider/utils/aai_utils.py index 2fbaabd..8a11070 100644 --- a/conductor/conductor/data/plugins/inventory_provider/utils/aai_utils.py +++ b/conductor/conductor/data/plugins/inventory_provider/utils/aai_utils.py @@ -28,7 +28,7 @@ def convert_hyphen_to_under_score(hyphened_dict): if hyphened_dict: for key in hyphened_dict: if '-' in key: - converted_dict[key.replace('-', '_')] = hyphened_dict[key] + converted_dict[key.replace('-', '_').lower()] = hyphened_dict[key] else: converted_dict[key] = hyphened_dict[key] if 'resource_version' in converted_dict: diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/gen_demand_list.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/gen_demand_list.json new file mode 100644 index 0000000..cfe5a78 --- /dev/null +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/gen_demand_list.json @@ -0,0 +1,66 @@ +{ + "embb": [ + { + "filtering_attributes": { + "equipment-role": "TEST", + "global-customer-id": "customer-123", + "service-type": "TEST" + }, + "inventory_provider": "generator", + "inventory_type": "nssi" + } + ], + "urllc": [ + { + "filtering_attributes": { + "core": { + "latency": { + "max": 20, + "min": 15, + "steps": 1 + }, + "reliability": { + "values": [ + 99.99 + ] + } + } + }, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "unique": "true" + }, + { + "filtering_attributes": { + "core": { + "latency": { + "max": 20, + "min": 15, + "steps": 1 + }, + "reliability": { + "values": [ + 99.99 + ] + } + }, + "ran": { + "latency": { + "max": 20, + "min": 18, + "steps": 1 + }, + "reliability": { + "values": [ + 99.99 + ] + } + } + }, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "unique": "true" + } + ] +} + diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/generated_candidates.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/generated_candidates.json index 14d89c4..d4c76f0 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/generated_candidates.json +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/generated_candidates.json @@ -1,302 +1,752 @@ [ { - "candidate_id": "c5bff81d-e0de-45df-9a5c-72dd8696a901", - "candidate_type": "nssi", + "candidate_id": "824df02b-f5eb-4117-bd7b-47262f7834b3", + "core_latency": 15, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 5, + "inventory_type": "slice_profiles", + "latency": 25, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "8c92180c-26e3-47c7-8df3-fcf12c248606", - "candidate_type": "nssi", + "candidate_id": "9f61ed37-85b4-4735-bd27-a93fef568ec4", + "core_latency": 15, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 5, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 26, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 11, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "0c3422c5-2ffb-4b90-8b56-a720b72eff41", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 27, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 12, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "c52f6046-e4eb-426a-a8bc-e48e333bbcde", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 28, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 13, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "3bd5d9de-e402-4ef3-96ff-d50216925e61", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 29, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 14, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "3631066c-c242-431e-a409-dd03a8559926", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 30, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 15, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "6e5f0c89-95de-4fd2-bd61-4bae1a6f4507", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 31, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 16, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "8916ea61-3102-4ed1-a53a-c23a7df5b7d8", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 32, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 17, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "c151fc74-5602-42c7-9d88-68b4b2ce7a92", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 33, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "25c2d09a-45ca-49eb-ba08-70cc42bc8eb0", + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 34, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "86555fc1-d158-4739-8e4a-e34f1c01c9b9", + "core_latency": 16, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 26, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "d13ead23-e768-4bd1-886d-e0d8de014931", - "candidate_type": "nssi", + "candidate_id": "31a74478-bd76-4ffc-98eb-e20adc01c4d5", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 6, + "inventory_type": "slice_profiles", + "latency": 27, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 11, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "47c84e0a-7f7e-41f1-bdc2-38856de96a1c", - "candidate_type": "nssi", + "candidate_id": "948ab1a7-06c0-4f34-ae34-e5df1f5dbcfe", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 6, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 28, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 12, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "cc3dd37f-2f0f-4733-9657-b864fcc327c0", - "candidate_type": "nssi", + "candidate_id": "1c7a4c2b-1fce-4d58-8a7e-fc5d1017608a", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 7, + "inventory_type": "slice_profiles", + "latency": 29, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 13, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "3d95ebf5-ad71-4898-b011-80943d6d67f3", - "candidate_type": "nssi", + "candidate_id": "b956dce2-a898-4e9c-aa02-9ef5082028c1", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 7, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 30, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 14, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "fae0f131-cc17-4c80-84d1-b4ec90ea216a", - "candidate_type": "nssi", + "candidate_id": "9fa2871e-f7fb-443b-be7b-15b2f2ddeb0a", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 8, + "inventory_type": "slice_profiles", + "latency": 31, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 15, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "aa39b3ed-8fd7-4013-ae6a-4b7b32201664", - "candidate_type": "nssi", + "candidate_id": "aa50050c-bece-4f8a-ab09-cfb928da955b", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 8, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 32, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 16, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "7beb2493-feb1-478f-850a-81d49fcc6e09", - "candidate_type": "nssi", + "candidate_id": "6a576ba0-3aab-4a53-a318-d850fddc88d5", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 9, + "inventory_type": "slice_profiles", + "latency": 33, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 17, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "3bff4bee-9ba3-41be-8ed2-001b25bc2d56", - "candidate_type": "nssi", + "candidate_id": "7313812c-1d53-4a82-919b-50db6f9e69f0", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 9, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 34, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "350baccf-072f-4371-a7be-5b19a6dfd31b", - "candidate_type": "nssi", + "candidate_id": "2f352c9d-9d0d-4017-a547-80124527c08b", + "core_latency": 16, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 10, + "inventory_type": "slice_profiles", + "latency": 35, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 19, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "d43f8590-a2d5-4c33-ae6f-ce8817c11878", - "candidate_type": "nssi", + "candidate_id": "fef0e167-3adf-4dd8-8928-05b8eb76f443", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 10, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 27, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "b37943fa-bfea-4149-8254-8fd80d22bd4e", - "candidate_type": "nssi", + "candidate_id": "af8e0e30-57ee-410f-a6b0-51b5cb45e066", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 11, + "inventory_type": "slice_profiles", + "latency": 28, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 11, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "b21ce156-8b0a-4af6-a0a3-f0093000e040", - "candidate_type": "nssi", + "candidate_id": "e0d4d686-d248-4eda-9910-0bf3a2c6304f", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 11, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 29, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 12, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "1e54453a-3d40-405a-821f-b57ea33f9bb0", - "candidate_type": "nssi", + "candidate_id": "c297f2a0-c2cb-4dbe-9e44-62c1da8b3df2", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 12, + "inventory_type": "slice_profiles", + "latency": 30, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 13, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "f26946a3-db3d-48d5-8bbd-0620f459904b", - "candidate_type": "nssi", + "candidate_id": "d8c247f5-2fc8-4af5-abaf-c86c52795d18", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 12, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 31, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 14, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "583d6ddf-fbbc-4b47-9655-c205c30a625a", - "candidate_type": "nssi", + "candidate_id": "75f7a109-6af2-4f58-bbcf-69da15b49746", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 13, + "inventory_type": "slice_profiles", + "latency": 32, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 15, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "a4aedbb8-b9cb-4476-a6ef-6f51e16ab352", - "candidate_type": "nssi", + "candidate_id": "d1e8b1b8-ce5b-4701-95d7-5df12e51c87b", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 13, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 33, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 16, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "7a48a511-4303-43be-a758-b35b1de92106", - "candidate_type": "nssi", + "candidate_id": "9654aecf-6923-40b8-b4c1-ee5e08d2c50e", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 14, + "inventory_type": "slice_profiles", + "latency": 34, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 17, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "3fcf9c64-d816-4cf6-b216-926b5a9023bd", - "candidate_type": "nssi", + "candidate_id": "359ed468-6ed9-4d72-af19-cbf4c20bde2b", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 14, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 35, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "17c46498-b622-4fc5-8254-2261318347fc", - "candidate_type": "nssi", + "candidate_id": "0d91e973-ff9a-4d49-ba29-5f40bf3be902", + "core_latency": 17, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 15, + "inventory_type": "slice_profiles", + "latency": 36, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 19, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "8005dd52-5d6c-4f7d-b992-7f5650e1a235", - "candidate_type": "nssi", + "candidate_id": "b7761dc6-fd27-46ec-abb8-c58a7976514f", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 15, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 28, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "203802d4-44c8-4251-9977-401880992ac0", - "candidate_type": "nssi", + "candidate_id": "24b04d95-649c-4c23-896e-37fb092536c8", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 16, + "inventory_type": "slice_profiles", + "latency": 29, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 11, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "728343ef-e41e-405e-b626-f3dcffe02e65", - "candidate_type": "nssi", + "candidate_id": "39b7a668-7974-4504-b36b-a6fc875ee05c", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 16, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 30, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 12, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "77ac7fea-8452-4c83-9bdc-c1f4ce5c7314", - "candidate_type": "nssi", + "candidate_id": "23e4acc0-5414-4b4b-99f8-9669733ca53a", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 17, + "inventory_type": "slice_profiles", + "latency": 31, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 13, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "971ef4bf-fa71-4e9c-9b1b-dbfa6b28bb39", - "candidate_type": "nssi", + "candidate_id": "97f29b0b-b21c-424e-bb02-e35fc0b2e43b", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 17, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 32, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 14, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "9925d2b3-24a8-40e6-844d-f7d7b4cb5437", - "candidate_type": "nssi", + "candidate_id": "2072423a-2b3e-460d-a609-da70602f8f60", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 18, + "inventory_type": "slice_profiles", + "latency": 33, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 15, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "b862a417-6e59-4946-995e-b562420199f0", - "candidate_type": "nssi", + "candidate_id": "8756ea24-7a29-47a4-9c36-55a87b14193c", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 18, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 34, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 16, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "719b0a26-7a6e-4fab-9547-f4194620ed4a", - "candidate_type": "nssi", + "candidate_id": "5b1332ec-d241-4063-b09b-a71d10e6b65c", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 19, + "inventory_type": "slice_profiles", + "latency": 35, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 17, + "ran_reliability": 99.99, "reliability": 99.99, "uniqueness": "true" }, { - "candidate_id": "0f00caf7-a985-4256-b160-5d98894dae1b", - "candidate_type": "nssi", + "candidate_id": "decce033-4889-476e-be3c-21abbac514fc", + "core_latency": 18, + "core_reliability": 99.99, "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", "inventory_provider": "generator", - "inventory_type": "nssi", - "latency": 19, - "reliability": 99.999, + "inventory_type": "slice_profiles", + "latency": 36, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "1d00cd28-784c-4c44-b718-a533b09d4d72", + "core_latency": 18, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 37, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "f0084f21-a268-430a-8642-050aa7e3ad71", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 29, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "669ce118-1e7f-4630-8d72-1a22bc4d3abd", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 30, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 11, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "b25a1b05-208b-49a6-9dc5-a65473f81d29", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 31, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 12, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "776754f3-b197-4b66-bcdd-0a03f7bb3fc6", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 32, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 13, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "d5765567-6bdf-46b9-8167-214e476476c9", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 33, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 14, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "0494bbe3-adea-4eda-b214-f7b7c7214ce3", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 34, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 15, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "9f8882c9-c984-4f24-8a98-2a95d82d23aa", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 35, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 16, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "e58afc2f-9579-423f-9680-71bc0fd694b4", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 36, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 17, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "b06cea8f-8f0e-4762-8f2c-34405c6ee14c", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 37, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "candidate_id": "1b22b8be-1324-4f2b-a207-916524ef9a86", + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 38, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, "uniqueness": "true" } ] diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/nsi_candidate.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/nsi_candidate.json index edd5d78..edb71ec 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/nsi_candidate.json +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/nsi_candidate.json @@ -11,12 +11,12 @@ "profile_id": "89ad9f49-4201-4e3a-aac1-b0f27902c299", "latency": 20, - "max_number_of_UEs": 10, - "coverage_area_TA_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", + "max_number_of_ues": 10, + "coverage_area_ta_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", "ue_mobility_level": "stationary", "resource_sharing_level": "0", - "exp_data_rate_UL": 100, - "exp_data_rate_DL": 100, + "exp_data_rate_ul": 100, + "exp_data_rate_dl": 100, "activity_factor": 0, "e2e_latency": 20, "jitter": 1, diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/nssi_candidate.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/nssi_candidate.json index b5a4a7d..44f24e4 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/nssi_candidate.json +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/nssi_candidate.json @@ -12,12 +12,12 @@ "profile_id": "cdad9f49-4201-4e3a-aac1-b0f27902c299", "latency": 20, - "max_number_of_UEs": 0, - "coverage_area_TA_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", + "max_number_of_ues": 0, + "coverage_area_ta_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", "ue_mobility_level": "stationary", "resource_sharing_level": "0", - "exp_data_rate_UL": 100, - "exp_data_rate_DL": 100, + "exp_data_rate_ul": 100, + "exp_data_rate_dl": 100, "activity_factor": 0, "e2e_latency": 0, "jitter": 0, diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/resolved_demands_gen.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/resolved_demands_gen.json new file mode 100644 index 0000000..b877cca --- /dev/null +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/resolved_demands_gen.json @@ -0,0 +1,175 @@ +{ + "embb": [], + "urllc": [ + { + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 15, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 16, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 16, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 17, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 17, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 18, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 18, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 19, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 33, + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 34, + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 16, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 34, + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 16, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 35, + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 17, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 35, + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 17, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 36, + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 18, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 36, + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 18, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 37, + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 37, + "ran_latency": 18, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + }, + { + "core_latency": 19, + "core_reliability": 99.99, + "cost": 1.0, + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 38, + "ran_latency": 19, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + } + ] +} diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/slice_profile_converted.json b/conductor/conductor/tests/unit/data/plugins/inventory_provider/slice_profile_converted.json index f7581a2..9080491 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/slice_profile_converted.json +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/slice_profile_converted.json @@ -1,12 +1,12 @@ { "profile_id": "cdad9f49-4201-4e3a-aac1-b0f27902c299", "latency": 20, - "max_number_of_UEs": 0, - "coverage_area_TA_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", + "max_number_of_ues": 0, + "coverage_area_ta_list": "[{\"province\":\"??\",\"city\":\"???\",\"county\":\"???\",\"street\":\"?????\"}]", "ue_mobility_level": "stationary", "resource_sharing_level": "0", - "exp_data_rate_UL": 100, - "exp_data_rate_DL": 100, + "exp_data_rate_dl": 100, + "exp_data_rate_ul": 100, "activity_factor": 0, "e2e_latency": 0, "jitter": 0, diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_candidates.py b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_candidates.py new file mode 100644 index 0000000..1fb8584 --- /dev/null +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_candidates.py @@ -0,0 +1,58 @@ +# +# ------------------------------------------------------------------------- +# Copyright (C) 2020 Wipro Limited. +# +# 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. +# +# ------------------------------------------------------------------------- +# + +import unittest +import uuid + +from conductor.data.plugins.inventory_provider.candidates.candidate import Candidate +from conductor.data.plugins.inventory_provider.candidates.slice_profiles_candidate import SliceProfilesCandidate + +class TestCandidates(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_slice_profiles_candidate(self): + id = str(uuid.uuid4()) + expected_candidate = { + "candidate_id": id, + "core_latency": 15, + "core_reliability": 99.99, + "cost": 1.0, + "coverage_area_ta_list": "City: Chennai", + "inventory_provider": "generator", + "inventory_type": "slice_profiles", + "latency": 25, + "ran_coverage_area_ta_list": "City: Chennai", + "ran_latency": 10, + "ran_reliability": 99.99, + "reliability": 99.99, + "uniqueness": "true" + } + info = Candidate.build_candidate_info("generator", "slice_profiles", 1.0, "true", id) + subnet_requirements = {"core": {"latency": 15, "reliability": 99.99}, + "ran": {"latency": 10, "reliability": 99.99, "coverage_area_ta_list": "City: Chennai"} + } + + candidate = SliceProfilesCandidate(info=info, subnet_requirements=subnet_requirements) + + self.assertEqual(expected_candidate, candidate.convert_nested_dict_to_dict()) diff --git a/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_generator.py b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_generator.py index c6249ce..76ecd41 100644 --- a/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_generator.py +++ b/conductor/conductor/tests/unit/data/plugins/inventory_provider/test_generator.py @@ -37,20 +37,16 @@ class TestGenerator(unittest.TestCase): candidates_file = './conductor/tests/unit/data/plugins/inventory_provider/generated_candidates.json' expected_candidates = json.loads(open(candidates_file).read()) - #uuids = [candidate['candidate_id'] for candidate in expected_candidates] - - #self.patcher = patch('uuid.uuid4', side_effect=uuids) - #self.patcher.start() - generator = Generator() - filtering_attributes = {'latency': {'min': 5, 'max': 20, 'steps': 1}, - 'reliability': {'values': [99.99, 99.999]}} + filtering_attributes = {'core': {'latency': {'min': 15, 'max': 20, 'steps': 1}, + 'reliability': {'values': [99.99]}}, + 'ran': {'latency': {'min': 10, 'max': 20, 'steps': 1}, + 'reliability': {'values': [99.99]}, + 'coverage_area_ta_list': {'values': ['City: Chennai']}}} - generated_candidates = generator.generate_candidates('nssi', filtering_attributes, + generated_candidates = generator.generate_candidates('slice_profiles', filtering_attributes, candidate_uniqueness='true') - #with open('/home/krishna/actual_candidates.json', 'w') as f: - # f.write(json.dumps(generated_candidates)) for candidate in generated_candidates: self.assertIsNotNone(candidate['candidate_id']) @@ -63,3 +59,19 @@ class TestGenerator(unittest.TestCase): self.assertEqual([], generator.generate_candidates('cloud', filtering_attributes, candidate_uniqueness='true')) + + def test_resolve_demands(self): + demands_file = './conductor/tests/unit/data/plugins/inventory_provider/gen_demand_list.json' + demands = json.loads(open(demands_file).read()) + + resolved_demands_file = './conductor/tests/unit/data/plugins/inventory_provider/resolved_demands_gen.json' + expected_resolved_demands = json.loads(open(resolved_demands_file).read()) + + generator = Generator() + resolved_demands = generator.resolve_demands(demands, plan_info=None, triage_translator_data=None) + for demand, candidate_list in resolved_demands.items(): + for candidate in candidate_list: + self.assertIsNotNone(candidate['candidate_id']) + del candidate['candidate_id'] + + self.assertEqual(expected_resolved_demands, resolved_demands) diff --git a/conductor/conductor/tests/unit/solver/optimizer/constraints/test_threshold.py b/conductor/conductor/tests/unit/solver/optimizer/constraints/test_threshold.py index f12ed9c..311e790 100644 --- a/conductor/conductor/tests/unit/solver/optimizer/constraints/test_threshold.py +++ b/conductor/conductor/tests/unit/solver/optimizer/constraints/test_threshold.py @@ -33,7 +33,7 @@ class TestThreshold(unittest.TestCase): # test 1 properties = {'evaluate': [{'attribute': 'latency', 'threshold': 30, 'operator': 'lte'}, - {'attribute': 'exp_data_rate_UL', 'threshold': 70, 'operator': 'gte'}]} + {'attribute': 'exp_data_rate_ul', 'threshold': 70, 'operator': 'gte'}]} threshold_obj = Threshold('urllc_threshold', 'threshold', ['URLLC'], _priority=0, _properties=properties) |