xencapstest.c 6.5 KB
Newer Older
1
#include <config.h>
2

3
#include <stdio.h>
4
#include <stdlib.h>
5
#include <string.h>
6
#include <unistd.h>
7

8
#include "internal.h"
9 10 11 12 13
#include "xml.h"
#include "testutils.h"
#include "xen_internal.h"

static char *progname;
14
static char *abs_srcdir;
15 16 17 18

#define MAX_FILE 4096

static int testCompareFiles(const char *hostmachine,
19 20 21
                            const char *xml_rel,
                            const char *cpuinfo_rel,
                            const char *capabilities_rel) {
22 23 24 25
  char xmlData[MAX_FILE];
  char *expectxml = &(xmlData[0]);
  char *actualxml = NULL;
  FILE *fp1 = NULL, *fp2 = NULL;
26
  virCapsPtr caps = NULL;
27 28 29

  int ret = -1;

30 31 32 33
  char xml[PATH_MAX];
  char cpuinfo[PATH_MAX];
  char capabilities[PATH_MAX];

34 35 36 37 38 39
  snprintf(xml, sizeof xml - 1, "%s/%s",
           abs_srcdir, xml_rel);
  snprintf(cpuinfo, sizeof cpuinfo - 1, "%s/%s",
           abs_srcdir, cpuinfo_rel);
  snprintf(capabilities, sizeof capabilities - 1, "%s/%s",
           abs_srcdir, capabilities_rel);
40

41
  if (virtTestLoadFile(xml, &expectxml, MAX_FILE) < 0)
42
      goto fail;
43 44

  if (!(fp1 = fopen(cpuinfo, "r")))
45
      goto fail;
46 47

  if (!(fp2 = fopen(capabilities, "r")))
48
      goto fail;
49

50
  if (!(caps = xenHypervisorMakeCapabilitiesInternal(NULL, hostmachine, fp1, fp2)))
51 52 53 54
      goto fail;

  if (!(actualxml = virCapabilitiesFormatXML(caps)))
      goto fail;
55

56 57 58
  if (STRNEQ(expectxml, actualxml)) {
      virtTestDifference(stderr, expectxml, actualxml);
      goto fail;
59 60 61 62 63 64
  }

  ret = 0;

 fail:

65
  free(actualxml);
66 67 68 69 70
  if (fp1)
    fclose(fp1);
  if (fp2)
    fclose(fp2);

71
  virCapabilitiesFree(caps);
72 73 74
  return ret;
}

75
static int testXeni686(const void *data ATTRIBUTE_UNUSED) {
76
  return testCompareFiles("i686",
77 78 79
                          "xencapsdata/xen-i686.xml",
                          "xencapsdata/xen-i686.cpuinfo",
                          "xencapsdata/xen-i686.caps");
80 81
}

82
static int testXeni686PAE(const void *data ATTRIBUTE_UNUSED) {
83
  return testCompareFiles("i686",
84 85 86
                          "xencapsdata/xen-i686-pae.xml",
                          "xencapsdata/xen-i686-pae.cpuinfo",
                          "xencapsdata/xen-i686-pae.caps");
87 88
}

89
static int testXeni686PAEHVM(const void *data ATTRIBUTE_UNUSED) {
90
  return testCompareFiles("i686",
91 92 93
                          "xencapsdata/xen-i686-pae-hvm.xml",
                          "xencapsdata/xen-i686-pae-hvm.cpuinfo",
                          "xencapsdata/xen-i686-pae-hvm.caps");
94 95 96 97 98
}

/* No PAE + HVM is non-sensical - all VMX capable
   CPUs have PAE */
/*
99
static int testXeni686HVM(const void *data ATTRIBUTE_UNUSED) {
100
  return testCompareFiles("i686",
101 102 103
                          "xencapsdata/xen-i686-hvm.xml",
                          "xencapsdata/xen-i686.cpuinfo",
                          "xencapsdata/xen-i686-hvm.caps");
104 105 106
}
*/

107
static int testXenx86_64(const void *data ATTRIBUTE_UNUSED) {
108
  return testCompareFiles("x86_64",
109 110 111
                          "xencapsdata/xen-x86_64.xml",
                          "xencapsdata/xen-x86_64.cpuinfo",
                          "xencapsdata/xen-x86_64.caps");
112
}
113
static int testXenx86_64HVM(const void *data ATTRIBUTE_UNUSED) {
114
  return testCompareFiles("x86_64",
115 116 117
                          "xencapsdata/xen-x86_64-hvm.xml",
                          "xencapsdata/xen-x86_64-hvm.cpuinfo",
                          "xencapsdata/xen-x86_64-hvm.caps");
118 119
}

