Blame libvirt-gconfig/tests/test-capabilities-parse.c

Packit Service ea0369
/*
Packit Service ea0369
 * test-capabilities-parse.c: test libvirt-gconfig capabilities parsing
Packit Service ea0369
 *
Packit Service ea0369
 * Copyright (C) 2011-2012 Red Hat, Inc.
Packit Service ea0369
 *
Packit Service ea0369
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit Service ea0369
 * copy of this software and associated documentation files (the
Packit Service ea0369
 * "Software"), to deal in the Software without restriction, including
Packit Service ea0369
 * without limitation the rights to use, copy, modify, merge, publish,
Packit Service ea0369
 * distribute, sublicense, and/or sell copies of the Software, and to
Packit Service ea0369
 * permit persons to whom the Software is furnished to do so, subject to
Packit Service ea0369
 * the following conditions:
Packit Service ea0369
 *
Packit Service ea0369
 * The above copyright notice and this permission notice shall be included
Packit Service ea0369
 * in all copies or substantial portions of the Software.
Packit Service ea0369
 *
Packit Service ea0369
 * The Software is provided "as is", without warranty of any kind, express
Packit Service ea0369
 * or implied, including but not limited to the warranties of
Packit Service ea0369
 * merchantability, fitness for a particular purpose and noninfringement.
Packit Service ea0369
 * In no event shall the authors or copyright holders be liable for any
Packit Service ea0369
 * claim, damages or other liability, whether in an action of contract,
Packit Service ea0369
 * tort or otherwise, arising from, out of or in connection with the
Packit Service ea0369
 * software or the use or other dealings in the Software.
Packit Service ea0369
 *
Packit Service ea0369
 * Authors: Zeeshan Ali <zeenix@redhat.com>
Packit Service ea0369
 *          Christophe Fergeau <cfergeau@redhat.com>
Packit Service ea0369
 */
