Blame libvirt-gconfig/tests/test-domain-create.c

Packit a07778
/*
Packit a07778
 * test-domain-create.c: test libvirt-gconfig domain creation
Packit a07778
 *
Packit a07778
 * Copyright (C) 2011 Red Hat, Inc.
Packit a07778
 *
Packit a07778
 * Permission is hereby granted, free of charge, to any person obtaining a
Packit a07778
 * copy of this software and associated documentation files (the
Packit a07778
 * "Software"), to deal in the Software without restriction, including
Packit a07778
 * without limitation the rights to use, copy, modify, merge, publish,
Packit a07778
 * distribute, sublicense, and/or sell copies of the Software, and to
Packit a07778
 * permit persons to whom the Software is furnished to do so, subject to
Packit a07778
 * the following conditions:
Packit a07778
 *
Packit a07778
 * The above copyright notice and this permission notice shall be included
Packit a07778
 * in all copies or substantial portions of the Software.
Packit a07778
 *
Packit a07778
 * The Software is provided "as is", without warranty of any kind, express
Packit a07778
 * or implied, including but not limited to the warranties of
Packit a07778
 * merchantability, fitness for a particular purpose and noninfringement.
Packit a07778
 * In no event shall the authors or copyright holders be liable for any
Packit a07778
 * claim, damages or other liability, whether in an action of contract,
Packit a07778
 * tort or otherwise, arising from, out of or in connection with the
Packit a07778
 * software or the use or other dealings in the Software.
Packit a07778
 *
Packit a07778
 * Author: Christophe Fergeau <cfergeau@redhat.com>
Packit a07778
 */
Packit a07778
Packit a07778
#include <config.h>
Packit a07778
Packit a07778
#include <string.h>
Packit a07778
#include <libvirt-gconfig/libvirt-gconfig.h>
Packit a07778
Packit a07778
const char *features[] = { "foo", "bar", "baz", NULL };
Packit a07778
Packit a07778
#define g_str_const_check(str1, str2) G_STMT_START { \
Packit a07778
    g_assert((str1) != NULL); \
Packit a07778
    g_assert(g_strcmp0((str1), (str2)) == 0); \
Packit a07778
} G_STMT_END
Packit a07778
Packit a07778
#define g_str_check(str1, str2) G_STMT_START { \
Packit a07778
    char *alloced_str = (str1); \
Packit a07778
    g_str_const_check(alloced_str, (str2)); \
Packit a07778
    g_free(alloced_str); \
Packit a07778
} G_STMT_END
Packit a07778
Packit a07778
Packit a07778
static GVirConfigDomainControllerUsb *
Packit a07778
create_usb_controller(GVirConfigDomainControllerUsbModel model, guint indx,
Packit a07778
                      GVirConfigDomainControllerUsb *master, guint start_port,
Packit a07778
                      guint domain, guint bus, guint slot, guint function,
Packit a07778
                      gboolean multifunction)
Packit a07778
{
Packit a07778
    GVirConfigDomainControllerUsb *controller;
Packit a07778
    GVirConfigDomainAddressPci *address;
Packit a07778
Packit a07778
    controller = gvir_config_domain_controller_usb_new();
Packit a07778
    gvir_config_domain_controller_usb_set_model(controller, model);
Packit a07778
    gvir_config_domain_controller_set_index(GVIR_CONFIG_DOMAIN_CONTROLLER(controller), indx);
Packit a07778
    if (master)
Packit a07778
        gvir_config_domain_controller_usb_set_master(controller, master, start_port);
Packit a07778
    address = gvir_config_domain_address_pci_new();
Packit a07778
    gvir_config_domain_address_pci_set_domain(address, domain);
Packit a07778
    gvir_config_domain_address_pci_set_bus(address, bus);
Packit a07778
    gvir_config_domain_address_pci_set_slot(address, slot);
Packit a07778
    gvir_config_domain_address_pci_set_function(address, function);
Packit a07778
    if (multifunction)
Packit a07778
        gvir_config_domain_address_pci_set_multifunction(address, multifunction);
Packit a07778
    gvir_config_domain_controller_set_address(GVIR_CONFIG_DOMAIN_CONTROLLER(controller),
Packit a07778
                                              GVIR_CONFIG_DOMAIN_ADDRESS(address));
Packit a07778
    g_object_unref(G_OBJECT(address));
Packit a07778
Packit a07778
    return controller;
Packit a07778
}
Packit a07778
Packit a07778
static GVirConfigDomainRedirdev *
Packit a07778
create_redirdev(guint bus, guint port)
Packit a07778
{
Packit a07778
    GVirConfigDomainRedirdev *redirdev;
Packit a07778
    GVirConfigDomainAddressUsb *address;
Packit a07778
    GVirConfigDomainChardevSourceSpiceVmc *spicevmc;
Packit a07778
    gchar *port_str;
Packit a07778
Packit a07778
    redirdev = gvir_config_domain_redirdev_new();
Packit a07778
    gvir_config_domain_redirdev_set_bus(redirdev,
Packit a07778
                                        GVIR_CONFIG_DOMAIN_REDIRDEV_BUS_USB);
Packit a07778
    spicevmc = gvir_config_domain_chardev_source_spicevmc_new();
Packit a07778
    gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(redirdev),
Packit a07778
                                          GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(spicevmc));
