From d50a222315a785d60e34e08f03b47bdff48d2b47 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Wed, 26 Jan 2011 19:36:45 +0100
Subject: [PATCH] Check for duplicate RAPI URIs and handlers

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 test/docs_unittest.py | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/test/docs_unittest.py b/test/docs_unittest.py
index 87aa26d0b..1926682c6 100755
--- a/test/docs_unittest.py
+++ b/test/docs_unittest.py
@@ -99,6 +99,11 @@ class TestDocs(unittest.TestCase):
     resources = connector.GetHandlers(node_name, instance_name, group_name,
                                       job_id, disk_index)
 
+    handler_dups = utils.FindDuplicates(resources.values())
+    self.assertFalse(handler_dups,
+                     msg=("Resource handlers used more than once: %r" %
+                          handler_dups))
+
     uri_check_fixup = {
       re.compile(node_name): "node1examplecom",
       re.compile(instance_name): "inst1examplecom",
@@ -123,6 +128,7 @@ class TestDocs(unittest.TestCase):
     prefix_exception = frozenset(["/", "/version", "/2"])
 
     undocumented = []
+    used_uris = []
 
     for key, handler in resources.iteritems():
       # Regex objects
@@ -137,6 +143,7 @@ class TestDocs(unittest.TestCase):
             uri = title[2:-2]
             if key.match(uri):
               self._CheckRapiResource(uri, uri_check_fixup, handler)
+              used_uris.append(uri)
               found = True
               break
 
@@ -150,6 +157,7 @@ class TestDocs(unittest.TestCase):
 
         if ("``%s``" % key) in titles:
           self._CheckRapiResource(key, {}, handler)
+          used_uris.append(key)
         else:
           undocumented.append(key)
 
@@ -157,6 +165,11 @@ class TestDocs(unittest.TestCase):
                 msg=("Missing RAPI resource documentation for %s" %
                      utils.CommaJoin(undocumented)))
 
+    uri_dups = utils.FindDuplicates(used_uris)
+    self.failIf(uri_dups,
+                msg=("URIs matched by more than one resource: %s" %
+                     utils.CommaJoin(uri_dups)))
+
 
 class TestManpages(unittest.TestCase):
   """Manpage tests"""
-- 
GitLab