]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Split out generic nodeinfo API
authorDaniel P. Berrange <berrange@redhat.com>
Wed, 25 Jul 2007 23:16:30 +0000 (23:16 +0000)
committerDaniel P. Berrange <berrange@redhat.com>
Wed, 25 Jul 2007 23:16:30 +0000 (23:16 +0000)
29 files changed:
ChangeLog
docs/apibuild.py
src/Makefile.am
src/internal.h
src/nodeinfo.c [new file with mode: 0644]
src/nodeinfo.h [new file with mode: 0644]
src/openvz_driver.c
src/qemu_driver.c
tests/.cvsignore
tests/Makefile.am
tests/nodeinfodata/linux-nodeinfo-1.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-1.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-1.txt [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-2.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-2.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-2.txt [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-3.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-3.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-3.txt [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-4.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-4.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-4.txt [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-5.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-5.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-5.txt [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-6.cpuinfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-6.meminfo [new file with mode: 0644]
tests/nodeinfodata/linux-nodeinfo-6.txt [new file with mode: 0644]
tests/nodeinfotest.c [new file with mode: 0644]

index fceba73de7f62df107dee83a05f6bc0fc80ba5e9..909b6c9dc8ff4527cb16a316a793f9c57f02cda4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+Tue Jul 25 19:13:43 EST 2007 Daniel P. berrange <berrange@redhat.com>
+
+       * src/nodeinfo.h, src/nodeinfo.c: Generic impl of virNodeGetInfo
+       * src/qemu_driver.c, src/openvz_driver: Switch to generic impl
+       of virNodeGetInfo
+       * src/internal.h: Add STREQLEN STRNEQLEN
+       * src/Makefile.am: Add nodeinfo.{c,h}
+       * docs/apibuild.py: Ignore nodeinfo files
+       * tests/nodeinfotest.c, tests/Makefile.am: Test case for the
+       nodeinfo.c APIs
+       * tests/nodeinfodata/*: Data files for the test suite
+
 Tue Jul 24 17:32:23 CEST 2007 Daniel Veillard <veillard@redhat.com>
 
        * libvirt.spec.in NEWS docs/* po/*: preparing release 0.3.1
index f86fd3b28a7f6744dbdd35f3c6c11e01ca4f4880..7d71b063ce65327c0601db3ae27f22f79de312d7 100755 (executable)
@@ -63,6 +63,8 @@ ignored_files = {
   "uuid.c": "internal code",
   "util.h": "internal code",
   "util.c": "internal code",
+  "nodeinfo.h": "internal code",
+  "nodeinfo.c": "internal code",
 }
 
 ignored_words = {
index ff8e86d94edeb9889bf332c6c779382252009de4..dbd1cc55512afd86883309323e9faa880eb0a1f6 100644 (file)
@@ -50,6 +50,7 @@ CLIENT_SOURCES =                                              \
                qemu_conf.c qemu_conf.h                                 \
                openvz_conf.c openvz_conf.h                             \
                openvz_driver.c openvz_driver.h                 \
+                nodeinfo.h nodeinfo.c                           \
                util.c util.h
 
 SERVER_SOURCES =                                               \
index a278596fdb3a314bc97cb0b468f583c24b78e0d0..dd073a2f5f06d7c162803012b09a9b1f2c2a68ed 100644 (file)
@@ -36,6 +36,8 @@ extern "C" {
 #define STRCASEEQ(a,b) (strcasecmp((a),(b)) == 0)
 #define STRNEQ(a,b) (strcmp((a),(b)) != 0)
 #define STRCASENEQ(a,b) (strcasecmp((a),(b)) != 0)
+#define STREQLEN(a,b,n) (strncmp((a),(b),(n)) == 0)
+#define STRNEQLEN(a,b,n) (strncmp((a),(b),(n)) != 0)
 
 /**
  * ATTRIBUTE_UNUSED:
diff --git a/src/nodeinfo.c b/src/nodeinfo.c
new file mode 100644 (file)
index 0000000..01d7e28
--- /dev/null
@@ -0,0 +1,193 @@
+/*
+ * nodeinfo.c: Helper routines for OS specific node information
+ *
+ * Copyright (C) 2006, 2007 Red Hat, Inc.
+ * Copyright (C) 2006 Daniel P. Berrange
+ *
+ * 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
+ *
+ * Author: Daniel P. Berrange <berrange@redhat.com>
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/utsname.h>
+#include <errno.h>
+#include <ctype.h>
+
+#include "nodeinfo.h"
+
+#ifdef __linux__
+#define MEMINFO_PATH "/proc/meminfo"
+#define CPUINFO_PATH "/proc/cpuinfo"
+
+/* NB, these are not static as we need to call them from testsuite */
+int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo);
+int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo, virNodeInfoPtr nodeinfo);
+
+int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo) {
+    char line[1024];
+
+    nodeinfo->cpus = 0;
+    nodeinfo->mhz = 0;
+    nodeinfo->nodes = nodeinfo->sockets = nodeinfo->cores = nodeinfo->threads = 1;
+
+    /* NB: It is impossible to fill our nodes, since cpuinfo
+     * has not knowledge of NUMA nodes */
+
+    /* XXX hyperthreads */
+    while (fgets(line, sizeof(line), cpuinfo) != NULL) {
+        char *buf = line;
+        if (STREQLEN(buf, "processor", 9)) { /* aka a single logical CPU */
+            buf += 9;
+            while (*buf && isspace(*buf))
+                buf++;
+            if (*buf != ':') {
+                __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                                VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                                "parsing cpuinfo processor");
+                return -1;
+            }
+            nodeinfo->cpus++;
+        } else if (STREQLEN(buf, "cpu MHz", 7)) {
+            buf += 9;
+            while (*buf && isspace(*buf))
+                buf++;
+            if (*buf != ':' || !buf[1]) {
+                __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                                VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                                "parsing cpuinfo cpu MHz");
+                return -1;
+            }
+            nodeinfo->mhz = (unsigned int)strtol(buf+1, NULL, 10);
+        } else if (STREQLEN(buf, "cpu cores", 9)) { /* aka cores */
+            unsigned int id;
+            buf += 9;
+            while (*buf && isspace(*buf))
+                buf++;
+            if (*buf != ':' || !buf[1]) {
+                __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                                VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                                "parsing cpuinfo cpu cores %c", *buf);
+                return -1;
+            }
+            id = (unsigned int)strtol(buf+1, NULL, 10);
+            if (id > nodeinfo->cores)
+                nodeinfo->cores = id;
+        }
+    }
+
+    if (!nodeinfo->cpus) {
+        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                        "no cpus found");
+        return -1;
+    }
+
+    /*
+     * Can't reliably count sockets from proc metadata, so
+     * infer it based on total CPUs vs cores.
+     * XXX hyperthreads
+     */
+    nodeinfo->sockets = nodeinfo->cpus / nodeinfo->cores;
+
+    return 0;
+}
+
+
+int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo, virNodeInfoPtr nodeinfo) {
+    char line[1024];
+
+    nodeinfo->memory = 0;
+
+    while (fgets(line, sizeof(line), meminfo) != NULL) {
+        if (STREQLEN(line, "MemTotal:", 9)) {
+            nodeinfo->memory = (unsigned int)strtol(line + 10, NULL, 10);
+        }
+    }
+    if (!nodeinfo->memory) {
+        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                        "no memory found");
+        return -1;
+    }
+
+    return 0;
+}
+
+
+#endif
+
+int virNodeInfoPopulate(virConnectPtr conn,
+                        virNodeInfoPtr nodeinfo) {
+    struct utsname info;
+#ifdef __linux__
+    int ret;
+    FILE *cpuinfo, *meminfo;
+#endif
+
+    if (uname(&info) < 0) {
+        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                        "cannot extract machine type %s", strerror(errno));
+        return -1;
+    }
+
+    strncpy(nodeinfo->model, info.machine, sizeof(nodeinfo->model)-1);
+    nodeinfo->model[sizeof(nodeinfo->model)-1] = '\0';
+
+#ifdef __linux__
+    cpuinfo = fopen(CPUINFO_PATH, "r");
+    if (!cpuinfo) {
+        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                        "cannot open %s %s", CPUINFO_PATH, strerror(errno));
+        return -1;
+    }
+    ret = linuxNodeInfoCPUPopulate(conn, cpuinfo, nodeinfo);
+    fclose(cpuinfo);
+    if (ret < 0)
+        return -1;
+
+    meminfo = fopen(MEMINFO_PATH, "r");
+    if (!meminfo) {
+        __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                        VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                        "cannot open %s %s", MEMINFO_PATH, strerror(errno));
+        return -1;
+    }
+    ret = linuxNodeInfoMemPopulate(conn, meminfo, nodeinfo);
+    fclose(meminfo);
+
+    return ret;
+#else
+    /* XXX Solaris will need an impl later if they port QEMU driver */
+    __virRaiseError(conn, NULL, NULL, 0, VIR_ERR_INTERNAL_ERROR,
+                    VIR_ERR_ERROR, NULL, NULL, NULL, 0, 0,
+                    "%s:%s not implemented on this platform\n", __FILE__, __FUNCTION__);
+    return -1;
+#endif
+}
+
+
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */
diff --git a/src/nodeinfo.h b/src/nodeinfo.h
new file mode 100644 (file)
index 0000000..d0d0bb2
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * nodeinfo.c: Helper routines for OS specific node information
+ *
+ * Copyright (C) 2006, 2007 Red Hat, Inc.
+ * Copyright (C) 2006 Daniel P. Berrange
+ *
+ * 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
+ *
+ * Author: Daniel P. Berrange <berrange@redhat.com>
+ */
+
+#ifndef __VIR_NODEINFO_H__
+#define __VIR_NODEINFO_H__
+
+#include "internal.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+  int virNodeInfoPopulate(virConnectPtr conn, virNodeInfoPtr nodeinfo);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __VIR_NODEINFO_H__*/
index e85aa8606fd88157bd010d5416e6b3e69cdca723..84d514cb97fdcef069cf69d1050b9b9c9bd02920 100644 (file)
 #include "util.h"
 #include "openvz_driver.h"
 #include "openvz_conf.h"
