virshtest.c 8.9 KB
Newer Older
1
#include <config.h>
2 3 4 5

#include <stdio.h>
#include <string.h>
#include <unistd.h>
6

7
#include "internal.h"
8 9 10 11
#include "xml.h"
#include "testutils.h"

static char *progname;
12
static char *abs_srcdir;
13 14
#define MAX_FILE 4096

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
#define DOM_UUID "ef861801-45b9-11cb-88e3-afbfe5370493"

static const char *dominfo_fc4 = "\
Id:             2\n\
Name:           fc4\n\
UUID:           " DOM_UUID "\n\
OS Type:        linux\n\
State:          running\n\
CPU(s):         1\n\
Max memory:     261072 kB\n\
Used memory:    131072 kB\n\
Autostart:      disable\n\
\n";
static const char *domuuid_fc4 = DOM_UUID "\n\n";
static const char *domid_fc4 = "2\n\n";
static const char *domname_fc4 = "fc4\n\n";
static const char *domstate_fc4 = "running\n\n";

33
static int testFilterLine(char *buffer,
34
                          const char *toRemove) {
35 36 37 38 39 40 41 42 43 44 45 46 47 48
  char *start;
  char *end;

  if (!(start = strstr(buffer, toRemove)))
    return -1;

  if (!(end = strstr(start+1, "\n"))) {
    *start = '\0';
  } else {
    memmove(start, end, strlen(end)+1);
  }
  return 0;
}

49 50
static int testCompareOutputLit(const char *expectData,
                                const char *filter, const char *const argv[]) {
51 52 53 54 55 56 57 58 59 60
  char actualData[MAX_FILE];
  char *actualPtr = &(actualData[0]);

  if (virtTestCaptureProgramOutput(argv, &actualPtr, MAX_FILE) < 0)
    return -1;

  if (filter)
    if (testFilterLine(actualData, filter) < 0)
      return -1;

61 62 63 64
  if (STRNEQ(expectData, actualData)) {
      virtTestDifference(stderr, expectData, actualData);
      return -1;
  }
65 66 67 68

  return 0;
}

69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
#if unused
static int testCompareOutput(const char *expect_rel, const char *filter,
                             const char *const argv[]) {
  char expectData[MAX_FILE];
  char *expectPtr = &(expectData[0]);
  char expect[PATH_MAX];

  snprintf(expect, sizeof expect - 1, "%s/%s", abs_srcdir, expect_rel);

  if (virtTestLoadFile(expect, &expectPtr, MAX_FILE) < 0)
    return -1;

  return testCompareOutputLit(expectData, filter, argv);
}
#endif
84

85
#define VIRSH_DEFAULT     "../tools/virsh", \
86 87 88 89 90
    "--connect", \
    "test:///default"

static char *custom_uri;

91
#define VIRSH_CUSTOM     "../tools/virsh", \
92 93 94
    "--connect", \
    custom_uri

95
static int testCompareListDefault(const void *data ATTRIBUTE_UNUSED) {
96 97 98 99 100 101 102
  const char *const argv[] = { VIRSH_DEFAULT, "list", NULL };
  const char *exp = "\
 Id Name                 State\n\
----------------------------------\n\
  1 test                 running\n\
\n";
  return testCompareOutputLit(exp, NULL, argv);
103 104
}

105
static int testCompareListCustom(const void *data ATTRIBUTE_UNUSED) {
106 107 108 109 110 111 112 113
  const char *const argv[] = { VIRSH_CUSTOM, "list", NULL };
  const char *exp = "\
 Id Name                 State\n\
----------------------------------\n\
  1 fv0                  running\n\
  2 fc4                  running\n\
\n";
  return testCompareOutputLit(exp, NULL, argv);
114 115
}

116
static int testCompareNodeinfoDefault(const void *data ATTRIBUTE_UNUSED) {
117 118 119 120 121 122 123 124 125 126 127 128
  const char *const argv[] = { VIRSH_DEFAULT, "nodeinfo", NULL };
  const char *exp = "\
CPU model:           i686\n\
CPU(s):              16\n\
CPU frequency:       1400 MHz\n\
CPU socket(s):       2\n\
Core(s) per socket:  2\n\
Thread(s) per core:  2\n\
NUMA cell(s):        2\n\
Memory size:         3145728 kB\n\
\n";
  return testCompareOutputLit(exp, NULL, argv);
129 130
}