Packit a07778
    g_object_unref(G_OBJECT(spicevmc));
Packit a07778
Packit a07778
    address = gvir_config_domain_address_usb_new();
Packit a07778
    gvir_config_domain_address_usb_set_bus(address, bus);
Packit a07778
    port_str = g_strdup_printf("%d", port);
Packit a07778
    gvir_config_domain_address_usb_set_port(address, port_str);
Packit a07778
    g_free(port_str);
Packit a07778
    gvir_config_domain_redirdev_set_address(redirdev,
Packit a07778
                                            GVIR_CONFIG_DOMAIN_ADDRESS(address));
Packit a07778
    g_object_unref(G_OBJECT(address));
Packit a07778
Packit a07778
    return redirdev;
Packit a07778
}
Packit a07778
Packit a07778
int main(int argc, char **argv)
Packit a07778
{
Packit a07778
    GVirConfigDomain *domain;
Packit a07778
    GStrv feat;
Packit a07778
    unsigned int i;
Packit a07778
    char *xml;
Packit a07778
Packit a07778
    gvir_config_init(&argc, &argv);
Packit a07778
Packit a07778
    domain = gvir_config_domain_new();
Packit a07778
    g_assert(domain != NULL);
Packit a07778
Packit a07778
    gvir_config_domain_set_virt_type(domain, GVIR_CONFIG_DOMAIN_VIRT_KVM);
Packit a07778
    g_assert(gvir_config_domain_get_virt_type(domain) == GVIR_CONFIG_DOMAIN_VIRT_KVM);
Packit a07778
    gvir_config_domain_set_name(domain, "foo");
Packit a07778
    g_str_const_check(gvir_config_domain_get_name(domain), "foo");
Packit a07778
Packit a07778
    gvir_config_domain_set_memory(domain, 1234);
Packit a07778
    g_assert(gvir_config_domain_get_memory(domain) == 1234);
Packit a07778
    gvir_config_domain_set_vcpus(domain, 3);
Packit a07778
    g_assert(gvir_config_domain_get_vcpus(domain) == 3);
Packit a07778
Packit a07778
    gvir_config_domain_set_features(domain, (const GStrv)features);
Packit a07778
    feat = gvir_config_domain_get_features(domain);
Packit a07778
    for (i = 0; features[i] != NULL; i++) {
Packit a07778
        g_assert(feat[i] != NULL);
Packit a07778
        g_assert(strcmp(feat[i], features[i]) == 0);
Packit a07778
    }
Packit a07778
    g_strfreev(feat);
Packit a07778
Packit a07778
    gvir_config_domain_set_lifecycle(domain,
Packit a07778
                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_ON_POWEROFF,
Packit a07778
                                     GVIR_CONFIG_DOMAIN_LIFECYCLE_RESTART);
Packit a07778
Packit a07778
    /* clock node */
Packit a07778
    GVirConfigDomainClock *klock;
Packit a07778
    GVirConfigDomainTimerPit *pit;
Packit a07778
    GVirConfigDomainTimerRtc *rtc;
Packit a07778
    GVirConfigDomainTimerHpet *hpet;
Packit a07778
Packit a07778
    klock = gvir_config_domain_clock_new();
Packit a07778
    gvir_config_domain_clock_set_offset(klock, GVIR_CONFIG_DOMAIN_CLOCK_TIMEZONE);
Packit a07778
    gvir_config_domain_clock_set_timezone(klock, "CEST");
Packit a07778
    g_assert(gvir_config_domain_clock_get_offset(klock) == GVIR_CONFIG_DOMAIN_CLOCK_TIMEZONE);
Packit a07778
    g_str_const_check(gvir_config_domain_clock_get_timezone(klock), "CEST");
Packit a07778
Packit a07778
    pit = gvir_config_domain_timer_pit_new();
Packit a07778
    gvir_config_domain_timer_set_tick_policy(GVIR_CONFIG_DOMAIN_TIMER(pit),
Packit a07778
                                             GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_DELAY);
Packit a07778
    gvir_config_domain_clock_add_timer(klock, GVIR_CONFIG_DOMAIN_TIMER(pit));
Packit a07778
    g_assert(gvir_config_domain_timer_get_tick_policy(GVIR_CONFIG_DOMAIN_TIMER(pit)) == GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_DELAY);
Packit a07778
    g_assert(gvir_config_domain_timer_get_present(GVIR_CONFIG_DOMAIN_TIMER(pit)) != FALSE);
Packit a07778
    g_object_unref(G_OBJECT(pit));
Packit a07778
Packit a07778
    rtc = gvir_config_domain_timer_rtc_new();
Packit a07778
    gvir_config_domain_timer_set_tick_policy(GVIR_CONFIG_DOMAIN_TIMER(rtc),
Packit a07778
                                             GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_CATCHUP);
Packit a07778
    gvir_config_domain_clock_add_timer(klock, GVIR_CONFIG_DOMAIN_TIMER(rtc));
Packit a07778
    g_assert(gvir_config_domain_timer_get_tick_policy(GVIR_CONFIG_DOMAIN_TIMER(rtc)) == GVIR_CONFIG_DOMAIN_TIMER_TICK_POLICY_CATCHUP);
Packit a07778
    g_assert(gvir_config_domain_timer_get_present(GVIR_CONFIG_DOMAIN_TIMER(rtc)) != FALSE);
Packit a07778
    g_object_unref(G_OBJECT(rtc));
Packit a07778
Packit a07778
    hpet = gvir_config_domain_timer_hpet_new();
Packit a07778
    gvir_config_domain_timer_set_present(GVIR_CONFIG_DOMAIN_TIMER(hpet), FALSE);
Packit a07778
    gvir_config_domain_clock_add_timer(klock, GVIR_CONFIG_DOMAIN_TIMER(hpet));
Packit a07778
    g_assert(gvir_config_domain_timer_get_present(GVIR_CONFIG_DOMAIN_TIMER(hpet)) == FALSE);
Packit a07778
    g_object_unref(G_OBJECT(hpet));
Packit a07778
Packit a07778
    gvir_config_domain_set_clock(domain, klock);
Packit a07778
    g_object_unref(G_OBJECT(klock));
Packit a07778
Packit a07778
    klock = gvir_config_domain_get_clock(domain);
Packit a07778
    g_assert(klock != NULL);
Packit a07778
    g_assert(gvir_config_domain_clock_get_offset(klock) == GVIR_CONFIG_DOMAIN_CLOCK_TIMEZONE);
Packit a07778
    g_str_const_check(gvir_config_domain_clock_get_timezone(klock), "CEST");
Packit a07778
    g_object_unref(G_OBJECT(klock));
Packit a07778
Packit a07778
    /* os node */
Packit a07778
    GVirConfigDomainOs *os;
Packit a07778
    GList *devices = NULL;
Packit a07778
Packit a07778
    os = gvir_config_domain_os_new();
Packit a07778
    gvir_config_domain_os_set_os_type(os, GVIR_CONFIG_DOMAIN_OS_TYPE_HVM);
Packit a07778
    gvir_config_domain_os_set_arch(os, "x86_64");
Packit a07778
    devices = g_list_append(devices,
Packit a07778
                             GINT_TO_POINTER(GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_CDROM));
Packit a07778
    devices = g_list_append(devices,
Packit a07778
                            GINT_TO_POINTER(GVIR_CONFIG_DOMAIN_OS_BOOT_DEVICE_NETWORK));
Packit a07778
    gvir_config_domain_os_set_boot_devices(os, devices);
Packit a07778
    g_list_free(devices);
Packit a07778
    devices = NULL;
Packit a07778
    gvir_config_domain_set_os(domain, os);
Packit a07778
    g_object_unref(G_OBJECT(os));
Packit a07778
Packit a07778
    /* cpu node */
Packit a07778
    GVirConfigDomainCpu *cpu;
Packit a07778
Packit a07778
    cpu = gvir_config_domain_cpu_new();
Packit a07778
Packit a07778
    /* cpu/feature nodes */
Packit a07778
    GVirConfigDomainCpuFeature *feature;
Packit a07778
    GList *cpu_features = NULL;
Packit a07778
Packit a07778
    gvir_config_domain_cpu_set_match_policy(cpu, GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT);
Packit a07778
    gvir_config_domain_cpu_set_mode(cpu, GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH);
Packit a07778
    feature = gvir_config_domain_cpu_feature_new();
Packit a07778
    gvir_config_capabilities_cpu_feature_set_name(GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature),
Packit a07778
                                                  "foo");
