Beispiel #1
0
def test_metrics_without_hostaccess():
    boot_time = EPOCH + datetime.timedelta(seconds=60)
    disk = mock.Mock()
    disk.diskPath = '/boot'
    disk.capacity = 100
    disk.freeSpace = 50

    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': False,
        'hosts': False,
        'snapshots': False,
    }

    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
    )
    metrics = collector._create_metric_containers()
    collector.content = _succeed(mock.Mock())
    collector.__dict__['host_labels'] = _succeed({'': []})

    with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties:
        batch_fetch_properties.return_value = _succeed({
            'vm-1': {
                'name': 'vm-x',
                'runtime.host': vim.ManagedObject('notfound:1'),
                'runtime.powerState': 'poweredOn',
                'summary.config.numCpu': 1,
                'summary.config.memorySizeMB': 1024,
                'runtime.bootTime': boot_time,
                'guest.disk': [disk],
                'guest.toolsStatus': 'toolsOk',
                'guest.toolsVersion': '10336',
                'guest.toolsVersionStatus2': 'guestToolsUnmanaged',
            }
        })
        assert collector.vm_labels.result == {'vm-1': ['vm-x']}
        yield collector._vmware_get_vms(metrics)

        # 113 AssertionError {'partition': '/boot'} vs {'host_name': '/boot'}
        assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == {
            'vm_name': 'vm-x',
            'partition': '/boot',
            'host_name': 'n/a',
            'cluster_name': 'n/a',
            'dc_name': 'n/a',
        }

        # Fail due to expected labels ['vm-1', 'host-1', 'dc', 'cluster-1']
        # but found ['vm-1']
        assert metrics['vmware_vm_power_state'].samples[0][1] == {
            'vm_name': 'vm-x',
            'host_name': 'n/a',
            'cluster_name': 'n/a',
            'dc_name': 'n/a',
        }
Beispiel #2
0
def test_no_error_onempty_vms():
    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': False,
        'hosts': False,
        'snapshots': False,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
        ignore_ssl=True,
    )

    metrics = collector._create_metric_containers()

    metric_1 = mock.Mock()
    metric_1.id.counterId = 10
    metric_1.value = [9]

    metric_2 = mock.Mock()
    metric_2.id.counterId = 1
    metric_2.value = [1]

    ent_1 = mock.Mock()
    ent_1.value = [metric_1, metric_2]
    ent_1.entity = vim.ManagedObject('vm:1')

    content = mock.Mock()
    content.perfManager.QueryStats.return_value = [ent_1]
    collector.content = _succeed(content)

    collector.__dict__['counter_ids'] = _succeed({
        'cpu.ready.summation': 1,
        'cpu.maxlimited.summation': 2,
        'cpu.usage.average': 3,
        'cpu.usagemhz.average': 4,
        'disk.usage.average': 5,
        'disk.read.average': 6,
        'disk.write.average': 7,
        'mem.usage.average': 8,
        'net.received.average': 9,
        'net.transmitted.average': 10,
    })

    collector.__dict__['vm_labels'] = _succeed({'': []})
    collector.__dict__['vm_inventory'] = _succeed({'': {}})

    # Try to test for querySpec=[]
    # threads.deferToThread(content.perfManager.QueryStats, querySpec=specs),
    # TypeError Required field "querySpec" not provided (not @optional)
    yield collector._vmware_get_vm_perf_manager_metrics(metrics)

    assert metrics['vmware_vm_power_state'].samples == []
Beispiel #3
0
def test_add_filter(service_instance, vcenter_api_client):
    obj = vim.ManagedObject(moId="moid")
    filters = ["latest-page"]

    vcenter_api_client.add_filter(obj, filters)

    property_collector = service_instance.content.propertyCollector
    property_collector.CreateFilter.assert_called_once()
    filter_spec = property_collector.CreateFilter.call_args[0][0]

    assert filter_spec.objectSet[0].obj == obj
    assert filter_spec.propSet[0].pathSet == ["latest-page"]
    assert filter_spec is not None
