[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[minion-cvs] Start writing unit tests for directory voting formats. ...



Update of /home/minion/cvsroot/src/minion/lib/mixminion
In directory moria.mit.edu:/tmp/cvs-serv4406/src/minion/lib/mixminion

Modified Files:
	ServerInfo.py test.py testSupport.py 
Log Message:
Start writing unit tests for directory voting formats. Fix many bugs and conformance issues. Keen!

Index: ServerInfo.py
===================================================================
RCS file: /home/minion/cvsroot/src/minion/lib/mixminion/ServerInfo.py,v
retrieving revision 1.88
retrieving revision 1.89
diff -u -d -r1.88 -r1.89
--- ServerInfo.py	12 Dec 2004 22:28:39 -0000	1.88
+++ ServerInfo.py	13 Dec 2004 06:01:58 -0000	1.89
@@ -760,8 +760,11 @@
            "Valid-Until" : ("REQUIRE", "date", None),
            "Recommended-Servers" : ("REQUIRE", "list", None),
            "Voting-Server" : ("REQUIRE*", None, None) },
-        "Recommended-Software" :
-           _DirectoryHeader._syntax["Recommended-Software"] }
+        'Recommended-Software': {
+           "__SECTION__": ("ALLOW", None, None),
+           "MixminionClient": ("ALLOW", "list", None),
+           "MixminionServer": ("ALLOW", "list", None), },
+        }
 
     def __init__(self, string):
         self.sigStatus = None
@@ -774,6 +777,7 @@
                     if k == 'Version' and v.strip() != self.VERSION:
                         raise ConfigError("Unrecognized descriptor version: %s"
                                           % v.strip())
+        return contents
 
     def validate(self, lines, contents):
         sec = self['Directory-Info']
@@ -787,8 +791,11 @@
             lst = s.split(" ",1)
             if len(lst) != 2:
                 raise ConfigError("Missing URLBase or fingerprint in Voting-Server")