Packit Service ea0369
Packit Service ea0369
#include <config.h>
Packit Service ea0369
Packit Service ea0369
#include <string.h>
Packit Service ea0369
#include <libvirt-gconfig/libvirt-gconfig.h>
Packit Service ea0369
Packit Service ea0369
static void verify_host_caps(GVirConfigCapabilitiesHost *host_caps)
Packit Service ea0369
{
Packit Service ea0369
    GVirConfigCapabilitiesCpu *cpu_caps;
Packit Service ea0369
    GVirConfigCapabilitiesCpuTopology *topology;
Packit Service ea0369
    GList *features, *iter, *secmodels;
Packit Service ea0369
    const char *str;
Packit Service ea0369
Packit Service ea0369
    g_assert(host_caps != NULL);
Packit Service ea0369
    str = gvir_config_capabilities_host_get_uuid(host_caps);
Packit Service ea0369
    g_assert(g_strcmp0(str, "cd6a24b3-46f8-01aa-bb39-c39aa2123730") == 0);
Packit Service ea0369
    cpu_caps = gvir_config_capabilities_host_get_cpu(host_caps);
Packit Service ea0369
    g_assert(cpu_caps != NULL);
Packit Service ea0369
    str = gvir_config_capabilities_cpu_get_arch(cpu_caps);
Packit Service ea0369
    g_assert(g_strcmp0(str, "x86_64") == 0);
Packit Service ea0369
Packit Service ea0369
    features = gvir_config_capabilities_cpu_get_features(cpu_caps);
Packit Service ea0369
    for (iter = features; iter != NULL; iter = iter->next) {
Packit Service ea0369
        g_assert(iter->data != NULL);
Packit Service ea0369
        g_object_unref(G_OBJECT(iter->data));
Packit Service ea0369
    }
Packit Service ea0369
    g_list_free(features);
Packit Service ea0369
Packit Service ea0369
    topology = gvir_config_capabilities_cpu_get_topology(cpu_caps);
Packit Service ea0369
    g_assert(topology != NULL);
Packit Service ea0369
    g_assert(gvir_config_capabilities_cpu_topology_get_sockets(topology) == 1);
Packit Service ea0369
    g_assert(gvir_config_capabilities_cpu_topology_get_cores(topology) == 2);
Packit Service ea0369
    g_assert(gvir_config_capabilities_cpu_topology_get_threads(topology) == 2);
Packit Service ea0369
    g_object_unref(G_OBJECT(topology));
Packit Service ea0369
    g_object_unref(G_OBJECT(cpu_caps));
Packit Service ea0369
Packit Service ea0369
    secmodels = gvir_config_capabilities_host_get_secmodels(host_caps);
Packit Service ea0369
    g_assert(g_list_length(secmodels) == 2);
Packit Service ea0369
    for (iter = secmodels; iter != NULL; iter = iter->next) {
Packit Service ea0369
        GVirConfigCapabilitiesHostSecModel *secmodel;
Packit Service ea0369
Packit Service ea0369
        g_assert(iter->data != NULL);
Packit Service ea0369
        secmodel = GVIR_CONFIG_CAPABILITIES_HOST_SECMODEL(iter->data);
Packit Service ea0369
        g_assert(gvir_config_capabilities_host_secmodel_get_model(secmodel) != NULL);
Packit Service ea0369
        g_assert(gvir_config_capabilities_host_secmodel_get_doi(secmodel) != NULL);
Packit Service ea0369
        g_object_unref(G_OBJECT(iter->data));
Packit Service ea0369
    }
Packit Service ea0369
    g_list_free(secmodels);
Packit Service ea0369
}
Packit Service ea0369
Packit Service ea0369
static void verify_guest_caps(GVirConfigCapabilitiesGuest *guest_caps)
Packit Service ea0369
{
Packit Service ea0369
    GVirConfigCapabilitiesGuestArch *arch_caps;
Packit Service ea0369
    GList *features, *domains, *iter;
Packit Service ea0369
    const char *str;
Packit Service ea0369
Packit Service ea0369
    g_assert(guest_caps != NULL);
Packit Service ea0369
    g_assert(gvir_config_capabilities_guest_get_os_type(guest_caps) ==
Packit Service ea0369
             GVIR_CONFIG_DOMAIN_OS_TYPE_HVM);
Packit Service ea0369
Packit Service ea0369
    features = gvir_config_capabilities_guest_get_features(guest_caps);
Packit Service ea0369
    for (iter = features; iter != NULL; iter = iter->next) {
Packit Service ea0369
        GVirConfigCapabilitiesGuestFeature *feature_caps;
Packit Service ea0369
Packit Service ea0369
        feature_caps = GVIR_CONFIG_CAPABILITIES_GUEST_FEATURE(iter->data);
Packit Service ea0369
        g_assert(feature_caps != NULL);
Packit Service ea0369
        str = gvir_config_capabilities_guest_feature_get_name(feature_caps);
Packit Service ea0369
        g_assert(str != NULL);
Packit Service ea0369
        g_object_unref(G_OBJECT(feature_caps));
Packit Service ea0369
    }
Packit Service ea0369
    g_list_free(features);
Packit Service ea0369
Packit Service ea0369
    arch_caps = gvir_config_capabilities_guest_get_arch(guest_caps);
Packit Service ea0369
    g_assert(arch_caps != NULL);
Packit Service ea0369
    str = gvir_config_capabilities_guest_arch_get_name(arch_caps);
Packit Service ea0369
    g_assert(str != NULL);
Packit Service ea0369
    str = gvir_config_capabilities_guest_arch_get_emulator(arch_caps);
Packit Service ea0369
    g_assert(str != NULL);
Packit Service ea0369
Packit Service ea0369
    domains = gvir_config_capabilities_guest_arch_get_domains(arch_caps);
Packit Service ea0369
    for (iter = domains; iter != NULL; iter = iter->next) {
Packit Service ea0369
        GVirConfigCapabilitiesGuestDomain *domain_caps;
Packit Service ea0369
        GVirConfigDomainVirtType virt_type;
Packit Service ea0369
Packit Service ea0369
        domain_caps = GVIR_CONFIG_CAPABILITIES_GUEST_DOMAIN(iter->data);
Packit Service ea0369
        g_assert(domain_caps != NULL);
Packit Service ea0369
        virt_type = gvir_config_capabilities_guest_domain_get_virt_type(domain_caps);
Packit Service ea0369
        str = gvir_config_capabilities_guest_domain_get_emulator(domain_caps);
Packit Service ea0369
        g_assert((virt_type == GVIR_CONFIG_DOMAIN_VIRT_QEMU && str == NULL) ||
Packit Service ea0369
                 (virt_type == GVIR_CONFIG_DOMAIN_VIRT_KVM &&
Packit Service ea0369
                  g_strcmp0(str, "/usr/bin/qemu-kvm") == 0));
Packit Service ea0369
        g_object_unref(G_OBJECT(domain_caps));
Packit Service ea0369
    }
Packit Service ea0369
    g_list_free(domains);
Packit Service ea0369
    g_object_unref(G_OBJECT(arch_caps));
Packit Service ea0369
}
Packit Service ea0369
Packit Service ea0369
int main(int argc, char **argv)
Packit Service ea0369
{
Packit Service ea0369
    GVirConfigCapabilities *caps;
Packit Service ea0369
    GVirConfigCapabilitiesHost *host_caps;
Packit Service ea0369
    GList *guests_caps, *iter;
Packit Service ea0369
    char *xml;
Packit Service ea0369
    GError *error = NULL;
Packit Service ea0369
Packit Service ea0369
    gvir_config_init(&argc, &argv);
Packit Service ea0369
    if (argc != 2) {
Packit Service ea0369
        g_print("Usage: %s filename\n", argv[0]);
Packit Service ea0369
        g_print("Attempt to parse the libvirt XML definition from filename\n");
Packit Service ea0369
        return 1;
Packit Service ea0369
    }
Packit Service ea0369
Packit Service ea0369
    g_file_get_contents(argv[1], &xml, NULL, &error);
Packit Service ea0369
    if (error != NULL) {
Packit Service ea0369
        g_print("Couldn't read %s: %s\n", argv[1], error->message);
Packit Service ea0369
        return 2;
Packit Service ea0369
    }
Packit Service ea0369
Packit Service ea0369
    caps = gvir_config_capabilities_new_from_xml(xml, &error);
Packit Service ea0369
    g_free(xml);
Packit Service ea0369
    if (error != NULL) {
Packit Service ea0369
        g_print("Couldn't parse %s: %s\n", argv[1], error->message);
Packit Service ea0369
        return 3;
Packit Service ea0369
    }
Packit Service ea0369
    g_assert(caps != NULL);
Packit Service ea0369
    gvir_config_object_validate(GVIR_CONFIG_OBJECT(caps), &error);
Packit Service ea0369
    if (error != NULL) {
Packit Service ea0369
        g_print("%s format is invalid: %s\n", argv[1], error->message);
Packit Service ea0369
        g_clear_error(&error);
Packit Service ea0369
    }
Packit Service ea0369
Packit Service ea0369
    host_caps = gvir_config_capabilities_get_host(caps);
Packit Service ea0369
    verify_host_caps(host_caps);
Packit Service ea0369
    g_object_unref(G_OBJECT(host_caps));
Packit Service ea0369
Packit Service ea0369
    guests_caps = gvir_config_capabilities_get_guests(caps);
Packit Service ea0369
    for (iter = guests_caps; iter != NULL; iter = iter->next) {
Packit Service ea0369
        GVirConfigCapabilitiesGuest *guest_caps;
Packit Service ea0369
Packit Service ea0369
        guest_caps = GVIR_CONFIG_CAPABILITIES_GUEST(iter->data);
Packit Service ea0369
        verify_guest_caps(guest_caps);
Packit Service ea0369
        g_object_unref(G_OBJECT(guest_caps));
Packit Service ea0369
    }
Packit Service ea0369
    g_list_free(guests_caps);
Packit Service ea0369
Packit Service ea0369
    xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(caps));
Packit Service ea0369
    g_print("%s\n", xml);
Packit Service ea0369
    g_free(xml);
Packit Service ea0369
    g_object_unref(G_OBJECT(caps));
Packit Service ea0369
Packit Service ea0369
    return 0;
Packit Service ea0369
}