131
static int testCompareNodeinfoCustom(const void *data ATTRIBUTE_UNUSED) {
132 133 134 135 136
  const char *const argv[] = {
    VIRSH_CUSTOM,
    "nodeinfo",
    NULL
  };
137 138 139 140 141 142 143 144 145 146 147
  const char *exp = "\
CPU model:           i986\n\
CPU(s):              50\n\
CPU frequency:       6000 MHz\n\
CPU socket(s):       4\n\
Core(s) per socket:  4\n\
Thread(s) per core:  2\n\
NUMA cell(s):        4\n\
Memory size:         8192000 kB\n\
\n";
  return testCompareOutputLit(exp, NULL, argv);
148 149
}

150
static int testCompareDominfoByID(const void *data ATTRIBUTE_UNUSED) {
151 152 153
  const char *const argv[] = { VIRSH_CUSTOM, "dominfo", "2", NULL };
  const char *exp = dominfo_fc4;
  return testCompareOutputLit(exp, "\nCPU time:", argv);
154 155
}

156
static int testCompareDominfoByUUID(const void *data ATTRIBUTE_UNUSED) {
157 158 159
  const char *const argv[] = { VIRSH_CUSTOM, "dominfo", DOM_UUID, NULL };
  const char *exp = dominfo_fc4;
  return testCompareOutputLit(exp, "\nCPU time:", argv);
160 161
}

162
static int testCompareDominfoByName(const void *data ATTRIBUTE_UNUSED) {
163 164 165
  const char *const argv[] = { VIRSH_CUSTOM, "dominfo", "fc4", NULL };
  const char *exp = dominfo_fc4;
  return testCompareOutputLit(exp, "\nCPU time:", argv);
166 167
}

168
static int testCompareDomuuidByID(const void *data ATTRIBUTE_UNUSED) {
169 170 171
  const char *const argv[] = { VIRSH_CUSTOM, "domuuid", "2", NULL };
  const char *exp = domuuid_fc4;
  return testCompareOutputLit(exp, NULL, argv);
172 173
}

174
static int testCompareDomuuidByName(const void *data ATTRIBUTE_UNUSED) {
175 176 177
  const char *const argv[] = { VIRSH_CUSTOM, "domuuid", "fc4", NULL };
  const char *exp = domuuid_fc4;
  return testCompareOutputLit(exp, NULL, argv);
178 179
}

180
static int testCompareDomidByName(const void *data ATTRIBUTE_UNUSED) {
181 182 183
  const char *const argv[] = { VIRSH_CUSTOM, "domid", "fc4", NULL };
  const char *exp = domid_fc4;
  return testCompareOutputLit(exp, NULL, argv);
184 185
}

186
static int testCompareDomidByUUID(const void *data ATTRIBUTE_UNUSED) {
187 188 189
  const char *const argv[] = { VIRSH_CUSTOM, "domid", DOM_UUID, NULL };
  const char *exp = domid_fc4;
  return testCompareOutputLit(exp, NULL, argv);
190 191
}

192
static int testCompareDomnameByID(const void *data ATTRIBUTE_UNUSED) {
193 194 195
  const char *const argv[] = { VIRSH_CUSTOM, "domname", "2", NULL };
  const char *exp = domname_fc4;
  return testCompareOutputLit(exp, NULL, argv);
196 197
}

198
static int testCompareDomnameByUUID(const void *data ATTRIBUTE_UNUSED) {
199 200 201
  const char *const argv[] = { VIRSH_CUSTOM, "domname", DOM_UUID, NULL };
  const char *exp = domname_fc4;
  return testCompareOutputLit(exp, NULL, argv);
202 203
}

204
static int testCompareDomstateByID(const void *data ATTRIBUTE_UNUSED) {
205 206 207
  const char *const argv[] = { VIRSH_CUSTOM, "domstate", "2", NULL };
  const char *exp = domstate_fc4;
  return testCompareOutputLit(exp, NULL, argv);
208 209
}