Packit a07778
    gvir_config_domain_cpu_feature_set_policy(feature, GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE);
Packit a07778
    gvir_config_capabilities_cpu_add_feature(GVIR_CONFIG_CAPABILITIES_CPU(cpu),
Packit a07778
                                             GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature));
Packit a07778
    g_object_unref(feature);
Packit a07778
Packit a07778
    /* cpu/topology nodes */
Packit a07778
    GVirConfigCapabilitiesCpuTopology *topology;
Packit a07778
Packit a07778
    topology = gvir_config_capabilities_cpu_topology_new();
Packit a07778
    gvir_config_capabilities_cpu_topology_set_cores(topology, 1);
Packit a07778
    gvir_config_capabilities_cpu_topology_set_sockets(topology, 2);
Packit a07778
    gvir_config_capabilities_cpu_topology_set_threads(topology, 3);
Packit a07778
    gvir_config_capabilities_cpu_set_topology(GVIR_CONFIG_CAPABILITIES_CPU(cpu),
Packit a07778
                                              topology);
Packit a07778
    g_object_unref(topology);
Packit a07778
    gvir_config_domain_set_cpu(domain, cpu);
Packit a07778
    g_object_unref(cpu);
Packit a07778
Packit a07778
    cpu = gvir_config_domain_get_cpu(domain);
