def get_cpu_mhz(
        cpus=int_(min=1, max=8),
        current_time=float_(min=100, max=1000),
        time_period=float_(min=1, max=100),
        vm_data=dict_(
            keys=str_(of='abc123-', min_length=36, max_length=36),
            values=two(of=int_(min=1, max=100)),
            min_length=0, max_length=10
        ),
        added_vms=dict_(
            keys=str_(of='abc123-', min_length=36, max_length=36),
            values=tuple_(int_(min=1, max=100),
                          list_(of=int_(min=1, max=3000),
                                min_length=0, max_length=10)),
            min_length=0, max_length=5
        )
    ):
        with MockTransaction:
            def mock_get_cpu_time(vir_connection, uuid):
                if uuid in original_vm_data:
                    return original_vm_data[uuid][0] + \
                           original_vm_data[uuid][1]
                else:
                    return added_vms[uuid][0]

            original_vm_data = dict(vm_data)
            previous_time = current_time - time_period
            connection = libvirt.virConnect()
            when(collector).get_cpu_time(connection, any_string). \
                then_call(mock_get_cpu_time)

            previous_cpu_time = {}
            cpu_mhz = {}
            for uuid, data in vm_data.items():
                previous_cpu_time[uuid] = data[0]

            if vm_data:
                to_remove = random.randrange(len(vm_data))
                for _ in xrange(to_remove):
                    tmp = random.choice(vm_data.keys())
                    del vm_data[tmp]
            vms = vm_data.keys()

            current_cpu_time = {}
            for uuid in vms:
                current_cpu_time[uuid] = vm_data[uuid][0] + vm_data[uuid][1]
                cpu_mhz[uuid] = collector.calculate_cpu_mhz(
                    cpus, previous_time, current_time,
                    vm_data[uuid][0], vm_data[uuid][0] + vm_data[uuid][1])

            added_vm_data = {}
            if added_vms:
                for uuid, data in added_vms.items():
                    current_cpu_time[uuid] = data[0]
                    added_vm_data[uuid] = data[1]
                    if data[1]:
                        cpu_mhz[uuid] = data[1][-1]

            vms.extend(added_vms.keys())

            result = collector.get_cpu_mhz(
                connection, cpus, previous_cpu_time,
                previous_time, current_time, vms,
                {}, added_vm_data)

            assert result[0] == current_cpu_time
            assert result[1] == cpu_mhz
Example #2
0
    def get_cpu_mhz(cpus=int_(min=1, max=8),
                    current_time=float_(min=100, max=1000),
                    time_period=float_(min=1, max=100),
                    vm_data=dict_(keys=str_(of='abc123-',
                                            min_length=36,
                                            max_length=36),
                                  values=two(of=int_(min=1, max=100)),
                                  min_length=0,
                                  max_length=10),
                    added_vms=dict_(keys=str_(of='abc123-',
                                              min_length=36,
                                              max_length=36),
                                    values=tuple_(
                                        int_(min=1, max=100),
                                        list_(of=int_(min=1, max=3000),
                                              min_length=0,
                                              max_length=10)),
                                    min_length=0,
                                    max_length=5)):
        with MockTransaction:

            def mock_get_cpu_time(vir_connection, uuid):
                if uuid in original_vm_data:
                    return original_vm_data[uuid][0] + \
                           original_vm_data[uuid][1]
                else:
                    return added_vms[uuid][0]

            original_vm_data = dict(vm_data)
            previous_time = current_time - time_period
            connection = libvirt.virConnect()
            when(collector).get_cpu_time(connection, any_string). \
                then_call(mock_get_cpu_time)

            previous_cpu_time = {}
            cpu_mhz = {}
            for uuid, data in vm_data.items():
                previous_cpu_time[uuid] = data[0]

            if vm_data:
                to_remove = random.randrange(len(vm_data))
                for _ in xrange(to_remove):
                    tmp = random.choice(vm_data.keys())
                    del vm_data[tmp]
            vms = vm_data.keys()

            current_cpu_time = {}
            for uuid in vms:
                current_cpu_time[uuid] = vm_data[uuid][0] + vm_data[uuid][1]
                cpu_mhz[uuid] = collector.calculate_cpu_mhz(
                    cpus, previous_time, current_time, vm_data[uuid][0],
                    vm_data[uuid][0] + vm_data[uuid][1])

            added_vm_data = {}
            if added_vms:
                for uuid, data in added_vms.items():
                    current_cpu_time[uuid] = data[0]
                    added_vm_data[uuid] = data[1]
                    if data[1]:
                        cpu_mhz[uuid] = data[1][-1]

            vms.extend(added_vms.keys())

            result = collector.get_cpu_mhz(connection, cpus, previous_cpu_time,
                                           previous_time, current_time, vms,
                                           {}, added_vm_data)

            assert result[0] == current_cpu_time
            assert result[1] == cpu_mhz