210
static int testCompareDomstateByUUID(const void *data ATTRIBUTE_UNUSED) {
211 212 213
  const char *const argv[] = { VIRSH_CUSTOM, "domstate", DOM_UUID, NULL };
  const char *exp = domstate_fc4;
  return testCompareOutputLit(exp, NULL, argv);
214 215
}

216
static int testCompareDomstateByName(const void *data ATTRIBUTE_UNUSED) {
217 218 219
  const char *const argv[] = { VIRSH_CUSTOM, "domstate", "fc4", NULL };
  const char *exp = domstate_fc4;
  return testCompareOutputLit(exp, NULL, argv);
220 221
}

222 223
static int
mymain(int argc, char **argv)
224 225 226
{
    int ret = 0;
    char buffer[PATH_MAX];
227
    char cwd[PATH_MAX];
228

229 230 231
    abs_srcdir = getenv("abs_srcdir");
    if (!abs_srcdir)
        abs_srcdir = getcwd(cwd, sizeof(cwd));
232

J
Jim Meyering 已提交
233
#ifdef WIN32
234
    exit (EXIT_AM_SKIP);
J
Jim Meyering 已提交
235 236
#endif

237
    snprintf(buffer, PATH_MAX-1, "test://%s/../examples/xml/test/testnode.xml", abs_srcdir);
238 239 240
    buffer[PATH_MAX-1] = '\0';
    progname = argv[0];
    custom_uri = buffer;
241

242
    if (argc > 1) {
243
        fprintf(stderr, "Usage: %s\n", progname);
244
        return(EXIT_FAILURE);
245
    }
246

247
    if (virtTestRun("virsh list (default)",
248
                    1, testCompareListDefault, NULL) != 0)
249 250 251
        ret = -1;

    if (virtTestRun("virsh list (custom)",
252
                    1, testCompareListCustom, NULL) != 0)
253 254 255
        ret = -1;

    if (virtTestRun("virsh nodeinfo (default)",
256
                    1, testCompareNodeinfoDefault, NULL) != 0)
257 258 259
        ret = -1;

    if (virtTestRun("virsh nodeinfo (custom)",
260
                    1, testCompareNodeinfoCustom, NULL) != 0)
261 262 263
        ret = -1;

    if (virtTestRun("virsh dominfo (by id)",
264
                    1, testCompareDominfoByID, NULL) != 0)
265 266 267
        ret = -1;

    if (virtTestRun("virsh dominfo (by uuid)",
268
                    1, testCompareDominfoByUUID, NULL) != 0)
269 270 271
        ret = -1;

    if (virtTestRun("virsh dominfo (by name)",
272
                    1, testCompareDominfoByName, NULL) != 0)
273 274 275
        ret = -1;

    if (virtTestRun("virsh domid (by name)",
276
                    1, testCompareDomidByName, NULL) != 0)
277 278 279
        ret = -1;

    if (virtTestRun("virsh domid (by uuid)",
280
                    1, testCompareDomidByUUID, NULL) != 0)
281 282 283
        ret = -1;

    if (virtTestRun("virsh domuuid (by id)",
284
                    1, testCompareDomuuidByID, NULL) != 0)
285 286 287
        ret = -1;

    if (virtTestRun("virsh domuuid (by name)",
288
                    1, testCompareDomuuidByName, NULL) != 0)
289 290 291
        ret = -1;

    if (virtTestRun("virsh domname (by id)",
292
                    1, testCompareDomnameByID, NULL) != 0)
293 294 295
        ret = -1;

    if (virtTestRun("virsh domname (by uuid)",
296
                    1, testCompareDomnameByUUID, NULL) != 0)
297 298 299
        ret = -1;

    if (virtTestRun("virsh domstate (by id)",
300
                    1, testCompareDomstateByID, NULL) != 0)
301 302 303
        ret = -1;

    if (virtTestRun("virsh domstate (by uuid)",
304
                    1, testCompareDomstateByUUID, NULL) != 0)
305 306 307
        ret = -1;

    if (virtTestRun("virsh domstate (by name)",
308
                    1, testCompareDomstateByName, NULL) != 0)
309 310
        ret = -1;

311
    return(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
312
}
313 314

VIRT_TEST_MAIN(mymain)