diff --git a/qa/ganeti-qa.py b/qa/ganeti-qa.py
index 6d1309ac66d1a1baf4f9338645461a223e0abd3f..56aa418bbb39cd241a707b7a515cc962f8746813 100755
--- a/qa/ganeti-qa.py
+++ b/qa/ganeti-qa.py
@@ -230,6 +230,12 @@ def RunGroupListTests():
   RunTestIf("group-list", qa_group.TestGroupListAllFields)
 
 
+def RunGroupRwTests():
+  """Run tests for adding/removing/renaming groups.
+
+  """
+  RunTestIf("group-rwops", qa_group.TestGroupAddRemoveRename)
+
 def RunExportImportTests(instance, pnode, snode):
   """Tries to export and import the instance.
 
@@ -358,6 +364,7 @@ def main():
 
   RunCommonNodeTests()
   RunGroupListTests()
+  RunGroupRwTests()
 
   pnode = qa_config.AcquireNode(exclude=qa_config.GetMasterNode())
   try:
diff --git a/qa/qa-sample.json b/qa/qa-sample.json
index b1a9e4b1fc157d8b16c0926557a6d3dae52116e9..fa8cc8f30ea5077b1a4640518fdd48aa4568b4ec 100644
--- a/qa/qa-sample.json
+++ b/qa/qa-sample.json
@@ -33,6 +33,15 @@
     }
   ],
 
+  "groups": {
+    "group-with-nodes": "default",
+    "inexistent-groups": [
+      "group1",
+      "group2",
+      "group3"
+    ]
+  }
+
   "tests": {
     "env": true,
     "os": true,
@@ -54,6 +63,7 @@
     "cluster-modify": true,
 
     "group-list": true,
+    "group-rwops": true,
 
     "node-info": true,
     "node-volumes": true,
diff --git a/qa/qa_group.py b/qa/qa_group.py
index 9671b02ac62771f182519de0e9ad999588134de9..e0e4cc7fa29f3e5acc6ba0f90265125a8c969f46 100644
--- a/qa/qa_group.py
+++ b/qa/qa_group.py
@@ -19,9 +19,37 @@
 # 02110-1301, USA.
 
 
+import qa_config
 from qa_utils import AssertCommand
 
 
+def TestGroupAddRemoveRename():
+  """gnt-group add/remove/rename"""
+  groups = qa_config.get("groups", {})
+
+  existing_group_with_nodes = groups.get("group-with-nodes", "default")
+  group1, group2, group3 = groups.get("inexistent-groups",
+                                      ["group1", "group2", "group3"])[:3]
+
+  AssertCommand(["gnt-group", "add", group1])
+  AssertCommand(["gnt-group", "add", group2])
+  AssertCommand(["gnt-group", "add", group2], fail=True)
+  AssertCommand(["gnt-group", "add", existing_group_with_nodes], fail=True)
+
+  AssertCommand(["gnt-group", "rename", group1, group2], fail=True)
+  AssertCommand(["gnt-group", "rename", group1, group3])
+
+  try:
+    AssertCommand(["gnt-group", "rename", existing_group_with_nodes, group1])
+
+    AssertCommand(["gnt-group", "remove", group2])
+    AssertCommand(["gnt-group", "remove", group3])
+    AssertCommand(["gnt-group", "remove", group1], fail=True)
+  finally:
+    # Try to ensure idempotency re groups that already existed.
+    AssertCommand(["gnt-group", "rename", group1, existing_group_with_nodes])
+
+
 def TestGroupListDefaultFields():
   """gnt-group list"""
   AssertCommand(["gnt-group", "list"])