Packit a07778
    g_assert(gvir_config_domain_cpu_get_match_policy(cpu) == GVIR_CONFIG_DOMAIN_CPU_MATCH_POLICY_STRICT);
Packit a07778
    g_assert(gvir_config_domain_cpu_get_mode(cpu) == GVIR_CONFIG_DOMAIN_CPU_MODE_HOST_PASSTHROUGH);
Packit a07778
    g_assert(cpu != NULL);
Packit a07778
    g_assert(GVIR_CONFIG_IS_CAPABILITIES_CPU(cpu));
Packit a07778
Packit a07778
    cpu_features = gvir_config_capabilities_cpu_get_features(GVIR_CONFIG_CAPABILITIES_CPU(cpu));
Packit a07778
    g_assert(g_list_length(cpu_features) >= 1);
Packit a07778
    g_assert(GVIR_CONFIG_IS_DOMAIN_CPU_FEATURE(cpu_features->data));
Packit a07778
    feature = GVIR_CONFIG_DOMAIN_CPU_FEATURE(cpu_features->data);
Packit a07778
    g_str_const_check(gvir_config_capabilities_cpu_feature_get_name
Packit a07778
                        (GVIR_CONFIG_CAPABILITIES_CPU_FEATURE(feature)), "foo");
Packit a07778
    g_assert(gvir_config_domain_cpu_feature_get_policy(feature) == GVIR_CONFIG_DOMAIN_CPU_FEATURE_POLICY_REQUIRE);
Packit a07778
    g_list_free_full(cpu_features, g_object_unref);
Packit a07778
Packit a07778
    topology = gvir_config_capabilities_cpu_get_topology(GVIR_CONFIG_CAPABILITIES_CPU(cpu));
Packit a07778
    g_assert(topology != NULL);
Packit a07778
    g_assert(gvir_config_capabilities_cpu_topology_get_cores(topology) == 1);
Packit a07778
    g_assert(gvir_config_capabilities_cpu_topology_get_sockets(topology) == 2);
Packit a07778
    g_assert(gvir_config_capabilities_cpu_topology_get_threads(topology) == 3);
Packit a07778
    g_object_unref(topology);
Packit a07778
    g_object_unref(cpu);
Packit a07778
Packit a07778
    /* disk node */
Packit a07778
    GVirConfigDomainDisk *disk;
Packit a07778
    GVirConfigDomainDiskDriver *driver;
Packit a07778
Packit a07778
    driver = gvir_config_domain_disk_driver_new();
Packit a07778
    gvir_config_domain_disk_driver_set_name(driver, "foo");
Packit a07778
    gvir_config_domain_disk_driver_set_format(driver, GVIR_CONFIG_DOMAIN_DISK_FORMAT_BOCHS);