120
static int testXenia64(const void *data ATTRIBUTE_UNUSED) {
121
  return testCompareFiles("ia64",
122 123 124
                          "xencapsdata/xen-ia64.xml",
                          "xencapsdata/xen-ia64.cpuinfo",
                          "xencapsdata/xen-ia64.caps");
125
}
126
static int testXenia64BE(const void *data ATTRIBUTE_UNUSED) {
127
  return testCompareFiles("ia64",
128 129 130
                          "xencapsdata/xen-ia64-be.xml",
                          "xencapsdata/xen-ia64-be.cpuinfo",
                          "xencapsdata/xen-ia64-be.caps");
131 132
}

133
static int testXenia64HVM(const void *data ATTRIBUTE_UNUSED) {
134
  return testCompareFiles("ia64",
135 136 137
                          "xencapsdata/xen-ia64-hvm.xml",
                          "xencapsdata/xen-ia64-hvm.cpuinfo",
                          "xencapsdata/xen-ia64-hvm.caps");
138
}
139
static int testXenia64BEHVM(const void *data ATTRIBUTE_UNUSED) {
140
  return testCompareFiles("ia64",
141 142 143
                          "xencapsdata/xen-ia64-be-hvm.xml",
                          "xencapsdata/xen-ia64-be-hvm.cpuinfo",
                          "xencapsdata/xen-ia64-be-hvm.caps");
144 145
}

146
static int testXenppc64(const void *data ATTRIBUTE_UNUSED) {
147
  return testCompareFiles("ppc64",
148 149 150
                          "xencapsdata/xen-ppc64.xml",
                          "xencapsdata/xen-ppc64.cpuinfo",
                          "xencapsdata/xen-ppc64.caps");
151 152 153
}


154 155
static int
mymain(int argc, char **argv)
156 157
{
    int ret = 0;
158
    char cwd[PATH_MAX];
159 160 161 162

    progname = argv[0];

    if (argc > 1) {
163
        fprintf(stderr, "Usage: %s\n", progname);
164
        return(EXIT_FAILURE);
165 166
    }

167 168 169
    abs_srcdir = getenv("abs_srcdir");
    if (!abs_srcdir)
        abs_srcdir = getcwd(cwd, sizeof(cwd));
170

171 172 173
    virInitialize();

    if (virtTestRun("Capabilities for i686, no PAE, no HVM",
174 175
                    1, testXeni686, NULL) != 0)
        ret = -1;
176 177

    if (virtTestRun("Capabilities for i686, PAE, no HVM",
178 179
                    1, testXeni686PAE, NULL) != 0)
        ret = -1;
180 181 182 183

    /* No PAE + HVM is non-sensical - all VMX capable
       CPUs have PAE */
    /*if (virtTestRun("Capabilities for i686, no PAE, HVM",
184 185
                    1, testXeni686HVM, NULL) != 0)
        ret = -1;
186 187 188
    */

    if (virtTestRun("Capabilities for i686, PAE, HVM",
189 190
                    1, testXeni686PAEHVM, NULL) != 0)
        ret = -1;
191 192

    if (virtTestRun("Capabilities for x86_64, no HVM",
193 194
                    1, testXenx86_64, NULL) != 0)
        ret = -1;
195 196

    if (virtTestRun("Capabilities for x86_64, HVM",
197 198
                    1, testXenx86_64HVM, NULL) != 0)
        ret = -1;
199 200

    if (virtTestRun("Capabilities for ia64, no HVM, LE",
201 202
                    1, testXenia64, NULL) != 0)
        ret = -1;
203 204

    if (virtTestRun("Capabilities for ia64, HVM, LE",
205 206
                    1, testXenia64HVM, NULL) != 0)
        ret = -1;
207 208

    if (virtTestRun("Capabilities for ia64, no HVM, BE",
209 210
                    1, testXenia64BE, NULL) != 0)
        ret = -1;
211 212

    if (virtTestRun("Capabilities for ia64, HVM, BE",
213 214
                    1, testXenia64BEHVM, NULL) != 0)
        ret = -1;
215 216

    if (virtTestRun("Capabilities for ppc64",
217 218
                    1, testXenppc64, NULL) != 0)
        ret = -1;
219 220


221
    return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
222
}
223

224
VIRT_TEST_MAIN(mymain)