Beispiel #4
0
def test_collect_vm_perf():
    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': True,
        'hosts': True,
        'snapshots': True,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
    )

    metrics = collector._create_metric_containers()

    metric_1 = mock.Mock()
    metric_1.id.counterId = 10
    metric_1.value = [9]

    metric_2 = mock.Mock()
    metric_2.id.counterId = 1
    metric_2.value = [1]

    ent_1 = mock.Mock()
    ent_1.value = [metric_1, metric_2]
    ent_1.entity = vim.ManagedObject('vm:1')

    content = mock.Mock()
    content.perfManager.QueryStats.return_value = [ent_1]
    collector.content = _succeed(content)

    collector.__dict__['counter_ids'] = _succeed({
        'cpu.ready.summation': 1,
        'cpu.maxlimited.summation': 2,
        'cpu.usage.average': 3,
        'cpu.usagemhz.average': 4,
        'disk.usage.average': 5,
        'disk.read.average': 6,
        'disk.write.average': 7,
        'mem.usage.average': 8,
        'net.received.average': 9,
        'net.transmitted.average': 10,
    })

    collector.__dict__['vm_labels'] = _succeed({
        'vm:1': ['vm-1', 'host-1', 'dc', 'cluster-1'],
    })

    collector.__dict__['vm_inventory'] = _succeed({
        'vm:1': {
            'name': 'vm-1',
            'obj': vim.ManagedObject('vm-1'),
            'runtime.powerState': 'poweredOn',
        },
        'vm:2': {
            'name': 'vm-2',
            'obj': vim.ManagedObject('vm-2'),
            'runtime.powerState': 'poweredOff',
        },
    })

    yield collector._vmware_get_vm_perf_manager_metrics(metrics)

    # General VM metrics
    assert metrics['vmware_vm_net_transmitted_average'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_net_transmitted_average'].samples[0][2] == 9.0
Beispiel #5
0
def test_collect_vms():
    boot_time = EPOCH + datetime.timedelta(seconds=60)

    snapshot_1 = mock.Mock()
    snapshot_1.createTime = EPOCH + datetime.timedelta(seconds=60)
    snapshot_1.name = 'snapshot_1'
    snapshot_1.childSnapshotList = []

    snapshot_2 = mock.Mock()
    snapshot_2.createTime = EPOCH + datetime.timedelta(seconds=120)
    snapshot_2.name = 'snapshot_2'
    snapshot_2.childSnapshotList = [snapshot_1]

    snapshot = mock.Mock()
    snapshot.rootSnapshotList = [snapshot_2]

    disk = mock.Mock()
    disk.diskPath = '/boot'
    disk.capacity = 100
    disk.freeSpace = 50

    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': True,
        'hosts': True,
        'snapshots': True,
    }

    # Test runtime.host not found

    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
    )
    collector.content = _succeed(mock.Mock())

    collector.__dict__['host_labels'] = _succeed({'': []})

    with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties:
        batch_fetch_properties.return_value = _succeed({
            'vm-1': {
                'name': 'vm-1',
                'runtime.host': vim.ManagedObject('notfound:1'),
                'runtime.powerState': 'poweredOn',
                'summary.config.numCpu': 1,
                'summary.config.memorySizeMB': 1024,
                'runtime.bootTime': boot_time,
                'snapshot': snapshot,
                'guest.disk': [disk],
                'guest.toolsStatus': 'toolsOk',
                'guest.toolsVersion': '10336',
                'guest.toolsVersionStatus2': 'guestToolsUnmanaged',
            }
        })
        assert collector.vm_labels.result == {'vm-1': ['vm-1']}

    # Reset variables

    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
    )
    collector.content = _succeed(mock.Mock())

    collector.__dict__['host_labels'] = _succeed({
        'host-1': ['host-1', 'dc', 'cluster-1'],
    })

    metrics = collector._create_metric_containers()

    with mock.patch.object(collector, 'batch_fetch_properties') as batch_fetch_properties:
        batch_fetch_properties.return_value = _succeed({
            'vm-1': {
                'name': 'vm-1',
                'runtime.host': vim.ManagedObject('host-1'),
                'runtime.powerState': 'poweredOn',
                'summary.config.numCpu': 1,
                'summary.config.memorySizeMB': 1024,
                'runtime.bootTime': boot_time,
                'snapshot': snapshot,
                'guest.disk': [disk],
                'guest.toolsStatus': 'toolsOk',
                'guest.toolsVersion': '10336',
                'guest.toolsVersionStatus2': 'guestToolsUnmanaged',
            },
            'vm-2': {
                'name': 'vm-2',
                'runtime.powerState': 'poweredOff',
                'summary.config.numCpu': 1,
                'summary.config.memorySizeMB': 1024,
                'runtime.bootTime': boot_time,
                'snapshot': snapshot,
                'guest.disk': [disk],
                'guest.toolsStatus': 'toolsOk',
                'guest.toolsVersion': '10336',
                'guest.toolsVersionStatus2': 'guestToolsUnmanaged',
            },
            'vm-3': {
                'name': 'vm-3',
                'runtime.host': vim.ManagedObject('host-1'),
                'runtime.powerState': 'poweredOff',
                'summary.config.numCpu': 1,
                'summary.config.memorySizeMB': 1024,
                'runtime.bootTime': boot_time,
                'snapshot': snapshot,
                'guest.disk': [disk],
                'guest.toolsStatus': 'toolsOk',
                'guest.toolsVersion': '10336',
                'guest.toolsVersionStatus2': 'guestToolsUnmanaged',
            },
        })
        yield collector._vmware_get_vms(metrics)
        assert _check_properties(batch_fetch_properties.call_args[0][1])
        assert collector.vm_labels.result == {
                'vm-1': ['vm-1', 'host-1', 'dc', 'cluster-1'],
                'vm-2': ['vm-2'],
                'vm-3': ['vm-3', 'host-1', 'dc', 'cluster-1'],
                }

    # Assert that vm-3 skipped #69/#70
    assert metrics['vmware_vm_power_state'].samples[1][1] == {
        'vm_name': 'vm-3',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }

    # General VM metrics
    assert metrics['vmware_vm_power_state'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_power_state'].samples[0][2] == 1.0

    assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][2] == 60

    # Disk info (vmguest)
    assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'partition': '/boot',
    }
    assert metrics['vmware_vm_guest_disk_capacity'].samples[0][2] == 100

    # VM tools info (vmguest)
    assert metrics['vmware_vm_guest_tools_running_status'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'tools_status': 'toolsOk',
    }
    assert metrics['vmware_vm_guest_tools_running_status'].samples[0][2] == 1.0

    assert metrics['vmware_vm_guest_tools_version'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'tools_version': '10336',
    }
    assert metrics['vmware_vm_guest_tools_version'].samples[0][2] == 1.0

    assert metrics['vmware_vm_guest_tools_version_status'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'tools_version_status': 'guestToolsUnmanaged',
    }
    assert metrics['vmware_vm_guest_tools_version_status'].samples[0][2] == 1.0

    # Snapshots
    assert metrics['vmware_vm_snapshots'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_snapshots'].samples[0][2] == 2

    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'vm_snapshot_name': 'snapshot_2',
    }
    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][2] == 120

    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'vm_snapshot_name': 'snapshot_1',
    }
    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][2] == 60

    # Max Memory
    assert metrics['vmware_vm_memory_max'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_memory_max'].samples[0][2] == 1024
Beispiel #6
0
def test_collect_host_perf():
    collect_only = {
        'vms': False,
        'vmguests': False,
        'datastores': False,
        'hosts': True,
        'snapshots': False,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
        5000,
    )

    metrics = collector._create_metric_containers()

    metric_1 = mock.Mock()
    metric_1.id.counterId = 2
    metric_1.value = [3600]

    metric_2 = mock.Mock()
    metric_2.id.counterId = 6
    metric_2.value = [3700]

    metric_3 = mock.Mock()
    metric_3.id.counterId = 17
    metric_3.value = [1024]

    metric_4 = mock.Mock()
    metric_4.id.counterId = 20
    metric_4.value = [10]

    ent_1 = mock.Mock()
    ent_1.value = [metric_1, metric_2, metric_3, metric_4]
    ent_1.entity = vim.ManagedObject('host:1')

    content = mock.Mock()
    content.perfManager.QueryStats.return_value = [ent_1]
    collector.content = _succeed(content)

    collector.__dict__['counter_ids'] = _succeed({
        'cpu.costop.summation': 1,
        'cpu.demand.average': 2,
        'cpu.idle.summation': 3,
        'cpu.ready.summation': 4,
        'cpu.swapwait.summation': 5,
        'cpu.usage.average': 6,
        'cpu.usagemhz.average': 7,
        'cpu.used.summation': 8,
        'disk.read.average': 9,
        'disk.write.average': 10,
        'mem.active.average': 11,
        'mem.latency.average': 12,
        'mem.swapin.average': 13,
        'mem.swapinRate.average': 14,
        'mem.swapout.average': 15,
        'mem.swapoutRate.average': 16,
        'mem.vmmemctl.average': 17,
        'net.bytesRx.average': 18,
        'net.bytesTx.average': 19,
        'net.droppedRx.summation': 20,
        'net.droppedTx.summation': 21,
        'net.errorsRx.summation': 22,
        'net.errorsTx.summation': 23,
        'net.usage.average': 24,
    })

    collector.__dict__['host_labels'] = _succeed({
        'host:1': ['host-1', 'dc', 'cluster-1'],
    })

    collector.__dict__['host_system_inventory'] = _succeed({
        'host:1': {
            'name': 'host-1',
            'obj': vim.ManagedObject('host-1'),
            'runtime.powerState': 'poweredOn',
        },
    })

    yield collector._vmware_get_host_perf_manager_metrics(metrics)

    # General Host metrics
    assert metrics['vmware_host_cpu_demand_average'].samples[0][1] == {
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_host_cpu_demand_average'].samples[0][2] == 3600.0

    assert metrics['vmware_host_cpu_usage_average'].samples[0][1] == {
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_host_cpu_usage_average'].samples[0][2] == 3700.0

    assert metrics['vmware_host_mem_vmmemctl_average'].samples[0][1] == {
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_host_mem_vmmemctl_average'].samples[0][2] == 1024.0

    assert metrics['vmware_host_net_droppedRx_summation'].samples[0][1] == {
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_host_net_droppedRx_summation'].samples[0][2] == 10.0
Beispiel #7
0
def test_collect_vm_perf():
    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': True,
        'hosts': True,
        'snapshots': True,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
        5000,
    )

    metrics = collector._create_metric_containers()

    metric_1 = mock.Mock()
    metric_1.id.counterId = 10
    metric_1.value = [9]

    metric_2 = mock.Mock()
    metric_2.id.counterId = 1
    metric_2.value = [1]

    metric_3 = mock.Mock()
    metric_3.id.counterId = 13
    metric_3.value = [618]

    metric_4 = mock.Mock()
    metric_4.id.counterId = 18
    metric_4.value = [5]

    ent_1 = mock.Mock()
    ent_1.value = [metric_1, metric_2, metric_3, metric_4]
    ent_1.entity = vim.ManagedObject('vm:1')

    content = mock.Mock()
    content.perfManager.QueryStats.return_value = [ent_1]
    collector.content = _succeed(content)

    collector.__dict__['counter_ids'] = _succeed({
        'cpu.ready.summation':
        1,
        'cpu.maxlimited.summation':
        2,
        'cpu.usage.average':
        3,
        'cpu.usagemhz.average':
        4,
        'disk.usage.average':
        5,
        'disk.read.average':
        6,
        'disk.write.average':
        7,
        'mem.usage.average':
        8,
        'net.received.average':
        9,
        'net.transmitted.average':
        10,
        'cpu.costop.summation':
        11,
        'cpu.idle.summation':
        12,
        'cpu.demand.average':
        13,
        'mem.consumed.average':
        14,
        'mem.active.average':
        15,
        'mem.swapped.average':
        16,
        'mem.vmmemctl.average':
        17,
        'disk.maxTotalLatency.latest':
        18,
        'net.multicastRx.summation':
        19,
        'net.multicastTx.summation':
        20,
        'net.broadcastTx.summation':
        21,
        'net.broadcastRx.summation':
        22,
        'net.droppedRx.summation':
        23,
        'net.droppedTx.summation':
        24,
    })

    collector.__dict__['vm_labels'] = _succeed({
        'vm:1': ['vm-1', 'host-1', 'dc', 'cluster-1'],
    })

    collector.__dict__['vm_inventory'] = _succeed({
        'vm:1': {
            'name': 'vm-1',
            'obj': vim.ManagedObject('vm-1'),
            'runtime.powerState': 'poweredOn',
        },
        'vm:2': {
            'name': 'vm-2',
            'obj': vim.ManagedObject('vm-2'),
            'runtime.powerState': 'poweredOff',
        },
    })

    yield collector._vmware_get_vm_perf_manager_metrics(metrics)

    # General VM metrics
    assert metrics['vmware_vm_net_transmitted_average'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_net_transmitted_average'].samples[0][2] == 9.0

    assert metrics['vmware_vm_cpu_demand_average'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_cpu_demand_average'].samples[0][2] == 618.0

    assert metrics['vmware_vm_disk_maxTotalLatency_latest'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_disk_maxTotalLatency_latest'].samples[0][
        2] == 5.0
Beispiel #8
0
def test_no_error_onempty_vms():
    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': False,
        'hosts': False,
        'snapshots': False,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
        5000,
        ignore_ssl=True,
    )

    metrics = collector._create_metric_containers()

    metric_1 = mock.Mock()
    metric_1.id.counterId = 10
    metric_1.value = [9]

    metric_2 = mock.Mock()
    metric_2.id.counterId = 1
    metric_2.value = [1]

    metric_3 = mock.Mock()
    metric_3.id.counterId = 13
    metric_3.value = [618]

    metric_4 = mock.Mock()
    metric_4.id.counterId = 18
    metric_4.value = [5]

    ent_1 = mock.Mock()
    ent_1.value = [metric_1, metric_2, metric_3, metric_4]
    ent_1.entity = vim.ManagedObject('vm:1')

    content = mock.Mock()
    content.perfManager.QueryStats.return_value = [ent_1]
    collector.content = _succeed(content)

    collector.__dict__['counter_ids'] = _succeed({
        'cpu.ready.summation':
        1,
        'cpu.maxlimited.summation':
        2,
        'cpu.usage.average':
        3,
        'cpu.usagemhz.average':
        4,
        'disk.usage.average':
        5,
        'disk.read.average':
        6,
        'disk.write.average':
        7,
        'mem.usage.average':
        8,
        'net.received.average':
        9,
        'net.transmitted.average':
        10,
        'cpu.costop.summation':
        11,
        'cpu.idle.summation':
        12,
        'cpu.demand.average':
        13,
        'mem.consumed.average':
        14,
        'mem.active.average':
        15,
        'mem.swapped.average':
        16,
        'mem.vmmemctl.average':
        17,
        'disk.maxTotalLatency.latest':
        18,
        'net.multicastRx.summation':
        19,
        'net.multicastTx.summation':
        20,
        'net.broadcastTx.summation':
        21,
        'net.broadcastRx.summation':
        22,
        'net.droppedRx.summation':
        23,
        'net.droppedTx.summation':
        24,
    })

    collector.__dict__['vm_labels'] = _succeed({'': []})
    collector.__dict__['vm_inventory'] = _succeed({'': {}})

    # Try to test for querySpec=[]
    # threads.deferToThread(content.perfManager.QueryStats, querySpec=specs),
    # TypeError Required field "querySpec" not provided (not @optional)
    yield collector._vmware_get_vm_perf_manager_metrics(metrics)

    assert metrics['vmware_vm_power_state'].samples == []
Beispiel #9
0
def test_collect_vms(batch_fetch_properties):
    content = mock.Mock()

    boot_time = EPOCH + datetime.timedelta(seconds=60)

    snapshot_1 = mock.Mock()
    snapshot_1.createTime = EPOCH + datetime.timedelta(seconds=60)
    snapshot_1.name = 'snapshot_1'
    snapshot_1.childSnapshotList = []

    snapshot_2 = mock.Mock()
    snapshot_2.createTime = EPOCH + datetime.timedelta(seconds=120)
    snapshot_2.name = 'snapshot_2'
    snapshot_2.childSnapshotList = [snapshot_1]

    snapshot = mock.Mock()
    snapshot.rootSnapshotList = [snapshot_2]

    disk = mock.Mock()
    disk.diskPath = '/boot'
    disk.capacity = 100
    disk.freeSpace = 50

    batch_fetch_properties.return_value = {
        'vm-1': {
            'name': 'vm-1',
            'runtime.host': vim.ManagedObject('host-1'),
            'runtime.powerState': 'poweredOn',
            'summary.config.numCpu': 1,
            'runtime.bootTime': boot_time,
            'snapshot': snapshot,
            'guest.disk': [disk],
        }
    }

    collect_only = {
        'vms': True,
        'vmguests': True,
        'datastores': True,
        'hosts': True,
        'snapshots': True,
    }
    collector = VmwareCollector(
        '127.0.0.1',
        'root',
        'password',
        collect_only,
    )

    inventory = {
        'host-1': {
            'name': 'host-1',
            'dc': 'dc',
            'cluster': 'cluster-1',
        }
    }

    metrics = collector._create_metric_containers()

    collector._labels = {}

    with mock.patch.object(collector, '_vmware_get_vm_perf_manager_metrics'):
        yield collector._vmware_get_vms(content, metrics, inventory)

    assert _check_properties(batch_fetch_properties.call_args[0][2])

    # General VM metrics
    assert metrics['vmware_vm_power_state'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_power_state'].samples[0][2] == 1.0

    assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_boot_timestamp_seconds'].samples[0][2] == 60

    # Disk info (vmguest)
    assert metrics['vmware_vm_guest_disk_capacity'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'partition': '/boot',
    }
    assert metrics['vmware_vm_guest_disk_capacity'].samples[0][2] == 100

    # Snapshots
    assert metrics['vmware_vm_snapshots'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
    }
    assert metrics['vmware_vm_snapshots'].samples[0][2] == 2

    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'vm_snapshot_name': 'snapshot_2',
    }
    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[0][2] == 120

    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][1] == {
        'vm_name': 'vm-1',
        'host_name': 'host-1',
        'cluster_name': 'cluster-1',
        'dc_name': 'dc',
        'vm_snapshot_name': 'snapshot_1',
    }
    assert metrics['vmware_vm_snapshot_timestamp_seconds'].samples[1][2] == 60