Packit a07778
    gvir_config_domain_disk_driver_set_name(driver, "qemu");
Packit a07778
    gvir_config_domain_disk_driver_set_cache(driver, GVIR_CONFIG_DOMAIN_DISK_CACHE_NONE);
Packit a07778
    gvir_config_domain_disk_driver_set_format(driver, GVIR_CONFIG_DOMAIN_DISK_FORMAT_QCOW2);
Packit a07778
    gvir_config_domain_disk_driver_set_copy_on_read(driver, TRUE);
Packit a07778
Packit a07778
    disk = gvir_config_domain_disk_new();
Packit a07778
    gvir_config_domain_disk_set_type(disk, GVIR_CONFIG_DOMAIN_DISK_FILE);
Packit a07778
    gvir_config_domain_disk_set_guest_device_type(disk, GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_DISK);
Packit a07778
    gvir_config_domain_disk_set_source(disk, "/tmp/foo/bar");
Packit a07778
    gvir_config_domain_disk_set_startup_policy (disk, GVIR_CONFIG_DOMAIN_DISK_STARTUP_POLICY_REQUISITE);
Packit a07778
    gvir_config_domain_disk_set_target_bus(disk, GVIR_CONFIG_DOMAIN_DISK_BUS_IDE);
Packit a07778
    gvir_config_domain_disk_set_target_dev(disk, "hda");
Packit a07778
    gvir_config_domain_disk_set_driver(disk, driver);
Packit a07778
    g_object_unref(G_OBJECT(driver));
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(disk));
Packit a07778
Packit a07778
    g_assert(gvir_config_domain_disk_get_disk_type(disk) == GVIR_CONFIG_DOMAIN_DISK_FILE);
Packit a07778
    g_assert(gvir_config_domain_disk_get_guest_device_type(disk) == GVIR_CONFIG_DOMAIN_DISK_GUEST_DEVICE_DISK);
Packit a07778
    g_assert(gvir_config_domain_disk_get_startup_policy (disk) == GVIR_CONFIG_DOMAIN_DISK_STARTUP_POLICY_REQUISITE);
Packit a07778
    g_str_const_check(gvir_config_domain_disk_get_source(disk), "/tmp/foo/bar");
Packit a07778
    driver = gvir_config_domain_disk_get_driver(disk);
Packit a07778
    g_assert(driver != NULL);
Packit a07778
    g_assert(gvir_config_domain_disk_driver_get_cache(driver) == GVIR_CONFIG_DOMAIN_DISK_CACHE_NONE);
Packit a07778
    g_str_const_check(gvir_config_domain_disk_driver_get_name(driver), "qemu");
Packit a07778
    g_assert(gvir_config_domain_disk_driver_get_format(driver) == GVIR_CONFIG_DOMAIN_DISK_FORMAT_QCOW2);
Packit a07778
    g_assert(gvir_config_domain_disk_driver_get_copy_on_read(driver));
Packit a07778
    g_assert(gvir_config_domain_disk_get_target_bus(disk) == GVIR_CONFIG_DOMAIN_DISK_BUS_IDE);
Packit a07778
    g_str_const_check(gvir_config_domain_disk_get_target_dev(disk), "hda");
Packit a07778
    g_object_unref(driver);
Packit a07778
Packit a07778
Packit a07778
    /* network interfaces node */
Packit a07778
    GVirConfigDomainInterface *interface;
Packit a07778
Packit a07778
    interface = GVIR_CONFIG_DOMAIN_INTERFACE(gvir_config_domain_interface_network_new());
Packit a07778
    gvir_config_domain_interface_network_set_source(GVIR_CONFIG_DOMAIN_INTERFACE_NETWORK(interface),
Packit a07778
                                                    "default");
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(interface));
Packit a07778
Packit a07778
    interface = GVIR_CONFIG_DOMAIN_INTERFACE(gvir_config_domain_interface_user_new());
Packit a07778
    gvir_config_domain_interface_set_ifname(interface, "eth0");
Packit a07778
    gvir_config_domain_interface_set_link_state(interface,
Packit a07778
                                                GVIR_CONFIG_DOMAIN_INTERFACE_LINK_STATE_UP);
Packit a07778
    gvir_config_domain_interface_set_mac(interface, "00:11:22:33:44:55");
Packit a07778
    gvir_config_domain_interface_set_model(interface, "foo");
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(interface));
Packit a07778
Packit a07778
Packit a07778
    /* input node */
