diff --git a/htest/data/empty-cluster.data b/htest/data/empty-cluster.data
new file mode 100644
index 0000000000000000000000000000000000000000..d25526f5d4f4def6afb7aca35737a22a32c00d07
--- /dev/null
+++ b/htest/data/empty-cluster.data
@@ -0,0 +1,7 @@
+group-01|fake-uuid-01|preferred|
+
+
+
+
+|128,1,1024,1,1,1|128,1,1024,1,1,1|32768,8,1048576,16,8,12|diskless,file,sharedfile,plain,blockdev,drbd,rbd,ext|4.0|32.0
+group-01|128,1,1024,1,1,1|128,1,1024,1,1,1|32768,8,1048576,16,8,12|diskless,file,sharedfile,plain,blockdev,drbd,rbd,ext|4.0|32.0
diff --git a/htest/shelltests/htools-basic.test b/htest/shelltests/htools-basic.test
index e462f7fa2d780644a0d8bcbd754fd8eb1047e852..9b45b31bccf362ecc4d543f282769a155804fd71 100644
--- a/htest/shelltests/htools-basic.test
+++ b/htest/shelltests/htools-basic.test
@@ -3,27 +3,41 @@
 >>>= 0
 ./htest/hail --help
 >>>= 0
+./htest/hail --help-completion
+>>>= 0
 ./htest/hbal --version
 >>>= 0
 ./htest/hbal --help
 >>>= 0
+./htest/hbal --help-completion
+>>>= 0
 ./htest/hspace --version
 >>>= 0
 ./htest/hspace --help
 >>>= 0
+./htest/hspace --help-completion
+>>>= 0
 ./htest/hscan --version
 >>>= 0
 ./htest/hscan --help
 >>>= 0
+./htest/hscan --help-completion
+>>>= 0
 ./htest/hinfo --version
 >>>= 0
 ./htest/hinfo --help
 >>>= 0
+./htest/hinfo --help-completion
+>>>= 0
 ./htest/hcheck --version
 >>>= 0
 ./htest/hcheck --help
 >>>= 0
+./htest/hcheck --help-completion
+>>>= 0
 ./htest/hroller --version
 >>>= 0
 ./htest/hroller --help
 >>>= 0
+./htest/hroller --help-completion
+>>>= 0
diff --git a/htest/shelltests/htools-invalid.test b/htest/shelltests/htools-invalid.test
index 1625b25ba2e093286b8c3551744dc3675402af66..649c540256d39d1f1195d459c0933c185f279659 100644
--- a/htest/shelltests/htools-invalid.test
+++ b/htest/shelltests/htools-invalid.test
@@ -22,6 +22,10 @@
 ./htest/hcheck --no-such-option
 >>>= 2
 
+# invalid option test
+./htest/hroller --no-such-option
+>>>= 2
+
 # extra arguments
 ./htest/hspace unexpected-argument
 >>>2
@@ -42,3 +46,14 @@ Error: This program doesn't take any arguments.
 >>>2
 Error: This program doesn't take any arguments.
 >>>=1
+
+./htest/hroller unexpected-argument
+>>>2
+Error: This program doesn't take any arguments.
+>>>=1
+
+# hroller fails to build a graph for an empty cluster
+./htest/hroller -t$TESTDATA_DIR/empty-cluster.data
+>>>2
+Error: Cannot create node graph
+>>>=1
diff --git a/htest/shelltests/htools-no-backend.test b/htest/shelltests/htools-no-backend.test
index 7749b217288733d2017ce370c432b7832b4df9fe..fc2ac9c388e1c46fcad922e63d1e86f91631db31 100644
--- a/htest/shelltests/htools-no-backend.test
+++ b/htest/shelltests/htools-no-backend.test
@@ -14,6 +14,10 @@
 ./htest/hinfo
 >>>= 1
 
+# hroller no backend
+./htest/hroller
+>>>= 1
+
 # hbal multiple backends
 ./htest/hbal -t /dev/null -m localhost
 >>>2
diff --git a/htest/shelltests/htools-single-group.test b/htest/shelltests/htools-single-group.test
index 1cdf5b9d63f18f22d24d9a944b428df9feef508b..38281827ab24d1b7dbb09b95559280d2dd0bce80 100644
--- a/htest/shelltests/htools-single-group.test
+++ b/htest/shelltests/htools-single-group.test
@@ -27,3 +27,11 @@
 ./htest/hcheck -t$T/simu-onegroup.tiered --machine-readable
 >>> /HCHECK_INIT_CLUSTER_NEED_REBALANCE=0/
 >>>= 0
+
+# hroller should be able to print the solution
+./htest/hroller -t$T/simu-onegroup.tiered
+>>>= 0
+
+# hroller should be able to print the solution, in verbose mode as well
+./htest/hroller -t$T/simu-onegroup.tiered -v -v
+>>>= 0