Files
libvirt/tests/statstest.c
T

212 lines
5.3 KiB
C
Raw Normal View History

2008-01-30 06:55:56 +00:00
#include <config.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
2011-11-18 14:21:54 -07:00
#include <sys/utsname.h>
2014-07-05 19:34:39 +04:00
#include "virstats.h"
#include "internal.h"
#include "xen/block_stats.h"
2008-04-18 15:28:33 +00:00
#include "testutils.h"
2012-12-12 16:27:01 +00:00
#include "vircommand.h"
2008-04-18 15:28:33 +00:00
static int testDevice(const char *path, int expect)
{
int actual = xenLinuxDomainDeviceID(1, path);
if (actual == expect) {
return 0;
} else {
2009-11-30 19:01:31 +00:00
if (virTestGetDebug())
2008-04-18 15:28:33 +00:00
fprintf(stderr, "Expect %-6d Actual %-6d\n", expect, actual);
return -1;
}
}
2008-04-18 15:28:33 +00:00
struct testInfo
{
const char *dev;
int num;
};
static int testDeviceHelper(const void *data)
{
const struct testInfo *info = data;
return testDevice(info->dev, info->num);
}
static int
2011-04-29 10:21:20 -06:00
mymain(void)
{
int ret = 0;
2011-07-07 15:53:41 -06:00
virCommandPtr cmd;
2011-11-18 14:21:54 -07:00
struct utsname ut;
2011-07-07 15:53:41 -06:00
2011-11-18 14:21:54 -07:00
/* Skip test if xend is not running. Calling xend on a non-xen
kernel causes some versions of xend to issue a crash report, so
we first probe uname results. */
uname(&ut);
if (strstr(ut.release, "xen") == NULL)
return EXIT_AM_SKIP;
2011-07-07 15:53:41 -06:00
cmd = virCommandNewArgList("/usr/sbin/xend", "status", NULL);
if (virCommandRun(cmd, NULL) < 0) {
2011-07-07 15:53:41 -06:00
virCommandFree(cmd);
return EXIT_AM_SKIP;
}
virCommandFree(cmd);
/* Some of our tests deliberately test failure cases, so
* register a handler to stop error messages cluttering
* up display
*/
virtTestQuiesceLibvirtErrors(false);
#define DO_TEST(dev, num) \
2008-04-18 15:28:33 +00:00
do { \
struct testInfo info = { dev, num }; \
if (virtTestRun("Device " dev " -> " # num, \
2013-09-20 19:13:35 +01:00
testDeviceHelper, &info) < 0) \
2008-04-18 15:28:33 +00:00
ret = -1; \
} while (0)
/********************************
* Xen paravirt disks
********************************/
DO_TEST("xvd", -1);
/* first valid disk */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda", 51712);
DO_TEST("xvda1", 51713);
DO_TEST("xvda15", 51727);
/* Last non-extended disk */
2008-04-18 15:28:33 +00:00
DO_TEST("xvdp", 51952);
DO_TEST("xvdp1", 51953);
DO_TEST("xvdp15", 51967);
/* First extended disk */
DO_TEST("xvdq", 268439552);
DO_TEST("xvdq1", 268439553);
DO_TEST("xvdq15", 268439567);
/* Last extended disk */
DO_TEST("xvdiz", 268501760);
DO_TEST("xvdiz1", 268501761);
DO_TEST("xvdiz15", 268501775);
/* Disk letter too large */
DO_TEST("xvdja", -1);
/* missing disk letter */
2008-04-18 15:28:33 +00:00
DO_TEST("xvd1", -1);
/* partition too large */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda16", -1);
/* partition too small */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda0", -1);
/* leading zeros */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda01", -1);
/* leading + */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda+1", -1);
/* leading - */
2008-04-18 15:28:33 +00:00
DO_TEST("xvda-1", -1);
/********************************
* IDE disks
********************************/
DO_TEST("hd", -1);
/* first numbered disk */
2008-04-18 15:28:33 +00:00
DO_TEST("hda", 768);
DO_TEST("hda1", 769);
DO_TEST("hda63", 831);
/* second numbered disk */
DO_TEST("hdb", 832);
DO_TEST("hdb1", 833);
DO_TEST("hdb63", 895);
/* third numbered disk */
DO_TEST("hdc", 5632);
DO_TEST("hdc1", 5633);
DO_TEST("hdc63", 5695);
/* fourth numbered disk */
DO_TEST("hdd", 5696);
DO_TEST("hdd1", 5697);
DO_TEST("hdd63", 5759);
/* last valid disk */
DO_TEST("hdt", 23360);
DO_TEST("hdt1", 23361);
DO_TEST("hdt63", 23423);
/* Disk letter to large */
2008-04-18 15:28:33 +00:00
DO_TEST("hdu", -1);
/* missing disk letter */
2008-04-18 15:28:33 +00:00
DO_TEST("hd1", -1);
/* partition too large */
2008-04-18 15:28:33 +00:00
DO_TEST("hda64", -1);
/* partition too small */
2008-04-18 15:28:33 +00:00
DO_TEST("hda0", -1);
/********************************
* SCSI disks
********************************/
DO_TEST("sd", -1);
/* first valid disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sda", 2048);
DO_TEST("sda1", 2049);
DO_TEST("sda15", 2063);
/* last valid disk of first SCSI major number */
2008-04-18 15:28:33 +00:00
DO_TEST("sdp", 2288);
DO_TEST("sdp1", 2289);
DO_TEST("sdp15", 2303);
/* first valid disk of second SCSI major number */
2008-04-18 15:28:33 +00:00
DO_TEST("sdq", 16640);
DO_TEST("sdq1", 16641);
DO_TEST("sdq15", 16655);
/* last valid single letter disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sdz", 16784);
DO_TEST("sdz1", 16785);
DO_TEST("sdz15", 16799);
/* first valid dual letter disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sdaa", 16800);
DO_TEST("sdaa1", 16801);
DO_TEST("sdaa15", 16815);
/* second valid dual letter disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sdab", 16816);
DO_TEST("sdab1", 16817);
DO_TEST("sdab15", 16831);
/* first letter of second sequence of dual letter disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sdba", 17216);
DO_TEST("sdba1", 17217);
DO_TEST("sdba15", 17231);
/* last valid dual letter disk */
2008-04-18 15:28:33 +00:00
DO_TEST("sdiv", 34800);
DO_TEST("sdiv1", 34801);
DO_TEST("sdiv15", 34815);
/* Disk letter too large */
2008-04-18 15:28:33 +00:00
DO_TEST("sdix", -1);
/* missing disk letter */
2008-04-18 15:28:33 +00:00
DO_TEST("sd1", -1);
/* partition too large */
2008-04-18 15:28:33 +00:00
DO_TEST("sda16", -1);
/* partition too small */
2008-04-18 15:28:33 +00:00
DO_TEST("sda0", -1);
/* Path stripping */
2008-04-18 15:28:33 +00:00
DO_TEST("/dev", -1);
DO_TEST("/dev/", -1);
DO_TEST("/dev/xvd", -1);
DO_TEST("/dev/xvda", 51712);
DO_TEST("/dev/xvda1", 51713);
DO_TEST("/dev/xvda15", 51727);
2014-03-17 10:38:38 +01:00
return ret == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}
VIRT_TEST_MAIN(mymain)