Packit a07778
    GVirConfigDomainInput *input;
Packit a07778
Packit a07778
    input = gvir_config_domain_input_new();
Packit a07778
    gvir_config_domain_input_set_device_type(input,
Packit a07778
                                             GVIR_CONFIG_DOMAIN_INPUT_DEVICE_TABLET);
Packit a07778
    gvir_config_domain_input_set_bus(input, GVIR_CONFIG_DOMAIN_INPUT_BUS_USB);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(input));
Packit a07778
Packit a07778
    /* graphics node */
Packit a07778
    GVirConfigDomainGraphicsSpice *graphics;
Packit a07778
Packit a07778
    graphics = gvir_config_domain_graphics_spice_new();
Packit a07778
    gvir_config_domain_graphics_spice_set_port(graphics, 1234);
Packit a07778
    g_assert(gvir_config_domain_graphics_spice_get_port(graphics) == 1234);
Packit a07778
Packit a07778
    /* SPICE image compression configuration */
Packit a07778
    gvir_config_domain_graphics_spice_set_image_compression
Packit a07778
        (graphics, GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_AUTO_LZ);
Packit a07778
    g_assert(gvir_config_domain_graphics_spice_get_image_compression(graphics) ==
Packit a07778
             GVIR_CONFIG_DOMAIN_GRAPHICS_SPICE_IMAGE_COMPRESSION_AUTO_LZ);
Packit a07778
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(graphics));
Packit a07778
Packit a07778
    /* video node */
Packit a07778
    GVirConfigDomainVideo *video;
Packit a07778
Packit a07778
    video = gvir_config_domain_video_new();
Packit a07778
    gvir_config_domain_video_set_model(video,
Packit a07778
                                       GVIR_CONFIG_DOMAIN_VIDEO_MODEL_QXL);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(video));
Packit a07778
Packit a07778
    /* sound node */
Packit a07778
    GVirConfigDomainSound *sound;
Packit a07778
Packit a07778
    sound = gvir_config_domain_sound_new();
Packit a07778
    gvir_config_domain_sound_set_model(sound,
Packit a07778
                                       GVIR_CONFIG_DOMAIN_SOUND_MODEL_ES1370);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(sound));
Packit a07778
Packit a07778
    /* console node */
Packit a07778
    GVirConfigDomainConsole *console;
Packit a07778
    GVirConfigDomainChardevSourcePty *pty;
Packit a07778
Packit a07778
    console = gvir_config_domain_console_new();
Packit a07778
    pty = gvir_config_domain_chardev_source_pty_new();
Packit a07778
    gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(console),
Packit a07778
                                          GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(pty));
Packit a07778
    g_object_unref(G_OBJECT(pty));
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(console));
Packit a07778
Packit a07778
    /* spice agent channel */
Packit a07778
    GVirConfigDomainChannel *channel;
Packit a07778
    GVirConfigDomainChardevSourceSpiceVmc *spicevmc;
Packit a07778
Packit a07778
    channel = gvir_config_domain_channel_new();
Packit a07778
    gvir_config_domain_channel_set_target_type(channel,
Packit a07778
                                               GVIR_CONFIG_DOMAIN_CHANNEL_TARGET_VIRTIO);
Packit a07778
    spicevmc = gvir_config_domain_chardev_source_spicevmc_new();
Packit a07778
    gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(channel),
Packit a07778
                                          GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(spicevmc));
Packit a07778
    g_object_unref(G_OBJECT(spicevmc));
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(channel));
Packit a07778
Packit a07778
    /* spice usb redirection */
Packit a07778
    GVirConfigDomainControllerUsb *ehci;
Packit a07778
    GVirConfigDomainControllerUsb *uhci1;
Packit a07778
    GVirConfigDomainControllerUsb *uhci2;
Packit a07778
    GVirConfigDomainControllerUsb *uhci3;
Packit a07778
    GVirConfigDomainRedirdev *redirdev;
Packit a07778
Packit a07778
    ehci = create_usb_controller(GVIR_CONFIG_DOMAIN_CONTROLLER_USB_MODEL_ICH9_EHCI1,
Packit a07778
                                 1, NULL, 0, 0, 0, 8, 7, FALSE);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(ehci));
Packit a07778
    uhci1 = create_usb_controller(GVIR_CONFIG_DOMAIN_CONTROLLER_USB_MODEL_ICH9_UHCI1,
Packit a07778
                                  7, ehci, 0, 0, 0, 8, 0, TRUE);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(uhci1));
