Fix fake node generator

Add numa_topology generator.

Change-Id: I6db32e76a4cf4a97b4d12932277498a0e281a368
This commit is contained in:
Nikita Zubkov 2016-09-12 19:33:03 +03:00
parent 7f0213610f
commit 0fa66ed831
2 changed files with 52 additions and 4 deletions

View File

@ -545,8 +545,13 @@ class TestFakeNodeGenerator(base.BaseUnitTest):
'interfaces': [],
'disks': [],
'system': {},
'memory': []
}
'memory': [],
'numa_topology': {
'distances': [],
'numa_nodes': [],
'supported_hugepages': [],
},
},
}
generated_node = self.generator.generate_fake_node(pk)
self.assertEqual(generated_node.get('pk'), pk)
@ -556,6 +561,10 @@ class TestFakeNodeGenerator(base.BaseUnitTest):
generated_node_fields.keys())
self.assertItemsEqual(sample_node_fields['meta'].keys(),
generated_node_fields.get('meta', {}).keys())
self.assertItemsEqual(
sample_node_fields['meta']['numa_topology'],
generated_node_fields.get('meta', {}).get('numa_topology', {})
)
self.assertFalse(generated_node_fields.get('pending_deletion'))
self.assertFalse(generated_node_fields.get('pending_addition'))
self.assertEqual(generated_node_fields.get('progress'), 0)

View File

@ -307,6 +307,40 @@ class FakeNodesGenerator(object):
'devices': devices
}
@staticmethod
def _generate_numa_topology(memory, amount=2):
dist = []
for i in range(amount):
row = []
for j in range(amount):
row.append('1.0' if i == j else '2.1')
dist.append(row)
cpus_count = random.choice([8, 16, 32]) * amount
all_cpus = {i for i in range(cpus_count)}
def gen_numa(id_):
if id_ + 1 == cpus_count:
cpus = all_cpus
else:
remain = list(all_cpus)
random.shuffle(remain)
cpus = remain[:cpus_count / amount]
all_cpus.difference_update(cpus)
return {
'id': id_,
'cpus': sorted(cpus),
'memory': memory // amount
}
return {
'distances': dist,
'numa_nodes': [gen_numa(i) for i in range(amount)],
'supported_hugepages': [2048, 1048576]
}
def generate_fake_node(self, pk, is_online=True, is_error=False,
use_offload_iface=False, min_ifaces_num=1):
"""Generate one fake node
@ -327,6 +361,7 @@ class FakeNodesGenerator(object):
mac = self._generate_mac()
net = random.choice(['net1', 'net2'])
ip, netmask = self._get_network_data(net)
memory_meta = self._generate_memory_meta(random.randint(1, 8))
return {
'pk': pk,
@ -355,8 +390,12 @@ class FakeNodesGenerator(object):
'disks': self._generate_disks_meta(random.randint(1, 7)),
'system': self._generate_systems_meta(
hostname, manufacture, platform_name),
'memory': self._generate_memory_meta(random.randint(1, 8))
}
'memory': memory_meta,
'numa_topology': self._generate_numa_topology(
memory_meta['total'],
random.randint(1, 3)
),
},
}
}