New fields names in the fuel-release handled

ostf_sha was renamed to fuel-ostf_sha.
fuellib_sha was renamed to fuel-library_sha.
python-fuelclient_sha was added.

Change-Id: Ica4a7d479e1db3f417ec84785aa303f4e12efd41
Closes-Bug: #1447962
This commit is contained in:
Alexander Kislitsky 2015-04-24 18:45:10 +03:00
parent 833ba91921
commit 3ffe67073d
5 changed files with 164 additions and 19 deletions

View File

@ -124,9 +124,12 @@ INSTALLATION_INFO_SKELETON = {
'build_number': None,
'feature_groups': [{}],
'fuellib_sha': None,
'fuel-library_sha': None,
'fuelmain_sha': None,
'nailgun_sha': None,
'ostf_sha': None,
'fuel-ostf_sha': None,
'python-fuelclient_sha': None,
'production': None,
'release': None
},

View File

@ -124,20 +124,42 @@ class InstStructureTest(BaseTest):
})
return plugins_info
def generate_structure(self, clusters_num_range=(0, 10),
unallocated_nodes_num_range=(0, 20),
plugins_num_range=(0, 5)):
clusters_num = random.randint(*clusters_num_range)
fuel_release = {
'release': random.choice(("6.0-techpreview", "6.0-ga")),
def _fuel_release_gen(self, releases):
return {
'release': random.choice(releases),
'api': 1,
'nailgun_sha': "Unknown build",
'astute_sha': "Unknown build",
'fuellib_sha': "Unknown build",
'ostf_sha': "Unknown build",
'nailgun_sha': "Unknown build nailgun",
'astute_sha': "Unknown build astute",
'fuellib_sha': "Unknown build fuellib",
'ostf_sha': "Unknown build ostf",
'fuelmain_sha': "Unknown build fuelmain",
'feature_groups': ['experimental', 'mirantis']
}
def _fuel_release_gen_2015_04(self, releases):
return {
'release': random.choice(releases),
'api': 1,
'nailgun_sha': "Unknown build nailgun",
'astute_sha': "Unknown build astute astute",
'fuel-ostf_sha': "Unknown build fuel-ostf",
'python-fuelclient_sha': "Unknown build python-fuelclient",
'fuel-library_sha': "Unknown build fuel-library",
'fuelmain_sha': "Unknown build fuelmain",
'feature_groups': ['experimental', 'mirantis']
}
def generate_structure(self, clusters_num_range=(0, 10),
unallocated_nodes_num_range=(0, 20),
plugins_num_range=(0, 5),
release_generators=('_fuel_release_gen',
'_fuel_release_gen_2015_04'),
releases=("6.0-techpreview", "6.0-ga")):
clusters_num = random.randint(*clusters_num_range)
release_generator = random.choice(release_generators)
fuel_release = getattr(self, release_generator)(releases)
structure = {
'fuel_release': fuel_release,
'clusters_num': clusters_num,
@ -154,16 +176,19 @@ class InstStructureTest(BaseTest):
structure['allocated_nodes_num'] += cluster['nodes_num']
return structure
def generate_inst_structures(self, installations_num=100,
creation_date_range=(1, 10),
modification_date_range=(1, 10),
clusters_num_range=(0, 10),
plugins_num_range=(0, 5)):
def generate_inst_structures(
self, installations_num=100, creation_date_range=(1, 10),
modification_date_range=(1, 10), clusters_num_range=(0, 10),
plugins_num_range=(0, 5), releases=("6.0-techpreview", "6.0-ga"),
release_generators=('_fuel_release_gen',
'_fuel_release_gen_2015_04')):
for _ in xrange(installations_num):
mn_uid = '{}'.format(uuid.uuid4())
structure = self.generate_structure(
clusters_num_range=clusters_num_range,
plugins_num_range=plugins_num_range)
plugins_num_range=plugins_num_range,
releases=releases,
release_generators=release_generators)
creation_date = datetime.utcnow() - timedelta(
days=random.randint(*creation_date_range))
modification_date = datetime.utcnow() - timedelta(

View File

@ -64,6 +64,16 @@ class StatsToCsvExportTest(InstStructureTest, DbTest):
csv_keys_paths)
self.assertIn(['vmware_attributes', 'vmware_az_nova_computes_num'],
csv_keys_paths)
self.assertIn(['structure', 'fuel_release', 'ostf_sha'],
csv_keys_paths)
self.assertIn(['structure', 'fuel_release', 'fuel-ostf_sha'],
csv_keys_paths)
self.assertIn(['structure', 'fuel_release', 'python-fuelclient_sha'],
csv_keys_paths)
self.assertIn(['structure', 'fuel_release', 'fuellib_sha'],
csv_keys_paths)
self.assertIn(['structure', 'fuel_release', 'fuel-library_sha'],
csv_keys_paths)
self.assertNotIn(['structure', 'clusters'], csv_keys_paths)
self.assertNotIn(['installed_plugins'], csv_keys_paths)
@ -232,6 +242,56 @@ class StatsToCsvExportTest(InstStructureTest, DbTest):
for _ in result:
pass
def test_fuel_release(self):
exporter = StatsToCsv()
# Calculating positions of the params in the flatten data
structure_keys_paths, cluster_keys_paths, csv_keys_paths = \
exporter.get_cluster_keys_paths()
ostf_pos = csv_keys_paths.index(['structure', 'fuel_release',
'ostf_sha'])
f_ostf_pos = csv_keys_paths.index(['structure', 'fuel_release',
'fuel-ostf_sha'])
f_lib_pos = csv_keys_paths.index(['structure', 'fuel_release',
'fuellib_sha'])
f_libbrary_pos = csv_keys_paths.index(['structure', 'fuel_release',
'fuel-library_sha'])
f_cli_pos = csv_keys_paths.index(['structure', 'fuel_release',
'python-fuelclient_sha'])
# Checking fuel_release structure before 2015.04
inst_structures = self.generate_inst_structures(
release_generators=('_fuel_release_gen',)
)
flatten_clusters = exporter.get_flatten_clusters(
structure_keys_paths, cluster_keys_paths,
inst_structures, [])
for flatten_cluster in flatten_clusters:
self.assertIsNotNone(flatten_cluster[ostf_pos])
self.assertIsNone(flatten_cluster[f_ostf_pos])
self.assertIsNotNone(flatten_cluster[f_lib_pos])
self.assertIsNone(flatten_cluster[f_libbrary_pos])
self.assertIsNone(flatten_cluster[f_cli_pos])
# Checking fuel_release structure after 2015.04
inst_structures = self.generate_inst_structures(
release_generators=('_fuel_release_gen_2015_04',)
)
flatten_clusters = exporter.get_flatten_clusters(
structure_keys_paths, cluster_keys_paths,
inst_structures, [])
for flatten_cluster in flatten_clusters:
self.assertIsNone(flatten_cluster[ostf_pos])
self.assertIsNotNone(flatten_cluster[f_ostf_pos])
self.assertIsNone(flatten_cluster[f_lib_pos])
self.assertIsNotNone(flatten_cluster[f_libbrary_pos])
self.assertIsNotNone(flatten_cluster[f_cli_pos])
def test_cluster_invalid_data(self):
exporter = StatsToCsv()
num = 10

View File

@ -18,18 +18,28 @@
"properties": {
"release": {"type": "string"},
"ostf_sha": {"type": "string"},
"fuel-ostf_sha": {"type": "string"},
"astute_sha": {"type": "string"},
"nailgun_sha": {"type": "string"},
"fuellib_sha": {"type": "string"},
"fuel-library_sha": {"type": "string"},
"python-fuelclient_sha": {"type": "string"},
"fuelmain_sha": {"type": "string"},
"feature_groups": {
"type": "array",
"items": {"type": "string"}
},
"api": {"type": "string"}
},
"required": ["release", "ostf_sha", "astute_sha",
"nailgun_sha", "fuellib_sha", "api",
"feature_groups"]
"required": ["release", "astute_sha",
"nailgun_sha", "api",
"feature_groups"],
"oneOf": [
{"required": [
"fuel-ostf_sha", "python-fuelclient_sha",
"fuel-library_sha"]},
{"required": ["ostf_sha", "fuellib_sha"]}
]
},
"clusters": {
"type": "array",

View File

@ -140,3 +140,50 @@ class TestInstallationStructure(DbTest):
self.assertDictEqual(struct, obj_upd.structure)
self.assertIsNotNone(obj_upd.creation_date)
self.assertIsNotNone(obj_upd.modification_date)
def test_valid_fuel_release_content(self):
master_node_uid = 'x'
structs = [
{
'master_node_uid': master_node_uid,
'fuel_release': {
'release': 'r',
'ostf_sha': 'o_sha',
'astute_sha': 'a_sha',
'nailgun_sha': 'n_sha',
'fuellib_sha': 'fl_sha',
'feature_groups': ['experimental'],
'api': 'v1'
},
'allocated_nodes_num': 4,
'unallocated_nodes_num': 4,
'clusters_num': 2,
'clusters': []
},
{
# ostf_sha renamed, python-fuelclient_sha added
'master_node_uid': master_node_uid,
'fuel_release': {
'release': 'r',
'fuel-ostf_sha': 'f-o_sha',
'python-fuelclient_sha': 'p-fc_sha',
'astute_sha': 'a_sha',
'fuelmain_sha': 'a_sha',
'nailgun_sha': 'n_sha',
'fuel-library_sha': 'fl_sha',
'feature_groups': ['experimental'],
'api': 'v1'
},
'allocated_nodes_num': 4,
'unallocated_nodes_num': 4,
'clusters_num': 2,
'clusters': []
},
]
for struct in structs:
resp = self.post(
'/api/v1/installation_structure/',
{'installation_structure': struct}
)
self.check_response_ok(resp, codes=(200, 201))