Packit a07778
    uhci2 = create_usb_controller(GVIR_CONFIG_DOMAIN_CONTROLLER_USB_MODEL_ICH9_UHCI2,
Packit a07778
                                  7, ehci, 2, 0, 0, 8, 1, FALSE);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(uhci2));
Packit a07778
    uhci3 = create_usb_controller(GVIR_CONFIG_DOMAIN_CONTROLLER_USB_MODEL_ICH9_UHCI3,
Packit a07778
                                  7, ehci, 4, 0, 0, 8, 2, FALSE);
Packit a07778
    g_assert(gvir_config_domain_controller_get_index(GVIR_CONFIG_DOMAIN_CONTROLLER(uhci1)) == 1);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(uhci3));
Packit a07778
Packit a07778
Packit a07778
    /* three redirdev channels allows to redirect a maximum of 3 USB
Packit a07778
     * devices at a time. The address which create_redirdev assigns to the
Packit a07778
     * redirdev object is optional
Packit a07778
     */
Packit a07778
    redirdev = create_redirdev(0, 3);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(redirdev));
Packit a07778
    redirdev = create_redirdev(0, 4);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(redirdev));
Packit a07778
    redirdev = create_redirdev(0, 5);
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(redirdev));
Packit a07778
Packit a07778
    /* unix channel */
Packit a07778
    GVirConfigDomainChardevSourceUnix *unix_source;
Packit a07778
Packit a07778
    channel = gvir_config_domain_channel_new();
Packit a07778
    gvir_config_domain_channel_set_target_type(channel,
Packit a07778
                                               GVIR_CONFIG_DOMAIN_CHANNEL_TARGET_VIRTIO);
Packit a07778
    gvir_config_domain_channel_set_target_name(channel, "org.qemu.guest_agent.0");
Packit a07778
    unix_source = gvir_config_domain_chardev_source_unix_new();
Packit a07778
    gvir_config_domain_chardev_set_source(GVIR_CONFIG_DOMAIN_CHARDEV(channel),
Packit a07778
                                          GVIR_CONFIG_DOMAIN_CHARDEV_SOURCE(unix_source));
Packit a07778
    g_object_unref(G_OBJECT(unix_source));
Packit a07778
    devices = g_list_append(devices, GVIR_CONFIG_DOMAIN_DEVICE(channel));
Packit a07778
Packit a07778
Packit a07778
    gvir_config_domain_set_devices(domain, devices);
Packit a07778
    g_list_foreach(devices, (GFunc)g_object_unref, NULL);
Packit a07778
    g_list_free(devices);
Packit a07778
    devices = NULL;
Packit a07778
Packit a07778
    gvir_config_domain_set_custom_xml(domain, "<foo/>", "ns", "http://foo", NULL);
Packit a07778
    gvir_config_domain_set_custom_xml(domain, "<foo/>", "nsbar", "http://bar", NULL);
Packit a07778
    gvir_config_domain_set_custom_xml(domain, "<foo/>", "ns", "http://bar", NULL);
Packit a07778
    gvir_config_domain_set_custom_xml(domain, "<bar/>", "ns", "http://foo", NULL);
Packit a07778
Packit a07778
    g_str_check(gvir_config_domain_get_custom_xml(domain, "http://foo"), "<ns:bar xmlns:ns=\"http://foo\"/>");
Packit a07778
    g_str_check(gvir_config_domain_get_custom_xml(domain, "http://bar"), "<ns:foo xmlns:ns=\"http://bar\"/>");
Packit a07778
Packit a07778
    xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(domain));
Packit a07778
    g_print("%s\n\n", xml);
Packit a07778
    g_free(xml);
Packit a07778
    g_object_unref(G_OBJECT(domain));
Packit a07778
Packit a07778
Packit a07778
    /* storage pool */
Packit a07778
    GVirConfigStoragePool *pool;
Packit a07778
    GVirConfigStoragePoolSource *pool_source;
Packit a07778
    GVirConfigStoragePoolTarget *pool_target;
Packit a07778
    GVirConfigStoragePermissions *perms;
Packit a07778
Packit a07778
    pool = gvir_config_storage_pool_new();
Packit a07778
    gvir_config_storage_pool_set_pool_type(pool, GVIR_CONFIG_STORAGE_POOL_TYPE_DIR);
Packit a07778
Packit a07778
    pool_source = gvir_config_storage_pool_source_new();
Packit a07778
    gvir_config_storage_pool_source_set_directory(pool_source, "/foo/bar");