-            self.voters.append((mixminion.Config._parseBase64(lst[0]),
-                                lst[1].strip()))
+            digest = mixminion.Config._parseHex(lst[0]) # can raise ConfigError
+            if len(digest) != DIGEST_LEN:
+                raise ConfigError("Bad length for Voting-Server fingerprint",
+                                  len(lst[0]), len(digest))
+            self.voters.append((lst[0], lst[1].strip()))
 
 class _DirectorySignature(mixminion.Config._ConfigFile):
     """Internal object: used to parse, validate, and store fields in a
@@ -810,7 +817,7 @@
         mixminion.Config._ConfigFile.__init__(self, string=string)
 
     def validate(self, lines, contents):
-        sec = contents['Signed-Directory']
+        sec = self['Signed-Directory']
         idKeyBytes = sec['Directory-Identity'].get_modulus_bytes()
         if not (2048 <= idKeyBytes*8 <= 4096):
             raise ConfigError("Identity key length is out of range (%s bits)"
@@ -933,8 +940,8 @@
     sigs = []
 
     # Extract all signatures.
-    while directory.startswith("[Directory-Signature]\n"):
-        eos = directory.find("\n[Directory-Signature]\n", 1)
+    while directory.startswith("[Signed-Directory]\n"):
+        eos = directory.find("\n[Signed-Directory]\n", 1)
         if eos < 0:
             eos = directory.find("\n[Directory-Info]\n")
         if eos < 0:

Index: test.py
===================================================================
RCS file: /home/minion/cvsroot/src/minion/lib/mixminion/test.py,v
retrieving revision 1.212
retrieving revision 1.213
diff -u -d -r1.212 -r1.213
--- test.py	12 Dec 2004 23:24:30 -0000	1.212
+++ test.py	13 Dec 2004 06:01:58 -0000	1.213
@@ -165,6 +165,9 @@
 _generated_rsa_keys[(0,2048)] = mixminion.testSupport.TEST_KEYS_2048[0]
 _generated_rsa_keys[(1,2048)] = mixminion.testSupport.TEST_KEYS_2048[1]
 _generated_rsa_keys[(2,2048)] = mixminion.testSupport.TEST_KEYS_2048[2]
+_generated_rsa_keys[(3,2048)] = mixminion.testSupport.TEST_KEYS_2048[3]
+_generated_rsa_keys[(4,2048)] = mixminion.testSupport.TEST_KEYS_2048[4]
+_generated_rsa_keys[(5,2048)] = mixminion.testSupport.TEST_KEYS_2048[5]
 def getRSAKey(n,bits):
     """Return the n'th of an arbitrary number of cached 'bits'-bit RSA keys,
        generating them as necessary."""
@@ -186,9 +189,9 @@
 _pk_generate_orig = Crypto.pk_generate
 _pk_generate_idx = 0
 def _pk_generate_replacement(bits=1024,e=65537):
-    if bits == 1024:
+    if bits == 2048:
         global _pk_generate_idx
-        _pk_generate_idx = (_pk_generate_idx + 1) % 4
+        _pk_generate_idx = (_pk_generate_idx + 1) % 6
         return getRSAKey(_pk_generate_idx, bits)
     else:
         return getRSAKey(0, bits)
@@ -5071,7 +5074,8 @@
         info3 = key3.getServerDescriptor()
         eq(info3['Incoming/MMTP']['Hostname'], "Theserver4")
 
-    def test_directory(self):
+    def testOldDirectory(self):
+        #XXXX008 split this into serverlist and serverdirectory tests.
         eq = self.assertEquals
         examples = getExampleServerDescriptors()
         ServerList = mixminion.directory.ServerList.ServerList
@@ -5226,6 +5230,31 @@
         eq(4, len(lst.servers))
         eq(2, len(os.listdir(archiveDir)))
 
+    def testNewDirectoryFormats(self):
+        DF = mixminion.directory.DirFormats
+        examples = getExampleServerDescriptors()
+        id0 = getRSAKey(1,2048)
+        id1 = getRSAKey(3,2048)
+        id2 = getRSAKey(5,2048)
+        keyid0 = mixminion.Crypto.pk_fingerprint(id0)
+        keyid1 = mixminion.Crypto.pk_fingerprint(id1)
+        keyid2 = mixminion.Crypto.pk_fingerprint(id2)
+        ub0 = "http://foo/";
+        ub1 = "http://foo.bar/";
+        ub2 = "http://foo.bar/baz/";
+        voters = [(keyid0,ub0), (keyid1,ub1), (keyid2,ub2)]
+
+        # Test generating a vote directory.
+        va = previousMidnight(time.time())
+        s1 = [ examples['Fred'][1], examples['Fred'][2], examples['Lola'][1],
+               examples['Joe'][0], examples['Alice'][0] ]
+        vd1 = {}
+        s_vote1 = DF.generateVoteDirectory(
+            id0, s1, [ "Fred", "Lola", "Joe" ],
+            voters, va, ["0.0.8", "0.0.8.1"], ["0.0.8.1"], validatedDigests=vd1)
+
+        # Test parsing it.
+        vote1 = mixminion.ServerInfo.SignedDirectory(string=s_vote1)
 
 #----------------------------------------------------------------------
 # EventStats
@@ -6490,7 +6519,7 @@
         # Generate a config file
         homedir = mix_mktemp()
         conf = EX_SERVER_CONF_TEMPLATE % locals()
-        identity = getRSAKey(serveridx%3,2048)
+        identity = getRSAKey(serveridx%6,2048)
         serveridx += 1
         for t in types:
             if t == MBOX_TYPE:
@@ -7839,8 +7868,8 @@
     loader = unittest.TestLoader()
     tc = loader.loadTestsFromTestCase
 
-    if 0:
-        suite.addTest(tc(PingerTests))
+    if 1:
+        suite.addTest(tc(ServerInfoTests))
         return suite
     testClasses = [MiscTests,
                    MinionlibCryptoTests,

Index: testSupport.py
===================================================================
RCS file: /home/minion/cvsroot/src/minion/lib/mixminion/testSupport.py,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -d -r1.25 -r1.26
--- testSupport.py	6 Mar 2004 05:33:01 -0000	1.25
+++ testSupport.py	13 Dec 2004 06:01:58 -0000	1.26
@@ -522,7 +522,73 @@
 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
-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"""
+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""",
 ]
 
 TEST_KEYS_2048 = [