I've submitted these before, and there were no comments. Any
suggestions for addition tests on the balloon driver would be
appreciated. Here it is again as a patch putting them
under /tools/tests/balloon.
--
Thanks,
Paul Larson
plars@xxxxxxxxxxxxxxxxxxxx
http://www.linuxtestproject.org
# HG changeset patch
# User root@xxxxxxxxxxxxxxxxxxxxxxxx
# Node ID fa47e95d40dc1cd96ff54555284efd60bbdd6406
# Parent b63577ff53a3161ac73b55e0aa87803e76c8bde5
Add simple set of tests for balloon driver
These can be executed individually, or with make check from the balloon
directory. The ballon06 test is skipped in make check for the time
being, and has a big warning and 10 second delay when you run it
standalone since it exposes the system hang bug described in bug #145.
Signed-off-by: Paul Larson <pl@xxxxxxxxxx>
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/Makefile
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/Makefile Fri Aug 5 16:57:07 2005
@@ -0,0 +1,27 @@
+CFLAGS=-g -Wall -Werror
+
+PROGS=balloon07 balloon08 balloon09 memsteal
+
+#balloon06 is left out on purpose due to a known, fatal bug
+TESTS=balloon01 balloon02 balloon03 balloon04 balloon05 balloon07 \
+ balloon08 balloon09
+
+all: $(PROGS)
+
+balloon07: balloon07.o
+balloon08: balloon08.o
+balloon09: balloon09.o
+memsteal: memsteal.o
+
+clean:
+ $(RM) *.o $(PROGS)
+
+check: all
+ for test in $(TESTS); do ./$$test; done
+
+%.o: %.c
+ $(CC) -c $(CFLAGS) -o $@ $^
+
+%: %.o
+ $(CC) -o $@ $(LDFLAGS) $^ $(LDLIBS)
+
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon01
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon01 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,31 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon01
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Test read from /proc/xen/balloon
+
+TESTNAME=balloon01
+
+cat /proc/xen/balloon &> /dev/null
+if [ $? == 0 ]
+then
+ echo "$TESTNAME PASS: read from /proc/xen/balloon"
+else
+ echo "$TESTNAME FAIL: read from /proc/xen/balloon"
+fi
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon02
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon02 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon02
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Echo a number higher than current requested allocation
to
+# /proc/xen/balloon, cat balloon and see that requested
+# target changed.
+
+TESTNAME=balloon02
+
+#Units seem to currently be in kB
+old_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+new_alloc=$(( $old_alloc + 4096 ))
+echo $[new_alloc]K > /proc/xen/balloon
+check_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+#cleanup before checking the value and exiting
+echo $[old_alloc]K > /proc/xen/balloon
+
+if [ $check_alloc == $new_alloc ]
+then
+ echo "$TESTNAME PASS: Requested allocation increased from $old_alloc"\
+ "kB to $new_alloc kB"
+else
+ echo "$TESTNAME FAIL: increase Requested allocation by 4k"
+fi
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon03
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon03 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon03
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Echo a number lower than current requested allocation
to
+# /proc/xen/balloon, cat balloon and see that requested
+# target changed.
+
+TESTNAME=balloon03
+
+#Units seem to currently be in kB
+old_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+new_alloc=$(( $old_alloc - 4096 ))
+echo $[new_alloc]K > /proc/xen/balloon
+check_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+#cleanup before checking the value and exiting
+echo $[old_alloc]K > /proc/xen/balloon
+
+if [ $check_alloc == $new_alloc ]
+then
+ echo "$TESTNAME PASS: Requested allocation decreased from $old_alloc"\
+ "kB to $new_alloc kB"
+else
+ echo "$TESTNAME FAIL: decrease Requested allocation by 4k"
+fi
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon04
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon04 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon04
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Allocate some memory for the domain, then use
+# /proc/xen/balloon to reduce available memory to less
than
+# what is allocated
+
+TESTNAME=balloon04
+
+old_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+#Allocating 128 MB, reducing memory to 120 MB
+new_alloc=$(( 120 * 1024 ))
+./memsteal 128&
+cpid=$!
+sleep 2
+
+echo $[new_alloc]K > /proc/xen/balloon
+#wait a moment for it to settle
+sleep 3
+echo $[old_alloc]K > /proc/xen/balloon
+kill $cpid
+
+#If you make it this far, the test passed
+echo "$TESTNAME PASS: Requested allocation reduced to $new_alloc kB"
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon05
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon05 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon05
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Try to give /proc/xen/balloon a value larger than the
+# available RAM in the system.
+
+TESTNAME=balloon05
+
+#Units seem to currently be in kB
+old_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+#If you have more than 70GB, either change this number or take some of
that
+#out and send it my way :)
+new_alloc=73400320
+
+echo $[new_alloc]K > /proc/xen/balloon
+check_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+
+#cleanup before checking the value and exiting
+echo $[old_alloc]K > /proc/xen/balloon
+
+if [ $check_alloc == $new_alloc ]
+then
+ echo "$TESTNAME PASS: Requested alloc. increased from $old_alloc"\
+ "kB to $new_alloc kB"
+else
+ echo "$TESTNAME FAIL: increase Requested allocation to 70GB"
+fi
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon06
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon06 Fri Aug 5 16:57:07 2005
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+#
+# Copyright (c) International Business Machines Corp., 2005
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+#
+# Test name: balloon06
+# Author: Paul Larson <pl@xxxxxxxxxx>
+# Description: Try to give /proc/xen/balloon a value way too low, such
as 4k
+#
+# Warning: Known to crash at the time this was written
+
+TESTNAME=balloon06
+
+old_alloc=`cat /proc/xen/balloon |grep Requested |awk -F ' +' '{print
$3}'`
+new_alloc=4
+
+echo
'**********************************************************************'
+echo '* Warning!!! About to run a test that is known to hang or crash
*'
+echo '* the system! Abort now, echo if you wish, sleeping for 10
seconds. *'
+echo
'**********************************************************************'
+sleep 10
+
+echo $[new_alloc]K > /proc/xen/balloon
+sleep 3
+echo $[old_alloc]K > /proc/xen/balloon
+echo "$TESTNAME PASS: Requested allocation reduced to $new_alloc kB"
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon07.c
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon07.c Fri Aug 5 16:57:07 2005
@@ -0,0 +1,68 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2005
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ *
+ * Test name: balloon07
+ * Author: Paul Larson <pl@xxxxxxxxxx>
+ * Description: Open /proc/xen/balloon as non-root user, expect -EACCES
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <pwd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define TESTNAME "balloon07"
+
+int main(void)
+{
+ int fd;
+ int err;
+ char username[] = "nobody";
+ struct passwd *user;
+
+ user = getpwnam(username);
+
+ if (setreuid(user->pw_uid, user->pw_uid) == -1) {
+ printf("%s FAIL: setreuid(): %s\n",TESTNAME, strerror(errno));
+ exit(1);
+ }
+
+ fd = open("/proc/xen/balloon", O_RDWR);
+ err = errno;
+ if (fd != -1) {
+ printf("%s FAIL: Write to /proc/xen/balloon as non-root "
+ "user succeeded\n", TESTNAME);
+ close(fd);
+ exit(1);
+ }
+ if (err != 13) {
+ printf("%s FAIL: Write to /proc/xen/balloon as non-root "
+ "got errno %d, expected 13\n", TESTNAME, err);
+ close(fd);
+ exit(1);
+ }
+ printf("%s PASS: Write to /proc/xen/balloon as non-root user failed "
+ "with -EACCES\n", TESTNAME);
+ close(fd);
+ exit(0);
+}
+
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon08.c
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon08.c Fri Aug 5 16:57:07 2005
@@ -0,0 +1,64 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2005
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ *
+ * Test name: balloon08
+ * Author: Paul Larson <pl@xxxxxxxxxx>
+ * Description: Write 1 byte to /proc/xen/balloon, expect -EBADMSG
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define TESTNAME "balloon08"
+
+int main(void)
+{
+ int fd;
+ int ret, err;
+
+ fd = open("/proc/xen/balloon", O_RDWR);
+ if (fd == -1) {
+ printf("%s FAIL: failed to open /proc/xen/balloon, %s\n",
+ TESTNAME, strerror(errno));
+ exit(1);
+ }
+ ret = write(fd, "a", 1);
+ err = errno;
+ if (ret != -1) {
+ printf("%s FAIL: Write 1 byte to /proc/xen/balloon succeeded\n",
+ TESTNAME);
+ close(fd);
+ exit(1);
+ }
+ if (err != 74) {
+ printf("%s FAIL: Write 1 byte got errno %d, expected 74\n",
+ TESTNAME, err);
+ close(fd);
+ exit(1);
+ }
+ printf("%s PASS: Write 1 byte failed with -EBADMSG\n",
+ TESTNAME);
+ close(fd);
+ exit(0);
+}
+
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/balloon09.c
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/balloon09.c Fri Aug 5 16:57:07 2005
@@ -0,0 +1,70 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2005
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ *
+ * Test name: balloon09
+ * Author: Paul Larson <pl@xxxxxxxxxx>
+ * Description: Write >64 bytes to /proc/xen/balloon, expect -EFBIG
+ */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define TESTNAME "balloon09"
+#define STRSIZE 100
+
+int main(void)
+{
+ int fd;
+ int ret, err, i;
+ char str[STRSIZE];
+
+ for(i=0;i<64;i++) {
+ *(str + i) = 'a';
+ }
+
+ fd = open("/proc/xen/balloon", O_RDWR);
+ if (fd == -1) {
+ printf("%s FAIL: failed to open /proc/xen/balloon, %s\n",
+ TESTNAME, strerror(errno));
+ exit(1);
+ }
+ ret = write(fd, str, sizeof(str));
+ err = errno;
+ if (ret != -1) {
+ printf("%s FAIL: Write 1 byte to /proc/xen/balloon succeeded\n",
+ TESTNAME);
+ close(fd);
+ exit(1);
+ }
+ if (err != 27) {
+ printf("%s FAIL: Write 1 byte got errno %d, expected 27\n",
+ TESTNAME, err);
+ close(fd);
+ exit(1);
+ }
+ printf("%s PASS: Write 1 byte failed with -EFBIG as expected\n",
+ TESTNAME);
+ close(fd);
+ exit(0);
+}
+
diff -r b63577ff53a3 -r fa47e95d40dc tools/tests/balloon/memsteal.c
--- /dev/null Fri Aug 5 14:57:43 2005
+++ b/tools/tests/balloon/memsteal.c Fri Aug 5 16:57:07 2005
@@ -0,0 +1,52 @@
+/*
+ *
+ * Copyright (c) International Business Machines Corp., 2005
+ * This program is free software; you can redistribute it and/or
modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program 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 General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
+ *
+ * Test name: memsteal
+ * Author: Paul Larson <pl@xxxxxxxxxx>
+ * Description: simple memory allocator
+ */
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/mman.h>
+
+int main(int argc, char **argv)
+{
+ int i;
+ size_t memsize;
+ char *chunk;
+
+ if (argc != 2) {
+ printf("usage: memsteal [Memory in MB]\n"
+ "Allocates given amount of memory, touches the pages,\n"
+ "and waits for a signal to exit.\n\n");
+ exit(1);
+ }
+ memsize = atol(argv[1]) * 1024 * 1024;
+ chunk = mmap(0, memsize, PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0);
+ if (chunk == NULL) {
+ perror("mmap()");
+ exit(1);
+ }
+ for(i=0;i<memsize;i+=4096) {
+ chunk[i]='a';
+ }
+ pause();
+ exit(0);
+}
signature.asc
Description: This is a digitally signed message part
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|