Packit a07778
    gvir_config_storage_pool_set_source(pool, pool_source);
Packit a07778
    g_object_unref(G_OBJECT(pool_source));
Packit a07778
    pool_source = gvir_config_storage_pool_get_source(pool);
Packit a07778
    g_str_const_check(gvir_config_storage_pool_source_get_directory(pool_source), "/foo/bar");
Packit a07778
    g_object_unref(G_OBJECT(pool_source));
Packit a07778
Packit a07778
    perms = gvir_config_storage_permissions_new();
Packit a07778
    gvir_config_storage_permissions_set_owner(perms, 1001);
Packit a07778
    gvir_config_storage_permissions_set_group(perms, 1007);
Packit a07778
    gvir_config_storage_permissions_set_mode(perms, 0744);
Packit a07778
    gvir_config_storage_permissions_set_label(perms, "virt_image_t");
Packit a07778
Packit a07778
    pool_target = gvir_config_storage_pool_target_new();
Packit a07778
    gvir_config_storage_pool_target_set_path(pool_target, "/dev/disk/by-path");
Packit a07778
    gvir_config_storage_pool_target_set_permissions(pool_target, perms);
Packit a07778
    g_object_unref(G_OBJECT(perms));
Packit a07778
    gvir_config_storage_pool_set_target(pool, pool_target);
Packit a07778
    g_object_unref(G_OBJECT(pool_target));
Packit a07778
Packit a07778
    pool_target = gvir_config_storage_pool_get_target(pool);
Packit a07778
    g_str_const_check(gvir_config_storage_pool_target_get_path(pool_target), "/dev/disk/by-path");
Packit a07778
    perms = gvir_config_storage_pool_target_get_permissions(pool_target);
Packit a07778
    g_object_unref(G_OBJECT(pool_target));
Packit a07778
    g_assert(gvir_config_storage_permissions_get_owner(perms) == 1001);
Packit a07778
    g_assert(gvir_config_storage_permissions_get_group(perms) == 1007);
Packit a07778
    g_assert(gvir_config_storage_permissions_get_mode(perms) == 0744);
Packit a07778
    g_str_const_check(gvir_config_storage_permissions_get_label(perms), "virt_image_t");
Packit a07778
    g_object_unref(G_OBJECT(perms));
Packit a07778
Packit a07778
    xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(pool));
Packit a07778
    g_print("%s\n\n", xml);
Packit a07778
    g_free(xml);
Packit a07778
    g_object_unref(G_OBJECT(pool));
Packit a07778
Packit a07778
Packit a07778
    /* storage volume */
Packit a07778
    GVirConfigStorageVol *vol;
Packit a07778
    GVirConfigStorageVolTarget *vol_target;
Packit a07778
Packit a07778
    vol = gvir_config_storage_vol_new();
Packit a07778
    gvir_config_storage_vol_set_name(vol, "my-volume");
Packit a07778
    gvir_config_storage_vol_set_capacity(vol, 1000000);
Packit a07778
Packit a07778
    perms = gvir_config_storage_permissions_new();
Packit a07778
    gvir_config_storage_permissions_set_owner(perms, 1001);
Packit a07778
    gvir_config_storage_permissions_set_group(perms, 1007);
Packit a07778
    gvir_config_storage_permissions_set_mode(perms, 0744);
Packit a07778
    gvir_config_storage_permissions_set_label(perms, "virt_image_t");
Packit a07778
Packit a07778
    vol_target = gvir_config_storage_vol_target_new();
Packit a07778
    gvir_config_storage_vol_target_set_format(vol_target, "qcow2");
Packit a07778
    gvir_config_storage_vol_target_set_permissions(vol_target, perms);
Packit a07778
    gvir_config_storage_vol_target_set_compat(vol_target, "1.1");
Packit a07778
    gvir_config_storage_vol_target_set_features(vol_target, GVIR_CONFIG_STORAGE_VOL_TARGET_FEATURE_LAZY_REFCOUNT);
Packit a07778
    g_object_unref(G_OBJECT(perms));
Packit a07778
    gvir_config_storage_vol_set_target(vol, vol_target);
Packit a07778
    g_object_unref(G_OBJECT(vol_target));
Packit a07778
Packit a07778
    xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(vol));
Packit a07778
    g_print("%s\n\n", xml);
Packit a07778
    g_free(xml);
Packit a07778
    g_object_unref(G_OBJECT(vol));
Packit a07778
Packit a07778
    return 0;
Packit a07778
}