+#include "nodeinfo.h"
 
 
 #define openvzLog(level, msg...) fprintf(stderr, msg)
 
 static virDomainPtr openvzDomainLookupByID(virConnectPtr conn, int id);
 static char *openvzGetOSType(virDomainPtr dom);
+static int openvzGetNodeInfo(virConnectPtr conn, virNodeInfoPtr nodeinfo);
 static virDomainPtr openvzDomainLookupByUUID(virConnectPtr conn, const unsigned char *uuid);
 static virDomainPtr openvzDomainLookupByName(virConnectPtr conn, const char *name);
 static int openvzDomainGetInfo(virDomainPtr dom, virDomainInfoPtr info);
@@ -327,6 +329,12 @@ static const char *openvzGetType(virConnectPtr conn ATTRIBUTE_UNUSED) {
 }
 
 
+static int openvzGetNodeInfo(virConnectPtr conn,
+                             virNodeInfoPtr nodeinfo) {
+    return virNodeInfoPopulate(conn, nodeinfo);
+}
+
+
 static int openvzListDomains(virConnectPtr conn, int *ids, int nids) {
     int got = 0;
     int veid, pid, outfd, errfd;
@@ -431,7 +439,7 @@ static virDriver openvzDriver = {
     NULL, /* hostname */
     NULL, /* uri */
     NULL, /* getMaxVcpus */
-    NULL, /* nodeGetInfo */
+    openvzGetNodeInfo, /* nodeGetInfo */
     NULL, /* getCapabilities */
     openvzListDomains, /* listDomains */
     openvzNumDomains, /* numOfDomains */
index 0e3e658c20d935644af71008b663d63b9cb9acc7..fdbaf66e9a9ae367b9f43d63f153f078dc0a20b5 100644 (file)
@@ -53,6 +53,7 @@
 #include "util.h"
 #include "qemu_driver.h"
 #include "qemu_conf.h"
+#include "nodeinfo.h"
 
 static int qemudShutdown(void);
 
@@ -1358,81 +1359,6 @@ static int qemudMonitorCommand(struct qemud_driver *driver ATTRIBUTE_UNUSED,
 }
 
 
-static int qemudGetMemInfo(unsigned long *memory) {
-    FILE *meminfo = fopen("/proc/meminfo", "r");
-    char line[1024];
-
-    *memory = 0;
-
-    if (!meminfo) {
-        return -1;
-    }
-
-    /* XXX NUMA and hyperthreads ? */
-    while (fgets(line, sizeof(line), meminfo) != NULL) {
-        if (!strncmp(line, "MemTotal:", 9)) {
-            *memory = (unsigned int)strtol(line + 10, NULL, 10);
-        }
-    }
-    fclose(meminfo);
-    return 0;
-}
-
-static int qemudGetCPUInfo(unsigned int *cpus, unsigned int *mhz,
-                           unsigned int *nodes, unsigned int *sockets,
-                           unsigned int *cores, unsigned int *threads) {
-    FILE *cpuinfo = fopen("/proc/cpuinfo", "r");
-    char line[1024];
-
-    *cpus = 0;
-    *mhz = 0;
-    *nodes = *sockets = *cores = *threads = 1;
-
-    if (!cpuinfo) {
-        return -1;
-    }
-
-    /* XXX NUMA and hyperthreads ? */
-    while (fgets(line, sizeof(line), cpuinfo) != NULL) {
-        if (!strncmp(line, "processor\t", 10)) { /* aka a single logical CPU */
-            (*cpus)++;
-        } else if (!strncmp(line, "cpu MHz\t", 8)) {
-            char *offset = strchr(line, ':');
-            if (!offset)
-                continue;
-            offset++;
-            if (!*offset)
-                continue;
-            *mhz = (unsigned int)strtol(offset, NULL, 10);
-        } else if (!strncmp(line, "physical id\t", 12)) { /* aka socket */
-            unsigned int id;
-            char *offset = strchr(line, ':');
-            if (!offset)
-                continue;
-            offset++;
-            if (!*offset)
-                continue;
-            id = (unsigned int)strtol(offset, NULL, 10);
-            if ((id+1) > *sockets)
-                *sockets = (id + 1);
-        } else if (!strncmp(line, "cpu cores\t", 9)) { /* aka cores */
-            unsigned int id;
-            char *offset = strchr(line, ':');
-            if (!offset)
-                continue;
-            offset++;
-            if (!*offset)
-                continue;
-            id = (unsigned int)strtol(offset, NULL, 10);
-            if (id > *cores)
-                *cores = id;
-        }
-    }
-    fclose(cpuinfo);
-
-    return 0;
-}
-
 static virDrvOpenStatus qemudOpen(virConnectPtr conn,
                            const char *name,
                            int flags ATTRIBUTE_UNUSED) {
@@ -1485,23 +1411,9 @@ static int qemudGetMaxVCPUs(virConnectPtr conn ATTRIBUTE_UNUSED,
     return -1;
 }
 
-static int qemudGetNodeInfo(virConnectPtr conn ATTRIBUTE_UNUSED,
-                     virNodeInfoPtr node) {
-    struct utsname info;
-
-    if (uname(&info) < 0)
-        return -1;
-
-    strncpy(node->model, info.machine, sizeof(node->model)-1);
-    node->model[sizeof(node->model)-1] = '\0';
-
-    if (qemudGetMemInfo(&(node->memory)) < 0)
-        return -1;
-
-    if (qemudGetCPUInfo(&(node->cpus), &(node->mhz), &(node->nodes),
-                        &(node->sockets), &(node->cores), &(node->threads)) < 0)
-        return -1;
-    return 0;
+static int qemudGetNodeInfo(virConnectPtr conn,
+                            virNodeInfoPtr nodeinfo) {
+    return virNodeInfoPopulate(conn, nodeinfo);
 }
 
 static char *qemudGetCapabilities(virConnectPtr conn ATTRIBUTE_UNUSED) {
index a254efafa11218bf3740fc9301139fb987b1b3cd..4d2988853829e02f71db366a15d8661ce9dfb692 100644 (file)
@@ -12,6 +12,7 @@ xmconfigtest
 xencapstest
 qemuxml2xmltest
 qemuxml2argvtest
+nodeinfotest
 *.gcda
 *.gcno
 
index 9eb5e8b5a35f0053baf51d203af0ee2bb195b2a2..d38b86844ea652122cc1ef6b205ab927f7a92b8e 100644 (file)
@@ -32,10 +32,11 @@ LDADDS = \
 EXTRA_DIST = xmlrpcserver.py test_conf.sh
 
 noinst_PROGRAMS = xmlrpctest xml2sexprtest sexpr2xmltest virshtest conftest \
-       reconnect xmconfigtest xencapstest qemuxml2argvtest qemuxml2xmltest
+       reconnect xmconfigtest xencapstest qemuxml2argvtest qemuxml2xmltest \
+        nodeinfotest
 
 TESTS = xml2sexprtest sexpr2xmltest virshtest test_conf.sh xmconfigtest \
-        xencapstest qemuxml2argvtest qemuxml2xmltest
+        xencapstest qemuxml2argvtest qemuxml2xmltest nodeinfotest
 if ENABLE_XEN_TESTS
   TESTS += reconnect
 endif
@@ -99,6 +100,11 @@ xencapstest_SOURCES = \
 xencapstest_LDFLAGS =
 xencapstest_LDADD = $(LDADDS)
 
+nodeinfotest_SOURCES = \
+       nodeinfotest.c testutils.h testutils.c
+nodeinfotest_LDFLAGS =
+nodeinfotest_LDADD = $(LDADDS)
+
 reconnect_SOURCES = \
        reconnect.c
 reconnect_LDFLAGS =
diff --git a/tests/nodeinfodata/linux-nodeinfo-1.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-1.cpuinfo
new file mode 100644 (file)
index 0000000..3f11640
--- /dev/null
@@ -0,0 +1,46 @@
+processor      : 0
+vendor_id      : GenuineIntel
+cpu family     : 15
+model          : 4
+model name     :                   Intel(R) Xeon(TM) CPU 2.80GHz
+stepping       : 8
+cpu MHz                : 2800.000
+cache size     : 2048 KB
+physical id    : 0
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl est cid cx16 xtpr lahf_lm
+bogomips       : 5590.67
+clflush size   : 64
+cache_alignment        : 128
+address sizes  : 36 bits physical, 48 bits virtual
+power management:
+
+processor      : 1
+vendor_id      : GenuineIntel
+cpu family     : 15
+model          : 4
+model name     :                   Intel(R) Xeon(TM) CPU 2.80GHz
+stepping       : 8
+cpu MHz                : 2800.000
+cache size     : 2048 KB
+physical id    : 0
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall nx lm constant_tsc pni monitor ds_cpl est cid cx16 xtpr lahf_lm
+bogomips       : 5586.49
+clflush size   : 64
+cache_alignment        : 128
+address sizes  : 36 bits physical, 48 bits virtual
+power management:
+
diff --git a/tests/nodeinfodata/linux-nodeinfo-1.meminfo b/tests/nodeinfodata/linux-nodeinfo-1.meminfo
new file mode 100644 (file)
index 0000000..dd5565e
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      2053960 kB
+MemFree:        157792 kB
+Buffers:        209440 kB
+Cached:         660788 kB
+SwapCached:         76 kB
+Active:        1416036 kB
+Inactive:       178872 kB
+SwapTotal:     2064376 kB
+SwapFree:      2063940 kB
+Dirty:            1736 kB
+Writeback:           0 kB
+AnonPages:      723984 kB
+Mapped:         105208 kB
+Slab:           225000 kB
+SReclaimable:   172568 kB
+SUnreclaim:      52432 kB
+PageTables:      40224 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   3091356 kB
+Committed_AS:  1270588 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:     30640 kB
+VmallocChunk: 34359705907 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-1.txt b/tests/nodeinfodata/linux-nodeinfo-1.txt
new file mode 100644 (file)
index 0000000..1a38ad1
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 2, MHz: 2800, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1, Memory: 2053960
diff --git a/tests/nodeinfodata/linux-nodeinfo-2.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-2.cpuinfo
new file mode 100644 (file)
index 0000000..8f524b6
--- /dev/null
@@ -0,0 +1,48 @@
+processor      : 0
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 75
+model name     : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
+stepping       : 2
+cpu MHz                : 2211.364
+cache size     : 512 KB
+physical id    : 0
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 4424.80
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 1
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 75
+model name     : AMD Athlon(tm) 64 X2 Dual Core Processor 4200+
+stepping       : 2
+cpu MHz                : 2211.364
+cache size     : 512 KB
+physical id    : 0
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 4422.14
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
diff --git a/tests/nodeinfodata/linux-nodeinfo-2.meminfo b/tests/nodeinfodata/linux-nodeinfo-2.meminfo
new file mode 100644 (file)
index 0000000..e1d9b86
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      4059540 kB
+MemFree:       3525008 kB
+Buffers:         24480 kB
+Cached:         282300 kB
+SwapCached:          0 kB
+Active:         230980 kB
+Inactive:       243276 kB
+SwapTotal:     2031608 kB
+SwapFree:      2031608 kB
+Dirty:             200 kB
+Writeback:           0 kB
+AnonPages:      167376 kB
+Mapped:          31204 kB
+Slab:            34904 kB
+SReclaimable:    15544 kB
+SUnreclaim:      19360 kB
+PageTables:       7704 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   4061376 kB
+Committed_AS:   265176 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:      1736 kB
+VmallocChunk: 34359736147 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-2.txt b/tests/nodeinfodata/linux-nodeinfo-2.txt
new file mode 100644 (file)
index 0000000..1c31a0c
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 2, MHz: 2211, Nodes: 1, Sockets: 1, Cores: 2, Threads: 1, Memory: 4059540
diff --git a/tests/nodeinfodata/linux-nodeinfo-3.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-3.cpuinfo
new file mode 100644 (file)
index 0000000..94e3c01
--- /dev/null
@@ -0,0 +1,99 @@
+processor       : 0
+vendor_id       : GenuineIntel
+cpu family      : 6
+model           : 15
+model name      : Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
+stepping        : 6
+cpu MHz         : 1595.925
+cache size      : 4096 KB
+physical id     : 0
+siblings        : 2
+core id         : 0
+cpu cores       : 2
+fpu             : yes
+fpu_exception   : yes
+cpuid level     : 10
+wp              : yes
+flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
+pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc
+pni monitor ds_cpl vmx tm2 ssse3 cx16 xtpr dca lahf_lm
+bogomips        : 3193.88
+clflush size    : 64
+cache_alignment : 64
+address sizes   : 36 bits physical, 48 bits virtual
+power management:
+
+processor       : 1
+vendor_id       : GenuineIntel
+cpu family      : 6
+model           : 15
+model name      : Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
+stepping        : 6
+cpu MHz         : 1595.925
+cache size      : 4096 KB
+physical id     : 3
+siblings        : 2
+core id         : 0
+cpu cores       : 2
+fpu             : yes
+fpu_exception   : yes
+cpuid level     : 10
+wp              : yes
+flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
+pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc
+pni monitor ds_cpl vmx tm2 ssse3 cx16 xtpr dca lahf_lm
+bogomips        : 3191.89
+clflush size    : 64
+cache_alignment : 64
+address sizes   : 36 bits physical, 48 bits virtual
+power management:
+
+processor       : 2
+vendor_id       : GenuineIntel
+cpu family      : 6
+model           : 15
+model name      : Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
+stepping        : 6
+cpu MHz         : 1595.925
+cache size      : 4096 KB
+physical id     : 0
+siblings        : 2
+core id         : 1
+cpu cores       : 2
+fpu             : yes
+fpu_exception   : yes
+cpuid level     : 10
+wp              : yes
+flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
+pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc
+pni monitor ds_cpl vmx tm2 ssse3 cx16 xtpr dca lahf_lm
+bogomips        : 3191.88
+clflush size    : 64
+cache_alignment : 64
+address sizes   : 36 bits physical, 48 bits virtual
+power management:
+
+processor       : 3
+vendor_id       : GenuineIntel
+cpu family      : 6
+model           : 15
+model name      : Intel(R) Xeon(R) CPU            5110  @ 1.60GHz
+stepping        : 6
+cpu MHz         : 1595.925
+cache size      : 4096 KB
+physical id     : 3
+siblings        : 2
+core id         : 1
+cpu cores       : 2
+fpu             : yes
+fpu_exception   : yes
+cpuid level     : 10
+wp              : yes
+flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov
+pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm syscall lm constant_tsc
+pni monitor ds_cpl vmx tm2 ssse3 cx16 xtpr dca lahf_lm
+bogomips        : 3191.87
+clflush size    : 64
+cache_alignment : 64
+address sizes   : 36 bits physical, 48 bits virtual
+power management:
diff --git a/tests/nodeinfodata/linux-nodeinfo-3.meminfo b/tests/nodeinfodata/linux-nodeinfo-3.meminfo
new file mode 100644 (file)
index 0000000..6bb8f64
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      4059272 kB
+MemFree:       3532828 kB
+Buffers:         16644 kB
+Cached:         286152 kB
+SwapCached:          0 kB
+Active:         252032 kB
+Inactive:       220148 kB
+SwapTotal:     2031608 kB
+SwapFree:      2031608 kB
+Dirty:              76 kB
+Writeback:           0 kB
+AnonPages:      169548 kB
+Mapped:          25456 kB
+Slab:            27260 kB
+SReclaimable:     9512 kB
+SUnreclaim:      17748 kB
+PageTables:       7552 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   4061244 kB
+Committed_AS:   278572 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:      2044 kB
+VmallocChunk: 34359736107 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-3.txt b/tests/nodeinfodata/linux-nodeinfo-3.txt
new file mode 100644 (file)
index 0000000..e2cc841
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 4, MHz: 1595, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
diff --git a/tests/nodeinfodata/linux-nodeinfo-4.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-4.cpuinfo
new file mode 100644 (file)
index 0000000..4686f03
--- /dev/null
@@ -0,0 +1,96 @@
+processor      : 0
+vendor_id      : AuthenticAMD
+cpu family     : 16
+model          : 2
+model name     : AMD Processor model unknown
+stepping       : 0
+cpu MHz                : 1000.000
+cache size     : 512 KB
+physical id    : 0
+siblings       : 4
+core id                : 0
+cpu cores      : 4
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
+bogomips       : 4131.46
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 48 bits physical, 48 bits virtual
+power management: ts ttp tm stc 100mhzsteps hwpstate [8]
+
+processor      : 1
+vendor_id      : AuthenticAMD
+cpu family     : 16
+model          : 2
+model name     : AMD Processor model unknown
+stepping       : 0
+cpu MHz                : 1000.000
+cache size     : 512 KB
+physical id    : 0
+siblings       : 4
+core id                : 1
+cpu cores      : 4
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
+bogomips       : 3200.13
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 48 bits physical, 48 bits virtual
+power management: ts ttp tm stc 100mhzsteps hwpstate [8]
+
+processor      : 2
+vendor_id      : AuthenticAMD
+cpu family     : 16
+model          : 2
+model name     : AMD Processor model unknown
+stepping       : 0
+cpu MHz                : 1000.000
+cache size     : 512 KB
+physical id    : 0
+siblings       : 4
+core id                : 2
+cpu cores      : 4
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
+bogomips       : 3200.14
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 48 bits physical, 48 bits virtual
+power management: ts ttp tm stc 100mhzsteps hwpstate [8]
+
+processor      : 3
+vendor_id      : AuthenticAMD
+cpu family     : 16
+model          : 2
+model name     : AMD Processor model unknown
+stepping       : 0
+cpu MHz                : 1000.000
+cache size     : 512 KB
+physical id    : 0
+siblings       : 4
+core id                : 3
+cpu cores      : 4
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 5
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc pni monitor cx16 popcnt lahf_lm cmp_legacy svm extapic cr8_legacy altmovcr8 abm sse4a misalignsse 3dnowprefetch osvw
+bogomips       : 3200.01
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 48 bits physical, 48 bits virtual
+power management: ts ttp tm stc 100mhzsteps hwpstate [8]
+
diff --git a/tests/nodeinfodata/linux-nodeinfo-4.meminfo b/tests/nodeinfodata/linux-nodeinfo-4.meminfo
new file mode 100644 (file)
index 0000000..6bb8f64
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      4059272 kB
+MemFree:       3532828 kB
+Buffers:         16644 kB
+Cached:         286152 kB
+SwapCached:          0 kB
+Active:         252032 kB
+Inactive:       220148 kB
+SwapTotal:     2031608 kB
+SwapFree:      2031608 kB
+Dirty:              76 kB
+Writeback:           0 kB
+AnonPages:      169548 kB
+Mapped:          25456 kB
+Slab:            27260 kB
+SReclaimable:     9512 kB
+SUnreclaim:      17748 kB
+PageTables:       7552 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   4061244 kB
+Committed_AS:   278572 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:      2044 kB
+VmallocChunk: 34359736107 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-4.txt b/tests/nodeinfodata/linux-nodeinfo-4.txt
new file mode 100644 (file)
index 0000000..2c75ea3
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 1, Cores: 4, Threads: 1, Memory: 4059272
diff --git a/tests/nodeinfodata/linux-nodeinfo-5.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-5.cpuinfo
new file mode 100644 (file)
index 0000000..b52ae8a
--- /dev/null
@@ -0,0 +1,96 @@
+processor      : 0
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2220
+stepping       : 3
+cpu MHz                : 2814.921
+cache size     : 1024 KB
+physical id    : 0
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 5633.58
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 1
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2220
+stepping       : 3
+cpu MHz                : 2814.921
+cache size     : 1024 KB
+physical id    : 0
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 5629.01
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 2
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2220
+stepping       : 3
+cpu MHz                : 2814.921
+cache size     : 1024 KB
+physical id    : 1
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 5628.94
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 3
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2220
+stepping       : 3
+cpu MHz                : 2814.921
+cache size     : 1024 KB
+physical id    : 1
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy
+bogomips       : 5628.86
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
diff --git a/tests/nodeinfodata/linux-nodeinfo-5.meminfo b/tests/nodeinfodata/linux-nodeinfo-5.meminfo
new file mode 100644 (file)
index 0000000..6bb8f64
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      4059272 kB
+MemFree:       3532828 kB
+Buffers:         16644 kB
+Cached:         286152 kB
+SwapCached:          0 kB
+Active:         252032 kB
+Inactive:       220148 kB
+SwapTotal:     2031608 kB
+SwapFree:      2031608 kB
+Dirty:              76 kB
+Writeback:           0 kB
+AnonPages:      169548 kB
+Mapped:          25456 kB
+Slab:            27260 kB
+SReclaimable:     9512 kB
+SUnreclaim:      17748 kB
+PageTables:       7552 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   4061244 kB
+Committed_AS:   278572 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:      2044 kB
+VmallocChunk: 34359736107 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-5.txt b/tests/nodeinfodata/linux-nodeinfo-5.txt
new file mode 100644 (file)
index 0000000..01fee52
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 4, MHz: 2814, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
diff --git a/tests/nodeinfodata/linux-nodeinfo-6.cpuinfo b/tests/nodeinfodata/linux-nodeinfo-6.cpuinfo
new file mode 100644 (file)
index 0000000..7b5625e
--- /dev/null
@@ -0,0 +1,96 @@
+processor      : 0
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2218
+stepping       : 2
+cpu MHz                : 1000.000
+cache size     : 1024 KB
+physical id    : 0
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8_legacy
+bogomips       : 1999.99
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 1
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2218
+stepping       : 2
+cpu MHz                : 1000.000
+cache size     : 1024 KB
+physical id    : 1
+siblings       : 2
+core id                : 0
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8_legacy
+bogomips       : 1999.99
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 2
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2218
+stepping       : 2
+cpu MHz                : 1000.000
+cache size     : 1024 KB
+physical id    : 0
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8_legacy
+bogomips       : 1999.99
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
+processor      : 3
+vendor_id      : AuthenticAMD
+cpu family     : 15
+model          : 65
+model name     : Dual-Core AMD Opteron(tm) Processor 2218
+stepping       : 2
+cpu MHz                : 1000.000
+cache size     : 1024 KB
+physical id    : 1
+siblings       : 2
+core id                : 1
+cpu cores      : 2
+fpu            : yes
+fpu_exception  : yes
+cpuid level    : 1
+wp             : yes
+flags          : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow pni cx16 lahf_lm cmp_legacy svm cr8_legacy
+bogomips       : 1999.99
+TLB size       : 1024 4K pages
+clflush size   : 64
+cache_alignment        : 64
+address sizes  : 40 bits physical, 48 bits virtual
+power management: ts fid vid ttp tm stc
+
diff --git a/tests/nodeinfodata/linux-nodeinfo-6.meminfo b/tests/nodeinfodata/linux-nodeinfo-6.meminfo
new file mode 100644 (file)
index 0000000..6bb8f64
--- /dev/null
@@ -0,0 +1,28 @@
+MemTotal:      4059272 kB
+MemFree:       3532828 kB
+Buffers:         16644 kB
+Cached:         286152 kB
+SwapCached:          0 kB
+Active:         252032 kB
+Inactive:       220148 kB
+SwapTotal:     2031608 kB
+SwapFree:      2031608 kB
+Dirty:              76 kB
+Writeback:           0 kB
+AnonPages:      169548 kB
+Mapped:          25456 kB
+Slab:            27260 kB
+SReclaimable:     9512 kB
+SUnreclaim:      17748 kB
+PageTables:       7552 kB
+NFS_Unstable:        0 kB
+Bounce:              0 kB
+CommitLimit:   4061244 kB
+Committed_AS:   278572 kB
+VmallocTotal: 34359738367 kB
+VmallocUsed:      2044 kB
+VmallocChunk: 34359736107 kB
+HugePages_Total:     0
+HugePages_Free:      0
+HugePages_Rsvd:      0
+Hugepagesize:     2048 kB
diff --git a/tests/nodeinfodata/linux-nodeinfo-6.txt b/tests/nodeinfodata/linux-nodeinfo-6.txt
new file mode 100644 (file)
index 0000000..a7a2cfe
--- /dev/null
@@ -0,0 +1 @@
+CPUs: 4, MHz: 1000, Nodes: 1, Sockets: 2, Cores: 2, Threads: 1, Memory: 4059272
diff --git a/tests/nodeinfotest.c b/tests/nodeinfotest.c
new file mode 100644 (file)
index 0000000..604f5a4
--- /dev/null
@@ -0,0 +1,117 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "config.h"
+
+#include <string.h>
+
+#include "testutils.h"
+#include "internal.h"
+#include "nodeinfo.h"
+
+static char *progname;
+
+#define MAX_FILE 4096
+
+#ifdef __linux__
+
+extern int linuxNodeInfoCPUPopulate(virConnectPtr conn, FILE *cpuinfo, virNodeInfoPtr nodeinfo);
+extern int linuxNodeInfoMemPopulate(virConnectPtr conn, FILE *meminfo, virNodeInfoPtr nodeinfo);
+
+static int linuxTestCompareFiles(const char *cpuinfofile, const char *meminfofile, const char *outputfile) {
+    char actualData[MAX_FILE];
+    char expectData[MAX_FILE];
+    char *expect = &expectData[0];
+    virNodeInfo nodeinfo;
+    FILE *cpuinfo, *meminfo;
+
+    if (virtTestLoadFile(outputfile, &expect, MAX_FILE) < 0)
+        return -1;
+
+    cpuinfo = fopen(cpuinfofile, "r");
+    if (!cpuinfo)
+        return -1;
+    if (linuxNodeInfoCPUPopulate(NULL, cpuinfo, &nodeinfo) < 0) {
+        fclose(cpuinfo);
+        return -1;
+    }
+    fclose(cpuinfo);
+
+    meminfo = fopen(meminfofile, "r");
+    if (!meminfo)
+        return -1;
+    if (linuxNodeInfoMemPopulate(NULL, meminfo, &nodeinfo) < 0) {
+        fclose(meminfo);
+        return -1;
+    }
+    fclose(meminfo);
+
+    snprintf(actualData, MAX_FILE,
+             "CPUs: %u, MHz: %u, Nodes: %u, Sockets: %u, Cores: %u, Threads: %u, Memory: %lu\n",
+             nodeinfo.cpus, nodeinfo.mhz, nodeinfo.nodes, nodeinfo.sockets,
+             nodeinfo.cores, nodeinfo.threads, nodeinfo.memory);
+
+    if (STRNEQ(actualData, expectData)) {
+        if (getenv("DEBUG_TESTS")) {
+            printf("Expect %d '%s'\n", (int)strlen(expectData), expectData);
+            printf("Actual %d '%s'\n", (int)strlen(actualData), actualData);
+        }
+        return -1;
+    }
+
+    return 0;
+}
+
+
+static int linuxTestNodeInfo(const void *data) {
+    char cpuinfo[PATH_MAX];
+    char meminfo[PATH_MAX];
+    char output[PATH_MAX];
+    snprintf(cpuinfo, PATH_MAX, "nodeinfodata/linux-%s.cpuinfo", (const char*)data);
+    snprintf(meminfo, PATH_MAX, "nodeinfodata/linux-%s.meminfo", (const char*)data);
+    snprintf(output, PATH_MAX, "nodeinfodata/linux-%s.txt", (const char*)data);
+    return linuxTestCompareFiles(cpuinfo, meminfo, output);
+}
+#endif
+
+
+int
+main(int argc, char **argv)
+{
+    int ret = 0;
+#ifdef __linux__
+    int i;
+    const char *nodeData[] = {
+        "nodeinfo-1",
+        "nodeinfo-2",
+        "nodeinfo-3",
+        "nodeinfo-4",
+        "nodeinfo-5",
+        "nodeinfo-6",
+    };
+
+    progname = argv[0];
+
+    if (argc > 1) {
+        fprintf(stderr, "Usage: %s\n", progname);
+        exit(EXIT_FAILURE);
+    }
+
+    virInitialize();
+
+    for (i = 0 ; i < (sizeof(nodeData)/sizeof(nodeData[0])) ; i++)
+      if (virtTestRun(nodeData[i], 1, linuxTestNodeInfo, nodeData[i]) != 0)
+       ret = -1;
+#endif
+
+    exit(ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
+}
+
+/*
+ * Local variables:
+ *  indent-tabs-mode: nil
+ *  c-indent-level: 4
+ *  c-basic-offset: 4
+ *  tab-width: 4
+ * End:
+ */