aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxen/test/test_hvm_bindings.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/libxen/test/test_hvm_bindings.c')
-rw-r--r--tools/libxen/test/test_hvm_bindings.c445
1 files changed, 0 insertions, 445 deletions
diff --git a/tools/libxen/test/test_hvm_bindings.c b/tools/libxen/test/test_hvm_bindings.c
deleted file mode 100644
index 8bc8e7c347..0000000000
--- a/tools/libxen/test/test_hvm_bindings.c
+++ /dev/null
@@ -1,445 +0,0 @@
-/*
- * Copyright (c) 2006 XenSource, Inc.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#define _GNU_SOURCE
-#include <inttypes.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <libxml/parser.h>
-#include <curl/curl.h>
-
-#include "xen_host.h"
-#include "xen_sr.h"
-#include "xen_vbd.h"
-#include "xen_vdi.h"
-#include "xen_vm.h"
-
-
-static void usage()
-{
- fprintf(stderr,
-"Usage:\n"
-"\n"
-" test_bindings <url> <username> <password>\n"
-"\n"
-"where\n"
-" <url> is a fragment of the server's URL, e.g. localhost:8005/RPC2;\n"
-" <username> is the username to use at the server; and\n"
-" <password> is the password.\n");
-
- exit(EXIT_FAILURE);
-}
-
-
-static char *url;
-
-
-typedef struct
-{
- xen_result_func func;
- void *handle;
-} xen_comms;
-
-
-static xen_vm create_new_vm(xen_session *session);
-static void print_vm_power_state(xen_session *session, xen_vm vm);
-
-
-static size_t
-write_func(void *ptr, size_t size, size_t nmemb, xen_comms *comms)
-{
- size_t n = size * nmemb;
- return comms->func(ptr, n, comms->handle) ? n : 0;
-}
-
-
-static int
-call_func(const void *data, size_t len, void *user_handle,
- void *result_handle, xen_result_func result_func)
-{
- (void)user_handle;
-
- CURL *curl = curl_easy_init();
- if (!curl) {
- return -1;
- }
-
- xen_comms comms = {
- .func = result_func,
- .handle = result_handle
- };
-
- curl_easy_setopt(curl, CURLOPT_URL, url);
- curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 1);
- curl_easy_setopt(curl, CURLOPT_MUTE, 1);
- curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &write_func);
- curl_easy_setopt(curl, CURLOPT_WRITEDATA, &comms);
- curl_easy_setopt(curl, CURLOPT_POST, 1);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
- curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, len);
-
- CURLcode result = curl_easy_perform(curl);
-
- curl_easy_cleanup(curl);
-
- return result;
-}
-
-
-static void print_error(xen_session *session)
-{
- fprintf(stderr, "Error: %d", session->error_description_count);
- for (int i = 0; i < session->error_description_count; i++)
- {
- fprintf(stderr, "%s ", session->error_description[i]);
- }
- fprintf(stderr, "\n");
-}
-
-
-int main(int argc, char **argv)
-{
- if (argc != 4)
- {
- usage();
- }
-
- url = argv[1];
- char *username = argv[2];
- char *password = argv[3];
-
- xmlInitParser();
- xen_init();
- curl_global_init(CURL_GLOBAL_ALL);
-
-#define CLEANUP \
- do { \
- xen_session_logout(session); \
- curl_global_cleanup(); \
- xen_fini(); \
- xmlCleanupParser(); \
- } while(0) \
-
-
- xen_session *session =
- xen_session_login_with_password(call_func, NULL, username, password);
-
- xen_vm vm;
- if (!xen_vm_get_by_uuid(session, &vm,
- "00000000-0000-0000-0000-000000000000"))
- {
- print_error(session);
- CLEANUP;
- return 1;
- }
-
- char *vm_uuid;
- if (!xen_vm_get_uuid(session, &vm_uuid, vm))
- {
- print_error(session);
- xen_vm_free(vm);
- CLEANUP;
- return 1;
- }
-
- char *vm_uuid_bytes;
- if (!xen_uuid_string_to_bytes(vm_uuid, &vm_uuid_bytes))
- {
- fprintf(stderr, "xen_uuid_string_to_bytes failed.\n");
- xen_uuid_free(vm_uuid);
- xen_vm_free(vm);
- CLEANUP;
- return 1;
- }
-
- xen_vm_record *vm_record;
- if (!xen_vm_get_record(session, &vm_record, vm))
- {
- print_error(session);
- xen_uuid_bytes_free(vm_uuid_bytes);
- xen_uuid_free(vm_uuid);
- xen_vm_free(vm);
- CLEANUP;
- return 1;
- }
-
- xen_host host;
- if (!xen_session_get_this_host(session, &host))
- {
- print_error(session);
- xen_vm_record_free(vm_record);
- xen_uuid_bytes_free(vm_uuid_bytes);
- xen_uuid_free(vm_uuid);
- xen_vm_free(vm);
- CLEANUP;
- return 1;
- }
-
- xen_string_string_map *versions;
- if (!xen_host_get_software_version(session, &versions, host))
- {
- print_error(session);
- xen_host_free(host);
- xen_vm_record_free(vm_record);
- xen_uuid_bytes_free(vm_uuid_bytes);
- xen_uuid_free(vm_uuid);
- xen_vm_free(vm);
- CLEANUP;
- return 1;
- }
-
- printf("%s.\n", vm_uuid);
-
- fprintf(stderr, "In bytes, the VM UUID is ");
- for (int i = 0; i < 15; i++)
- {
- fprintf(stderr, "%x, ", (unsigned int)vm_uuid_bytes[i]);
- }
- fprintf(stderr, "%x.\n", (unsigned int)vm_uuid_bytes[15]);
-
- printf("%zd.\n", versions->size);
-
- for (size_t i = 0; i < versions->size; i++)
- {
- printf("%s -> %s.\n", versions->contents[i].key,
- versions->contents[i].val);
- }
-
- printf("%s.\n", vm_record->uuid);
-
- printf("Resident on %s.\n", (char *)vm_record->resident_on->u.handle);
-
- printf("%s.\n", xen_vm_power_state_to_string(vm_record->power_state));
-
- for (size_t i = 0; i < vm_record->vcpus_utilisation->size; i++)
- {
- printf("%"PRId64" -> %lf.\n",
- vm_record->vcpus_utilisation->contents[i].key,
- vm_record->vcpus_utilisation->contents[i].val);
- }
-
- xen_uuid_bytes_free(vm_uuid_bytes);
- xen_uuid_free(vm_uuid);
- xen_vm_free(vm);
-
- xen_vm_record_free(vm_record);
-
- xen_host_free(host);
- xen_string_string_map_free(versions);
-
-
- xen_vm new_vm = create_new_vm(session);
- if (!session->ok)
- {
- /* Error has been logged, just clean up. */
- CLEANUP;
- return 1;
- }
-
- print_vm_power_state(session, new_vm);
- if (!session->ok)
- {
- /* Error has been logged, just clean up. */
- xen_vm_free(new_vm);
- CLEANUP;
- return 1;
- }
-
- xen_vm_free(new_vm);
- CLEANUP;
-
- return 0;
-}
-
-
-/**
- * Creation of a new VM, using the Named Parameters idiom. Allocate the
- * xen_vm_record here, but the sets through the library. Either
- * allocation patterns can be used, as long as the allocation and free are
- * paired correctly.
- */
-static xen_vm create_new_vm(xen_session *session)
-{
- xen_string_string_map *vcpus_params = xen_string_string_map_alloc(1);
- xen_vm_record vm_record =
- {
- .name_label = "NewHVM",
- .name_description = "New HVM Description",
- .user_version = 1,
- .is_a_template = false,
- .memory_static_max = 256,
- .memory_dynamic_max = 256,
- .memory_dynamic_min = 128,
- .memory_static_min = 128,
- .vcpus_policy = "credit",
- .vcpus_params = vcpus_params,
- .vcpus_number = 2,
- .actions_after_shutdown = XEN_ON_NORMAL_EXIT_DESTROY,
- .actions_after_reboot = XEN_ON_NORMAL_EXIT_RESTART,
- .actions_after_crash = XEN_ON_CRASH_BEHAVIOUR_PRESERVE,
- .hvm_boot = "cda",
- };
-
-
- xen_vm vm;
- xen_vm_create(session, &vm, &vm_record);
-
- if (!session->ok)
- {
- fprintf(stderr, "VM creation failed.\n");
- print_error(session);
- return NULL;
- }
-
-
- /*
- * Create a new disk for the new VM.
- */
- xen_sr_set *srs;
- if (!xen_sr_get_by_name_label(session, &srs, "Local") ||
- srs->size < 1)
- {
- fprintf(stderr, "SR lookup failed.\n");
- print_error(session);
- xen_vm_free(vm);
- return NULL;
- }
-
- xen_sr_record_opt sr_record =
- {
- .u.handle = srs->contents[0]
- };
- xen_vdi_record vdi0_record =
- {
- .name_label = "MyRootFS",
- .name_description = "MyRootFS description",
- .sr = &sr_record,
- .virtual_size = (1 << 21), // 1GiB / 512 bytes/sector
- .sector_size = 512,
- .location = "file:/root/gentoo.amd64.hvm.img",
- .type = XEN_VDI_TYPE_SYSTEM,
- .sharable = false,
- .read_only = false
- };
-
- xen_vdi vdi0;
- if (!xen_vdi_create(session, &vdi0, &vdi0_record))
- {
- fprintf(stderr, "VDI creation failed.\n");
- print_error(session);
-
- xen_sr_set_free(srs);
- xen_vm_free(vm);
- return NULL;
- }
-
-
- xen_vm_record_opt vm_record_opt =
- {
- .u.handle = vm
- };
- xen_vdi_record_opt vdi0_record_opt =
- {
- .u.handle = vdi0
- };
- xen_vbd_record vbd0_record =
- {
- .vm = &vm_record_opt,
- .vdi = &vdi0_record_opt,
- .device = "xvda1",
- .mode = XEN_VBD_MODE_RW
- };
-
- xen_vbd vbd0;
- if (!xen_vbd_create(session, &vbd0, &vbd0_record))
- {
- fprintf(stderr, "VBD creation failed.\n");
- print_error(session);
-
- xen_vdi_free(vdi0);
- xen_sr_set_free(srs);
- xen_vm_free(vm);
- return NULL;
- }
-
- char *vm_uuid;
- char *vdi0_uuid;
- char *vbd0_uuid;
-
- xen_vm_get_uuid(session, &vm_uuid, vm);
- xen_vdi_get_uuid(session, &vdi0_uuid, vdi0);
- xen_vbd_get_uuid(session, &vbd0_uuid, vbd0);
-
- if (!session->ok)
- {
- fprintf(stderr, "get_uuid call failed.\n");
- print_error(session);
-
- xen_uuid_free(vm_uuid);
- xen_uuid_free(vdi0_uuid);
- xen_uuid_free(vbd0_uuid);
- xen_vbd_free(vbd0);
- xen_vdi_free(vdi0);
- xen_sr_set_free(srs);
- xen_vm_free(vm);
- return NULL;
- }
-
- fprintf(stderr,
- "Created a new VM, with UUID %s, VDI UUID %s, and VBD UUID %s.\n",
- vm_uuid, vdi0_uuid, vbd0_uuid);
-
- xen_uuid_free(vm_uuid);
- xen_uuid_free(vdi0_uuid);
- xen_uuid_free(vbd0_uuid);
- xen_vbd_free(vbd0);
- xen_vdi_free(vdi0);
- xen_sr_set_free(srs);
-
- return vm;
-}
-
-
-/**
- * Print the power state for the given VM.
- */
-static void print_vm_power_state(xen_session *session, xen_vm vm)
-{
- char *vm_uuid;
- enum xen_vm_power_state power_state;
-
- if (!xen_vm_get_uuid(session, &vm_uuid, vm))
- {
- print_error(session);
- return;
- }
-
- if (!xen_vm_get_power_state(session, &power_state, vm))
- {
- xen_uuid_free(vm_uuid);
- print_error(session);
- return;
- }
-
- printf("VM %s power state is %s.\n", vm_uuid,
- xen_vm_power_state_to_string(power_state));
-
- xen_uuid_free(vm_uuid);
-}