fclient-commit Mailing List for fclient (Page 19)
Status: Pre-Alpha
Brought to you by:
jurner
You can subscribe to this list here.
2007 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(23) |
Nov
(54) |
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2008 |
Jan
(17) |
Feb
(209) |
Mar
(63) |
Apr
(31) |
May
(7) |
Jun
(39) |
Jul
(390) |
Aug
(122) |
Sep
(6) |
Oct
|
Nov
|
Dec
|
From: <jU...@us...> - 2008-07-06 05:27:11
|
Revision: 512 http://fclient.svn.sourceforge.net/fclient/?rev=512&view=rev Author: jUrner Date: 2008-07-05 22:27:21 -0700 (Sat, 05 Jul 2008) Log Message: ----------- .... Added Paths: ----------- trunk/sandbox/fclient/ Copied: trunk/sandbox/fclient (from rev 78, trunk/fclient) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-06 05:25:42
|
Revision: 511 http://fclient.svn.sourceforge.net/fclient/?rev=511&view=rev Author: jUrner Date: 2008-07-05 22:25:52 -0700 (Sat, 05 Jul 2008) Log Message: ----------- .... Added Paths: ----------- trunk/fcp2/src/setup.py Added: trunk/fcp2/src/setup.py =================================================================== --- trunk/fcp2/src/setup.py (rev 0) +++ trunk/fcp2/src/setup.py 2008-07-06 05:25:52 UTC (rev 511) @@ -0,0 +1,48 @@ +"""a python wrapper for the freenet client protocol version 2 + +the package provides means to access client services a running freenet node provides. +main features are: automatic type conversions, access to node and peer configurations +and much more. + +the package is designed as a drop-in package that can be included in any project without the +need to install it to lib/site-packages. +""" + +from distutils.core import setup + +AUTHOR = 'Juergen Urner' +AUTHOR_EMAIL = 'jU...@ar...' +CLASSIFIERS = [ + 'Development Status :: 3 - Alpha', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: OS Independent', + 'Programming Language :: Python', + 'Topic :: Communications :: File Sharing', + ] +DOWNLOAD='' +NAME = 'fcp2' +URL = 'https://sourceforge.net/projects/fclient/' +VERSION = '0.1.0' + +MODULES = ['fcp2', ] +DATA = {} + + +if __name__ == '__main__': + setup( + author = AUTHOR, + author_email = AUTHOR_EMAIL, + classifiers=CLASSIFIERS, + description=__doc__.split('\n')[0], + download_url=DOWNLOAD, + long_description='\n'.join(__doc__.split('\n')[2:]), + name=NAME, + url=URL, + version=VERSION, + + license='MIT licence', + platforms=['Many', ], + py_modules=MODULES, + package_data = DATA + ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-06 05:24:37
|
Revision: 510 http://fclient.svn.sourceforge.net/fclient/?rev=510&view=rev Author: jUrner Date: 2008-07-05 22:24:47 -0700 (Sat, 05 Jul 2008) Log Message: ----------- .... Added Paths: ----------- trunk/fcp2/src/fcp2/test_fcp/test_types.py Added: trunk/fcp2/src/fcp2/test_fcp/test_types.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_types.py (rev 0) +++ trunk/fcp2/src/fcp2/test_fcp/test_types.py 2008-07-06 05:24:47 UTC (rev 510) @@ -0,0 +1,45 @@ +"""Unittests for fcp2.key.py""" + +import os, sys +import socket +import unittest + +#--> rel import hack +class _RelImportHack(object): + def __init__(self, n): + fpath = os.path.abspath(__file__) + for i in xrange(n): fpath = os.path.dirname(fpath) + sys.path.insert(0, fpath) + def __del__(self): sys.path.pop(0) +hack = _RelImportHack(3) + +import fcp2 + +del hack +#<-- rel import hack + +#**************************************************************************************** +# +#**************************************************************************************** +class Test_TypeByteAmount(unittest.TestCase): + pass + + +#********************************************************************************* +# +#********************************************************************************* +def suite(): + tests = ( + ) + + suite = unittest.TestSuite() + for test in tests: + suite.addTest(unittest.makeSuite(test)) + return suite + + +def test(): + unittest.TextTestRunner(verbosity=1).run(suite()) + +if __name__ == '__main__': + test() \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-06 05:18:15
|
Revision: 509 http://fclient.svn.sourceforge.net/fclient/?rev=509&view=rev Author: jUrner Date: 2008-07-05 22:18:23 -0700 (Sat, 05 Jul 2008) Log Message: ----------- this and that Modified Paths: -------------- trunk/web/download-fclient.html trunk/web/download-fcp2.html trunk/web/index.html trunk/web/intro.html trunk/web/more-fclient.html trunk/web/more-fcp2.html trunk/web/screenshots-fclient.html trunk/web/screenshots-fcp2.html Modified: trunk/web/download-fclient.html =================================================================== --- trunk/web/download-fclient.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/download-fclient.html 2008-07-06 05:18:23 UTC (rev 509) @@ -13,7 +13,7 @@ <div class="topic"> <br> <br> - Nothing to see here, move along + Not Yet </div> Modified: trunk/web/download-fcp2.html =================================================================== --- trunk/web/download-fcp2.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/download-fcp2.html 2008-07-06 05:18:23 UTC (rev 509) @@ -12,7 +12,7 @@ <div class="topic"> <br> <br> - Nothing to see here, move along + Not yet </div> <div class="bottom_padding"></div> Modified: trunk/web/index.html =================================================================== --- trunk/web/index.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/index.html 2008-07-06 05:18:23 UTC (rev 509) @@ -39,14 +39,17 @@ <tr> <td class="frame" width="100%" valign="bottom"> - [<a href="http://www.freenetproject.org">Freenet</a>] - <!-- [<a href="http://epydoc.sourceforge.net/">Epydoc</a>] --> + Links: + [<a href="http://sourceforge.net/projects/fclient">fclient sourceforge</a>] + [<a href="http://www.freenetproject.org">freenet</a>] + + </td> <td class="frame" valign="bottom"> - <a href="http://sourceforge.net/donate/index.php?group_id=206970"><img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project" /> </a> + <a href="http://sourceforge.net/donate/index.php?group_id=206970"><img src="http://images.sourceforge.net/images/project-support.jpg" width="88" height="32" border="0" alt="Support This Project"> </a> </td> <td class="frame" valign="bottom"> - <a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=206970&type=4" width="125" height="37" border="0" alt="SourceForge.net Logo" /></a> + <a href="http://sourceforge.net"><img src="http://sflogo.sourceforge.net/sflogo.php?group_id=206970&type=4" width="125" height="37" border="0" alt="SourceForge.net Logo"></a> </td> </tr> Modified: trunk/web/intro.html =================================================================== --- trunk/web/intro.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/intro.html 2008-07-06 05:18:23 UTC (rev 509) @@ -9,19 +9,19 @@ <div class="topic"> - <b>fclient:</b> Gui frontend for freenet written in Qt and python. The Gui is yet to come. + <b>fclient:</b> Gui frontend for freenet written in python and Qt. Not yet <br> - [<a href="more-fclient.html" target="mainFrame">..More</a>] [<a href="download-fclient.html" target="mainFrame">Download</a>] [<a href="screenshots-fclient.html" target="mainFrame">Screenshots</a>] + [<a href="more-fclient.html" target="mainFrame">..more</a>] [<a href="download-fclient.html" target="mainFrame">download</a>] [<a href="screenshots-fclient.html" target="mainFrame">screenshots</a>] <hr> </div> <div class="topic"> - <b>fcp2:</b> high level wrapper for the freenet client protocol version-2 written in python. Automatic + <b>fcp2:</b> high level wrapper for the freenet client protocol version 2 written in python. Automatic conversions from Fcp to python types, access to node and peer configurations and much more. <br> - [<a href="more-fcp2.html" target="mainFrame">..More</a>] [<a href="download-fcp2.html" target="mainFrame">Download</a>] [<a href="screenshots-fcp2.html" target="mainFrame">Screenshots</a>] + [<a href="more-fcp2.html" target="mainFrame">..more</a>] [<a href="download-fcp2.html" target="mainFrame">download</a>] [<a href="screenshots-fcp2.html" target="mainFrame">screenshots</a>] </div> Modified: trunk/web/more-fclient.html =================================================================== --- trunk/web/more-fclient.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/more-fclient.html 2008-07-06 05:18:23 UTC (rev 509) @@ -12,7 +12,7 @@ <div class="topic"> <br> <br> - Nothing to see here, move along + Not yet </div> Modified: trunk/web/more-fcp2.html =================================================================== --- trunk/web/more-fcp2.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/more-fcp2.html 2008-07-06 05:18:23 UTC (rev 509) @@ -21,9 +21,9 @@ Connect to the freenet node -<pre class="py_code"><span class="py_keyword">from</span> fcp2 <span class="py_keyword">import</span> Client +<pre class="py_code"><span class="py_keyword">import</span> fcp2 -client <span class="py_operator">=</span> Client() +client <span class="py_operator">=</span> fcp2.Client() nodeHello <span class="py_operator">=</span> client.connect() <span class="py_keyword">if</span> nodeHello <span class="py_keyword">is</span> <span class="py_bool">None</span>: <span class="py_keyword">pass</span> @@ -34,7 +34,8 @@ </pre> Request data associated to a freenet key -<pre class="py_code">myRequestIdentifier <span class="py_operator">=</span> client.getData(<span class="py_string2">'CHK@ABCDE.......'</span>) +<pre class="py_code">myKey <span class="py_operator">=</span> fcp2.Key(<span class="py_string2">'CHK@ABCDE.......'</span>) +myRequestIdentifier <span class="py_operator">=</span> client.getData(key) myRequest <span class="py_operator">=</span> client.getRequest(myIdentifier) client.run() <span class="py_keyword">print</span> myRequest.data @@ -51,17 +52,19 @@ client.events.RequestCompleted <span class="py_operator">+</span><span class="py_operator">=</span> handleSuccess client.events.RequestFailed <span class="py_operator">+</span><span class="py_operator">=</span> handleFailure -client.getData(<span class="py_string2">'CHK@ABCDE.......'</span>) +myKey <span class="py_operator">=</span> fcp2.Key(<span class="py_string2">'CHK@ABCDE.......'</span>) +client.getData(myKey) client.run() </pre> Instead of calling run() you may run the client step by step -<pre class="py_code">client.getData(<span class="py_string2">'CHK@ABCDE.......'</span>) +<pre class="py_code">myKey <span class="py_operator">=</span> fcp2.Key(<span class="py_string2">'CHK@ABCDE.......'</span>) +client.getData(<span class="py_string2">'CHK@ABCDE.......'</span>) <span class="py_keyword">for</span> i <span class="py_keyword">in</span> xrange(50): client.next() </pre> -You may disconnect event handlers aswel +You may disconnect event handlers as well <pre class="py_code">client.events.RequestCompleted <span class="py_operator">-</span><span class="py_operator">=</span> handleSuccess client.events.RequestFailed <span class="py_operator">-</span><span class="py_operator">=</span> handleFailure </pre> Modified: trunk/web/screenshots-fclient.html =================================================================== --- trunk/web/screenshots-fclient.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/screenshots-fclient.html 2008-07-06 05:18:23 UTC (rev 509) @@ -11,7 +11,7 @@ <br> <br> - Nothing to see here, move along + Not yet <div class="bottom_padding"></div> Modified: trunk/web/screenshots-fcp2.html =================================================================== --- trunk/web/screenshots-fcp2.html 2008-07-05 21:29:41 UTC (rev 508) +++ trunk/web/screenshots-fcp2.html 2008-07-06 05:18:23 UTC (rev 509) @@ -12,7 +12,7 @@ <div class="topic"> <br> <br> - Nothing to see here, move along + Not yet </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 21:29:31
|
Revision: 508 http://fclient.svn.sourceforge.net/fclient/?rev=508&view=rev Author: jUrner Date: 2008-07-05 14:29:41 -0700 (Sat, 05 Jul 2008) Log Message: ----------- added a few notes Modified Paths: -------------- trunk/fcp2/src/fcp2/consts.py Modified: trunk/fcp2/src/fcp2/consts.py =================================================================== --- trunk/fcp2/src/fcp2/consts.py 2008-07-05 21:20:24 UTC (rev 507) +++ trunk/fcp2/src/fcp2/consts.py 2008-07-05 21:29:41 UTC (rev 508) @@ -154,7 +154,7 @@ MaxArchiveRestartsExceeded = 8 MaxRecursionLevelExceeded = 9 NotAnArchve = 10 - TooManyMetastrings = 11 + TooManyMetastrings = 11 # too many components in key. try remove 1. for example a trailing slash BucketError = 12 DataNotFound = 13 RouteNotFound = 14 @@ -167,10 +167,10 @@ TooBig = 21 MetadataTooBig = 22 TooManyBlocks = 23 - NotEnoughMetastrings = 24 + NotEnoughMetastrings = 24 # not enoughcomponents in key. try adding 1. for example a trailing slash Canceled = 25 ArchiveRestart = 26 - PermanentRedirect = 27 + PermanentRedirect = 27 # 'USK@.../-1/' for example will always fail and return a key pointing to the current edition NotAllDataFound = 28 class ConstFilenameCollision(_BaseBitFlags): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 21:20:17
|
Revision: 507 http://fclient.svn.sourceforge.net/fclient/?rev=507&view=rev Author: jUrner Date: 2008-07-05 14:20:24 -0700 (Sat, 05 Jul 2008) Log Message: ----------- fix. in keys trailing slash seems to be significant Modified Paths: -------------- trunk/fcp2/src/fcp2/key.py trunk/fcp2/src/fcp2/test_fcp/test_key.py Modified: trunk/fcp2/src/fcp2/key.py =================================================================== --- trunk/fcp2/src/fcp2/key.py 2008-07-05 21:18:25 UTC (rev 506) +++ trunk/fcp2/src/fcp2/key.py 2008-07-05 21:20:24 UTC (rev 507) @@ -50,9 +50,11 @@ result = urlparse.urlsplit(string)[2] while result.startswith('/'): result = result[1: ] + hasTrailingSlash = False while result.endswith('/'): result = result[ :-1] - if result: + hasTrailingSlash = True + if result and hasTrailingSlash: result += '/' return result @@ -147,25 +149,27 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) - / ( - (?P<docName> (?: [^/]+?)) / - ((?P<tail>.+) /)? + / (?P<docName> (?: [^/]+?)) + (/ (?P<tail>.+?))? )? + (?P<pManifest> /)? ''' KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.CHK - def __init__(self, keyData=None, docName=None, tail=None): + def __init__(self, keyData=None, docName=None, tail=None, pManifest=False): """Creates a CHK key @param keyData: (str) key data or None @param docName: (str) docName to add to the key or None @param tail: (str) for containers, path to item in container or None + @param pManifest: (bool) if True, the key points to a manifest """ self.keyData = keyData self.docName = docName self.tail = tail + self.pManifest= pManifest def toString(self): if self.keyData is None: @@ -176,7 +180,10 @@ out.append(urllib.quote(self.docName)) if self.tail is not None: out.append(urllib.quote(self.tail)) - return posixpath.join(*out) + result = posixpath.join(*out) + if self.pManifest: + result += '/' + return result @classmethod def fromString(clss, string): @@ -185,7 +192,7 @@ result = clss.KeyPattern.match(key) if result is not None: d = result.groupdict() - return clss(d['keyData'], docName=d['docName'], tail=d['tail']) + return clss(d['keyData'], docName=d['docName'], tail=d['tail'], pManifest=bool(d['pManifest'])) @@ -197,27 +204,29 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) - / ( - (?: (?P<docName>[^/]+?)) - (?: (?P<edition>[\d]+)) / - ((?P<tail>.+) /)? + / (?: (?P<docName>[^/]+?)) - (?: (?P<edition>[\d]+)) + (/ (?P<tail>.+?))? )? + (?P<pManifest> /)? ''' KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.SSK - def __init__(self, keyData=None, docName=None, edition=0, tail=None): + def __init__(self, keyData=None, docName=None, edition=0, tail=None, pManifest=False): """Creates a SSK key @param keyData: (str) key data or None @param docName: (str) docName to add to the key or None @param edition: (int) desired edition @param tail: (str) for containers, path to item in container or None + @param pManifest: (bool) if True, the key points to a manifest """ self.docName = docName self.edition = edition self.keyData = keyData self.tail = tail + self.pManifest= pManifest def toString(self): if self.keyData is None: @@ -230,7 +239,10 @@ out.append(urllib.quote(self.docName + '-' + str(self.edition))) if self.tail is not None: out.append(urllib.quote(self.tail)) - return posixpath.join(*out) + result = posixpath.join(*out) + if self.pManifest: + result += '/' + return result @classmethod def fromString(clss, string): @@ -242,7 +254,7 @@ edition = d['edition'] if edition is not None: edition = int(edition) - return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail']) + return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail'], pManifest=bool(d['pManifest'])) @@ -250,7 +262,7 @@ class KeyKSK(_KeyBase): _key_pattern_ = ''' (?P<keyType>KSK@) - (?P<docName>[^/]+?) / + (?P<docName>[^/]+?) ''' KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.KSK @@ -288,29 +300,31 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) - / ( - (?P<docName>[^/]+?) / - (?P<edition>-?\d+) / - ((?P<tail>.+) /)? + / (?P<docName>[^/]+?) + / (?P<edition>-?\d+) + (/ (?P<tail>.+?))? )? + (?P<pManifest> /)? ''' KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.USK - def __init__(self, keyData=None, docName=None, edition=-1, tail=None): + def __init__(self, keyData=None, docName=None, edition=-1, tail=None, pManifest=False): """Creates a USK key @param keyData: (str) key data or None @param docName: (str) docName to add to the key or None @param edition: (int) desired edition @param tail: (str) for containers, path to item in container or None + @param pManifest: (bool) if True, the key points to a manifest """ self.edition = edition self.docName = docName self.keyData = keyData self.tail = tail + self.pManifest= pManifest def toString(self): if self.keyData is None: @@ -324,7 +338,11 @@ out.append(urllib.quote(str(self.edition))) if self.tail is not None: out.append(urllib.quote(self.tail)) - return posixpath.join(*out) + result = posixpath.join(*out) + if self.pManifest: + result += '/' + return result + @classmethod def fromString(clss, string, isQuoted=True): @@ -336,7 +354,7 @@ edition = d['edition'] if edition is not None: edition = int(edition) - return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail']) + return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail'], pManifest=bool(d['pManifest'])) Modified: trunk/fcp2/src/fcp2/test_fcp/test_key.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-05 21:18:25 UTC (rev 506) +++ trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-05 21:20:24 UTC (rev 507) @@ -29,17 +29,20 @@ #**************************************************************************************** class Test_normkey(unittest.TestCase): - def test_01_addSlash(self): + def test_01_slashIsSignificant(self): p = 'CHK@foo' + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo') + + p = 'CHK@foo/' self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') - + def test_02_stripHost(self): p = 'freenet:CHK@foo' - self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo') p = 'http:///CHK@foo' - self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') - + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo') + def test_stripSlashes(self): p = 'http://////CHK@foo///////' self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') @@ -59,21 +62,50 @@ self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, None) self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'CHK@' + DummyKeyData + '/' + myKey = fcp2.KeyCHK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + + p = 'CHK@' + DummyKeyData + '/foo' myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'CHK@' + DummyKeyData + '/foo/' + myKey = fcp2.KeyCHK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + + p = 'CHK@' + DummyKeyData + '/foo/bar/baz' myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + + p = 'CHK@' + DummyKeyData + '/foo/bar/baz/' + myKey = fcp2.KeyCHK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) def test_quote(self): @@ -99,24 +131,56 @@ self.assertEqual(myKey.docName, None) self.assertEqual(myKey.edition, None) self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'SSK@' + DummyKeyData + '/' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest,True) + self.assertEqual(myKey.toString(), p) + + p = 'SSK@' + DummyKeyData + '/foo-1' myKey = fcp2.KeySSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.edition, 1) self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'SSK@' + DummyKeyData + '/foo-1/' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + + p = 'SSK@' + DummyKeyData + '/foo-1/bar/baz' myKey = fcp2.KeySSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.edition, 1) self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'SSK@' + DummyKeyData + '/foo-1/bar/baz/' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + def test_quote(self): p = 'SSK@' + DummyKeyData + '/foo -1' @@ -166,24 +230,56 @@ self.assertEqual(myKey.docName, None) self.assertEqual(myKey.edition, None) self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'USK@' + DummyKeyData + '/' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + + p = 'USK@' + DummyKeyData + '/foo/1' myKey = fcp2.KeyUSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.edition, 1) self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'USK@' + DummyKeyData + '/foo/1/' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + + p = 'USK@' + DummyKeyData + '/foo/1/bar/baz' myKey = fcp2.KeyUSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.edition, 1) self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, False) self.assertEqual(myKey.toString(), p) + p = 'USK@' + DummyKeyData + '/foo/1/bar/baz/' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.pManifest, True) + self.assertEqual(myKey.toString(), p) + def test_edition(self): @@ -270,8 +366,8 @@ Test_SSK, Test_KSK, Test_USK, - Test_TypeKey, - Test_Key, + #Test_TypeKey, + #Test_Key, ) suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 21:18:16
|
Revision: 506 http://fclient.svn.sourceforge.net/fclient/?rev=506&view=rev Author: jUrner Date: 2008-07-05 14:18:25 -0700 (Sat, 05 Jul 2008) Log Message: ----------- a few notes Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-05 18:56:29 UTC (rev 505) +++ trunk/fcp2/src/fcp2/client.py 2008-07-05 21:18:25 UTC (rev 506) @@ -186,6 +186,7 @@ #------------------------------------------------------------------------------------------------------------------------------------------------- + # reminders to self #------------------------------------------------------------------------------------------------------------------------------------------------ # Key() @@ -193,8 +194,14 @@ # we do not allow passing strings as uris. putting a CHK gets in the way here. would have to add another # special case to handle 'CHK@myfilename' on input. so for uniformity reasons keys are enforced. #------------------------------------------------------------------------------------------------------------------------------------------------ +# clientGet('USK@.../whatever/-1') +# +# will trigger a FetchError(PermanentRedirect) with the highest available version as RedirectURI +# we don't handle this automatically, cos it could be the desired result. maybe implement a flag +# someday to handle this +# +#------------------------------------------------------------------------------------------------------------------------------------------------ - import os, sys import atexit This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 18:57:10
|
Revision: 505 http://fclient.svn.sourceforge.net/fclient/?rev=505&view=rev Author: jUrner Date: 2008-07-05 11:56:29 -0700 (Sat, 05 Jul 2008) Log Message: ----------- update min node build Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-05 12:45:13 UTC (rev 504) +++ trunk/fcp2/src/fcp2/client.py 2008-07-05 18:56:29 UTC (rev 505) @@ -253,7 +253,7 @@ """ ExpectedFcpVersion = 2.0 - ExpectedNodeBuild = 1107 + ExpectedNodeBuild = 1153 DefaultFcpHost = os.environ.get('FCP_HOST', '127.0.0.1') DefaultFcpPort = int(os.environ.get('FCP_PORT', '9481')) MaxSizeKeyInfo = 32768 @@ -277,9 +277,10 @@ """ self._connectionName = self.setConnectionName(connectionName) self._ddaTests = [] # currently running DDA tests (request0, ... requestN) - self.events = events.Events() self._nodeHelloMessage = None self._requests = {} # currently running requests (requestIdentifier --> request) + + self.events = events.Events() self.ioHandler = iohandler.IOHandler() for event in self.events: This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 12:45:04
|
Revision: 504 http://fclient.svn.sourceforge.net/fclient/?rev=504&view=rev Author: jUrner Date: 2008-07-05 05:45:13 -0700 (Sat, 05 Jul 2008) Log Message: ----------- symbol names where broken Modified Paths: -------------- trunk/fcp2/src/fcp2/types.py Modified: trunk/fcp2/src/fcp2/types.py =================================================================== --- trunk/fcp2/src/fcp2/types.py 2008-07-05 12:42:19 UTC (rev 503) +++ trunk/fcp2/src/fcp2/types.py 2008-07-05 12:45:13 UTC (rev 504) @@ -155,10 +155,10 @@ result = clss.NumberPattern.split(value) if len(result) == 3: foo, foundInt, tail = result - if tail in consts.TimeDeltaPostfix.MembersAll: + if tail in consts.ConstTimeDeltaPostfix.MembersAll: num = int(foundInt) return (num, tail) - return (-1, consts.TimeDeltaPostfix.Second) + return (-1, consts.ConstTimeDeltaPostfix.Second) class TypePercent(TypeFloat): pass class TypeUri(Type): pass @@ -199,13 +199,13 @@ result = clss.NumberPattern.split(value) if len(result) == 4: foo, foundFloat, foundInt, tail = result - if tail in consts.ByteAmountPostfix.MembersAll: + if tail in consts.ConstByteAmountPostfix.MembersAll: if foundFloat: num = float(foundFloat) else: num = int(foundInt) return (num, tail) - return (-1, consts.ByteAmountPostfix.Bytes) + return (-1, consts.ConstByteAmountPostfix.Bytes) class TypePercent(TypeFloat): pass class TypeUri(Type): pass This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 12:42:10
|
Revision: 503 http://fclient.svn.sourceforge.net/fclient/?rev=503&view=rev Author: jUrner Date: 2008-07-05 05:42:19 -0700 (Sat, 05 Jul 2008) Log Message: ----------- some more docs beautification some more message params Modified Paths: -------------- trunk/fcp2/src/fcp2/message.py Modified: trunk/fcp2/src/fcp2/message.py =================================================================== --- trunk/fcp2/src/fcp2/message.py 2008-07-05 12:03:40 UTC (rev 502) +++ trunk/fcp2/src/fcp2/message.py 2008-07-05 12:42:19 UTC (rev 503) @@ -179,12 +179,10 @@ pass - #TODO: - # 1. if one setter / getter fails no setter / getter result should assumed to be valid - # 2. log errors - # - # def _setPersistentParams(self, persistentData): + """updates message with persisten params + @param persistentData: (str) + """ params = persistentData.split(PersistentParamsSep) if len(params) > len(self._persistent_params_): raise ValueError('Too many parameters in persistentData') @@ -195,6 +193,9 @@ def _getPersistentParams(self): + """retrieves persisten params from the message + @return: (str) persistent params + """ out = [] for n, (getter, setter) in enumerate(self._persistent_params_): #TODO: check if PersistentParamsSep is in data returned @@ -203,6 +204,10 @@ def _restoreParams(self, params): + """updates the message with mesasage params + @param params: (dict) containing message params + @note: the parameter values will be converted to python types in the call + """ for paramName, paramValue in params.items(): paramType = self._param_types_.get(paramName, None) if paramType is not None: @@ -212,6 +217,8 @@ def _getDataLength(self): + """returns the length of the data section attatched to the message + @return: (int) length""" return 0 #******************************************************************************** @@ -549,8 +556,7 @@ _param_types_ = { } -######################################### -######################################### + class MsgConfigData(_MessageBase): name = consts.ConstMessage.ConfigData _additional_params_ = {} @@ -713,15 +719,13 @@ _param_types_ = { } -##################################### -##################################### + class MsgModifyConfig(_MessageBase): name = consts.ConstMessage.ModifyConfig _additional_params_ = {} _param_types_ = config._ConfigMessageParamTypes -##################################### -##################################### + class MsgModifyPeer(_MessageBase): name = consts.ConstMessage.ModifyPeer _additional_params_ = {} @@ -744,8 +748,7 @@ 'Global': types.TypeBool, } -################################### -################################### + class MsgNodeData(_MessageBase): name = consts.ConstMessage.NodeData _additional_params_ = {} @@ -870,8 +873,7 @@ 'Testnet': types.TypeBool, } -####################################### -####################################### + class MsgPeer(_MessageBase): name = consts.ConstMessage.Peer _additional_params_ = {} @@ -892,8 +894,7 @@ _param_types_ = { } -####################################### -####################################### + class MsgPersistentGet(_MessageBase): name = consts.ConstMessage.PersistentGet _additional_params_ = _AdditionalGetParams @@ -910,8 +911,7 @@ return False return True -####################################### -####################################### + class MsgPersistentPut(_MessageBase): name = consts.ConstMessage.PersistentPut _additional_params_ = _AdditionalPutParams @@ -1006,15 +1006,14 @@ 'URI': key.TypeKey, } -##################################### -###################################### -#!! not implemented -#TODO: has more params + class MsgPutSuccessful(_MessageBase): name = consts.ConstMessage.PutSuccessful _additional_params_ = {} _param_types_ = { + 'CompletionTime': types.TypeTime, 'Global': types.TypeBool, + 'StartupTime': types.TypeTime, 'URI': key.TypeKey, } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 12:03:30
|
Revision: 502 http://fclient.svn.sourceforge.net/fclient/?rev=502&view=rev Author: jUrner Date: 2008-07-05 05:03:40 -0700 (Sat, 05 Jul 2008) Log Message: ----------- remove some todos Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_client.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_client.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:51:22 UTC (rev 501) +++ trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 12:03:40 UTC (rev 502) @@ -2142,8 +2142,6 @@ #*********************************************************************************** # #*********************************************************************************** -#TODO: testDDAReadDenied_ReadDissallowed -#TODO: testDDAReadDenied class Test_DDA(BaseTestClient): def test_DDAWriteDenied(self): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:51:14
|
Revision: 501 http://fclient.svn.sourceforge.net/fclient/?rev=501&view=rev Author: jUrner Date: 2008-07-05 04:51:22 -0700 (Sat, 05 Jul 2008) Log Message: ----------- added DDA test cases Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_client.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_client.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:25:21 UTC (rev 500) +++ trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:51:22 UTC (rev 501) @@ -2143,8 +2143,7 @@ # #*********************************************************************************** #TODO: testDDAReadDenied_ReadDissallowed -#TODO: testDDAWriteDenied -#TODO: testDDAWriteDenied_WriteDisallowed +#TODO: testDDAReadDenied class Test_DDA(BaseTestClient): def test_DDAWriteDenied(self): @@ -2168,8 +2167,8 @@ Code=25, # DDADenied Identifier=myIdentifier, ExtraDescription='An error occured', - Fatal='false', - Global='false', + Fatal=False, + Global=False, ) # client should respond with a TestDDARequest @@ -2204,7 +2203,7 @@ self.sendResponseMessage( 'TestDDAComplete', Directory=DIR, - WriteDirectoryAllowed='true', + WriteDirectoryAllowed=True, ) # check if our tempfile was removed @@ -2219,20 +2218,241 @@ # respond with a PersistentGet self.sendResponseMessage( 'PersistentGet', - Started='false', + Started=False, **msg.params ) - requests = self.client.getRequests() - self.assertEqual(len(requests), 1) + self.assertEqual(len(requestsAll), 1) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + + def test_DDAWriteDenied_writeDisallowed(self): + self.connectClient() + + # request a file + myKey = fcp2.Key('KSK@foo') + myIdentifier = self.client.getFile( + myKey, + os.path.join(DIR, 'DDATest.txt') + ) + myRequest = self.client.getRequest(myIdentifier) + requestsAll = self.client.getRequests() + + # client schould send a ClientGet + self.assertHasNextMessage(fcp2.MsgClientGet) + + # respond with a ProtocolError + self.sendResponseMessage( + 'ProtocolError', + Code=25, # DDADenied + Identifier=myIdentifier, + ExtraDescription='An error occured', + Fatal=False, + Global=False, + ) + + # client should respond with a TestDDARequest + self.assertHasNextMessage( + fcp2.MsgTestDDARequest, + ('Directory', DIR), + ('WantWriteDirectory', True) + ) + + # respond with a TestDDAReply message + writeContent = 'blah' + fd, fpath = tempfile.mkstemp(dir=DIR) + os.close(fd) + self.sendResponseMessage( + 'TestDDAReply', + Directory=DIR, + WriteFilename=fpath, + ContentToWrite=writeContent, + ) + + # client should respond with a TestDDAResponse + self.assertHasNextMessage( + fcp2.MsgTestDDAResponse, + ('Directory', DIR) + ) + + # check if content was written + with open(fpath) as fp: + self.failUnless(fp.read() == writeContent) + + # respond with a TestDDAComplete message + self.sendResponseMessage( + 'TestDDAComplete', + Directory=DIR, + WriteDirectoryAllowed=False, + ) + + # check if our tempfile was removed + self.failIf(os.path.isfile(fpath)) + + # client schould trigger a RequestFailed event + self.assertHasNextEvent( + self.client.events.RequestFailed, + myRequest, + ) + + self.failIf(requestsAll) self.assertHasNextEvent(None) self.assertHasNextMessage(None) - del requestsAll[myIdentifier] + + def test_DDAReadDenied(self): + self.connectClient() + + # request a file + myKey = fcp2.Key('KSK@foo') + myIdentifier = self.client.putFile( + myKey, + os.path.join(DIR, 'DDATest.txt') + ) + myRequest = self.client.getRequest(myIdentifier) + requestsAll = self.client.getRequests() + + # client schould send a ClientGet + self.assertHasNextMessage(fcp2.MsgClientPut) + + # respond with a ProtocolError + self.sendResponseMessage( + 'ProtocolError', + Code=25, # DDADenied + Identifier=myIdentifier, + ExtraDescription='An error occured', + Fatal=False, + Global=False, + ) + + # client should respond with a TestDDARequest + self.assertHasNextMessage( + fcp2.MsgTestDDARequest, + ('Directory', DIR), + ('WantReadDirectory', True) + ) + + # + readContent = '123456789' + readFilename = os.path.join(DIR, 'DDATest.txt') + fp = open(readFilename, 'w') + self.tmpfiles.append(readFilename) + try: + fp.write(readContent) + finally: + fp.close() + + self.sendResponseMessage( + 'TestDDAReply', + Directory=DIR, + ReadFilename=readFilename, + ) + + # client should respond with a TestDDAResponse + self.assertHasNextMessage( + fcp2.MsgTestDDAResponse, + ('Directory', DIR), + ('ReadContent', readContent) + ) + + # respond with a TestDDAComplete message + self.sendResponseMessage( + 'TestDDAComplete', + Directory=DIR, + ReadDirectoryAllowed=True, + ) + + # client sahould send a new ClientGet + msg = self.assertHasNextMessage(fcp2.MsgClientPut) + + # no events should have been triggered upo to now + self.assertHasNextEvent(None) + + # respond with a PersistentGet + self.sendResponseMessage( + 'PersistentPut', + **msg.params + ) + + self.assertEqual(len(requestsAll), 1) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) + + + def test_DDAReadDenied_readDisallowed(self): + self.connectClient() + + # request a file + myKey = fcp2.Key('KSK@foo') + myIdentifier = self.client.putFile( + myKey, + os.path.join(DIR, 'DDATest.txt') + ) + myRequest = self.client.getRequest(myIdentifier) + requestsAll = self.client.getRequests() + + # client schould send a ClientGet + self.assertHasNextMessage(fcp2.MsgClientPut) + + # respond with a ProtocolError + self.sendResponseMessage( + 'ProtocolError', + Code=25, # DDADenied + Identifier=myIdentifier, + ExtraDescription='An error occured', + Fatal=False, + Global=False, + ) + + # client should respond with a TestDDARequest + self.assertHasNextMessage( + fcp2.MsgTestDDARequest, + ('Directory', DIR), + ('WantReadDirectory', True) + ) + + # + readContent = '123456789' + readFilename = os.path.join(DIR, 'DDATest.txt') + fp = open(readFilename, 'w') + self.tmpfiles.append(readFilename) + try: + fp.write(readContent) + finally: + fp.close() + + self.sendResponseMessage( + 'TestDDAReply', + Directory=DIR, + ReadFilename=readFilename, + ) + + # client should respond with a TestDDAResponse + self.assertHasNextMessage( + fcp2.MsgTestDDAResponse, + ('Directory', DIR), + ('ReadContent', readContent) + ) + + # respond with a TestDDAComplete message + self.sendResponseMessage( + 'TestDDAComplete', + Directory=DIR, + ReadDirectoryAllowed=False, + ) + + # client schould trigger a RequestFailed event + self.assertHasNextEvent( + self.client.events.RequestFailed, + myRequest, + ) + self.failIf(requestsAll) + self.assertHasNextEvent(None) + self.assertHasNextMessage(None) - #*********************************************************************************** # #*********************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:25:13
|
Revision: 500 http://fclient.svn.sourceforge.net/fclient/?rev=500&view=rev Author: jUrner Date: 2008-07-05 04:25:21 -0700 (Sat, 05 Jul 2008) Log Message: ----------- beautify Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_client.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_client.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:24:52 UTC (rev 499) +++ trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:25:21 UTC (rev 500) @@ -2179,13 +2179,6 @@ ('WantWriteDirectory', True) ) - #msg = self.nextMessage() - #self.failIf(msg is None) - #self.assertEqual(msg.name, fcp2.MsgTestDDARequest) - ##self.assertEqual(msg['Directory'], DIR) - #self.failIf(not msg['WantWriteDirectory']) - - # respond with a TestDDAReply message writeContent = 'blah' fd, fpath = tempfile.mkstemp(dir=DIR) @@ -2240,10 +2233,6 @@ self.failIf(requestsAll) - #def testDDAReadDenied(self): - - # pass - #*********************************************************************************** # #*********************************************************************************** This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:24:43
|
Revision: 499 http://fclient.svn.sourceforge.net/fclient/?rev=499&view=rev Author: jUrner Date: 2008-07-05 04:24:52 -0700 (Sat, 05 Jul 2008) Log Message: ----------- beautify Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_message.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_message.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_message.py 2008-07-05 11:24:24 UTC (rev 498) +++ trunk/fcp2/src/fcp2/test_fcp/test_message.py 2008-07-05 11:24:52 UTC (rev 499) @@ -13,16 +13,14 @@ def __del__(self): sys.path.pop(0) hack = _RelImportHack(3) -from fcp2.client import Client -from fcp2 import consts +import fcp2 - del hack #<-- rel import hack #**************************************************************************************** # #**************************************************************************************** -class TestMessageObject(unittest.TestCase): +class Test_Message(unittest.TestCase): pass @@ -32,7 +30,7 @@ #********************************************************************************* def suite(): tests = ( - TestMessageObject, + Test_Message, ) suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:24:15
|
Revision: 498 http://fclient.svn.sourceforge.net/fclient/?rev=498&view=rev Author: jUrner Date: 2008-07-05 04:24:24 -0700 (Sat, 05 Jul 2008) Log Message: ----------- added some tests for clientGet/Put Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_client.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_client.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:19:36 UTC (rev 497) +++ trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-05 11:24:24 UTC (rev 498) @@ -30,7 +30,7 @@ ##TestAgainstNode = 0 # don't know how to test against node. Do not touch this! # for testing some valid key data -DummyKeyData = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA' +DummyKeyData = 'aaa,bbb,ccc' #*********************************************************************************** # #*********************************************************************************** @@ -639,7 +639,7 @@ #*********************************************************************************** # #*********************************************************************************** -# TODO: no idea how t test this +# TODO: no idea how to test this class Test_startNode(BaseTestClient): pass @@ -859,10 +859,14 @@ self.assertHasNextEvent(None) self.assertHasNextMessage(None) self.failUnless(self.ioOpen()) - #*********************************************************************************** # #*********************************************************************************** +#TODO: not tested +class Test_clientGet(BaseTestClient): pass +#*********************************************************************************** +# +#*********************************************************************************** class Test_getData(BaseTestClient): def test_100_request_registered(self): @@ -1455,428 +1459,24 @@ #*********************************************************************************** # #*********************************************************************************** -class Test_clientGet(BaseTestClient): +class Test_clientPut(BaseTestClient): - def test_2000_ClientGetRegistered(self): - - # request a arbitrary file - myIdentifier = self.client.getData( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() + def test_keyTailIsDisallowed(self): + self.connectClient() - self.assertHasNextMessage(fcp2.MsgClientGet) - self.assertHasNextEvent(None) - - self.failUnless(myIdentifier in requestsAll) - self.assertEqual(myIdentifier, myRequest['Identifier']) - self.assertEqual(myRequest['RequestStatus'], fcp2.ConstRequestStatus.Null) + # key.tail is not allowed in all put actions + myKey = fcp2.KeyCHK(keyData=DummyKeyData, tail='foo') + self.assertRaises(ValueError, self.client.clientPut, fcp2.ConstRequestType.PutData, myKey, data='foo') - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) + myKey = fcp2.KeySSK(keyData=DummyKeyData, tail='foo') + self.assertRaises(ValueError, self.client.clientPut, fcp2.ConstRequestType.PutData, myKey, data='foo') - del requestsAll[myIdentifier] - self.failIf(requestsAll) - - + myKey = fcp2.KeyUSK(keyData=DummyKeyData, tail='foo') + self.assertRaises(ValueError, self.client.clientPut, fcp2.ConstRequestType.PutData, myKey, data='foo') - def test_2001_GetData_Success(self): - - # request a arbitrary file - myIdentifier = self.client.getData( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # simulate a progress - self.sendResponseMessage( - 'SimpleProgress', - Identifier=myIdentifier, - Total=10, - Required=8, - Failed=0, - FatallyFailed=0, - FinalizedTotal='true', - Succeeded=1, - ) - self.assertHasNextEvent( - self.client.events.RequestProgress, - ) - - # finalize request - data = 'foo' - params = { - 'Identifier': myIdentifier, - 'Global': 'false', - 'DataLength': len(data), - 'Metadata.ContentType': 'any', - } - self.sendResponseMessage( - 'DataFound', - **params - ) - # we don't expect an event here.... - self.assertHasNextEvent(None) - - self.sendResponseMessage( - 'AllData', - data=data, - Identifier=myIdentifier, - Global='false', - DataLength=len(data), - ) - - # client should complete and remove the request - self.assertHasNextEvent( - self.client.events.RequestCompleted, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Success | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - data=data - ) - self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - - - # cheat a bit to test peristence == Forever (client should not remove request) - requestsAll[myIdentifier] =myRequest - myRequest['Persistence'] = fcp2.Persistence.Forever - myRequest['RequestStatus'] &= ~(fcp2.ConstRequestStatus.Success | - fcp2.ConstRequestStatus.Completed | - fcp2.ConstRequestStatus.RemovedFromQueue - ) - self.sendResponseMessage( - 'AllData', - data=data, - Identifier=myIdentifier, - Global='false', - DataLength=len(data), - ) - - # client should complete but not remove the request - self.assertHasNextEvent( - self.client.events.RequestCompleted, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Success | fcp2.ConstRequestStatus.Completed), - data=data - ) - self.failUnless(myIdentifier in requestsAll) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - del requestsAll[myIdentifier] - self.failIf(requestsAll) - - - def test_2002_GetData_Failure(self): - - # request a arbitrary file - myIdentifier = self.client.getData( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - self.sendResponseMessage( - 'GetFailed', - Code='28', # All data not found - Identifier=myIdentifier, - Global='false', - # blah.. more here - ) - - # client should complete request and remove it - self.assertHasNextEvent( - self.client.events.RequestFailed, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Error | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - #return - - # cheat a bit to test peristence == Forever (client should not remove request) - - requestsAll[myIdentifier] =myRequest - myRequest['Persistence'] = fcp2.Persistence.Forever - myRequest['RequestStatus'] &= ~(fcp2.ConstRequestStatus.Error | - fcp2.ConstRequestStatus.Completed | - fcp2.ConstRequestStatus.RemovedFromQueue - ) - self.sendResponseMessage( - 'GetFailed', - Code='28', # All data not found - Identifier=myIdentifier, - Global='false', - # blah.. more here - ) - - # client should complete but not remove the request - self.assertHasNextEvent( - self.client.events.RequestFailed, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Error | fcp2.ConstRequestStatus.Completed), - ) - self.failUnless(myIdentifier in requestsAll) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - del requestsAll[myIdentifier] - self.failIf(requestsAll) - - - def test_2003_GetFile_Success(self): - - # request a arbitrary file - myIdentifier = self.client.getFile( - 'arbitrary-uri', - 'arbitryry.txt' - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - data = 'foo' - params = { - 'Identifier': myIdentifier, - 'Global': 'false', - 'DataLength': 123456, - 'Metadata.ContentType': 'any', - } - self.sendResponseMessage( - 'DataFound', - **params - ) - self.assertHasNextEvent( - self.client.events.RequestCompleted, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Success | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - self.failIf(requestsAll) - - - def test_2004_GetFile_Failure(self): - - # request a arbitrary file - myIdentifier = self.client.getFile( - 'arbitrary-uri', - 'arbitryry.txt' - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - self.sendResponseMessage( - 'GetFailed', - Code='28', # All data not found - Identifier=myIdentifier, - Global='false', - # blah.. more here - ) - - self.assertHasNextEvent( - self.client.events.RequestFailed, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Error | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.failIf(myIdentifier in requestsAll) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - self.failIf(requestsAll) - - - def test_2005_GetKeyInfo_Success(self): - - # request a arbitrary uri - myIdentifier = self.client.getKeyInfo( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - data = 'foo' - params = { - 'Identifier': myIdentifier, - 'Global': 'false', - 'DataLength': 123456, - 'Metadata.ContentType': 'any', - } - self.sendResponseMessage( - 'DataFound', - **params - ) - self.assertHasNextEvent( - self.client.events.RequestCompleted, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Success | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.failIf(myIdentifier in requestsAll) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - self.failIf(requestsAll) - - - def test_2006_GetKeyInfo_TooBig(self): - - # test specdial case where ProtocolError.TooBig is handled as success - # request a arbitrary uri - myIdentifier = self.client.getKeyInfo( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - self.sendResponseMessage( - 'GetFailed', - Code='21', # Too big - Identifier=myIdentifier, - Global='false', - # blah.. more here - ) - self.assertHasNextEvent( - self.client.events.RequestCompleted, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Success | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - self.failIf(requestsAll) - - - - def test_2007_GetKeyInfo_Failure(self): - - # request a arbitrary file - myIdentifier = self.client.getKeyInfo( - 'arbitrary-uri', - ) - myRequest = self.client.getRequest(myIdentifier) - requestsAll = self.client.getRequests() - - self.assertHasNextMessage(fcp2.MsgClientGet) - - # respond to the file request - self.sendResponseMessage( - 'PersistentGet', - Started='false', - **myRequest.params - ) - - # finalize request - self.sendResponseMessage( - 'GetFailed', - Code='28', # All data not found - Identifier=myIdentifier, - Global='false', - # blah.. more here - ) - self.assertHasNextEvent( - self.client.events.RequestFailed, - fcp2.MsgClientGet, - ('RequestStatus', fcp2.ConstRequestStatus.Error | - fcp2.ConstRequestStatus.RemovedFromQueue | - fcp2.ConstRequestStatus.Completed - ), - ) - self.failUnless(myRequest['RequestStatus'] & fcp2.ConstRequestStatus.Completed) - self.assertHasNextEvent(None) - self.assertHasNextMessage(None) - - self.failIf(requestsAll) - #*********************************************************************************** # #*********************************************************************************** -#TODO: check if TargetFilename handling is ok for CHKs class Test_putData(BaseTestClient): def test_putData_Success(self): @@ -1946,6 +1546,8 @@ self.assertHasNextEvent(None) self.assertHasNextMessage(None) self.failIf(requestsAll) + + #*********************************************************************************** # #*********************************************************************************** @@ -3162,10 +2764,12 @@ Test_getConfig, Test_modifyConfig, + Test_clientGet, Test_getData, Test_getFile, Test_getKeyInfo, + Test_clientPut, Test_putData, Test_putDir, Test_putFile, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:19:31
|
Revision: 497 http://fclient.svn.sourceforge.net/fclient/?rev=497&view=rev Author: jUrner Date: 2008-07-05 04:19:36 -0700 (Sat, 05 Jul 2008) Log Message: ----------- user data is optional Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-05 11:17:44 UTC (rev 496) +++ trunk/fcp2/src/fcp2/client.py 2008-07-05 11:19:36 UTC (rev 497) @@ -1507,8 +1507,8 @@ def clientPut(self, requestType, uri, - userData, - persistentUserData, + userData=None, + persistentUserData=None, data=None, items=None, **msgParams @@ -1517,8 +1517,8 @@ @param requestType: (L{consts.ConstRequestType}). Can be PutData, PutDir or PutMultiple @param uri: (str) key or Uri @param data: (str) for L{consts.ConstRequestType.PutData} data to upload or None - @param persistentUserData: (str) persistent data to be assosiated to the request - @param userData: (any) any data to be associated to the request at runtime + @param persistentUserData: (str) persistent data to be assosiated to the requestor None + @param userData: (any) any data to be associated to the request at runtime or None @param items: for L{consts.ConstRequestType.PutMultiple}, items to upload @param msgParams: (dict) Fcp parameters to pass along with the message This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 11:17:36
|
Revision: 496 http://fclient.svn.sourceforge.net/fclient/?rev=496&view=rev Author: jUrner Date: 2008-07-05 04:17:44 -0700 (Sat, 05 Jul 2008) Log Message: ----------- fixed typo Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-05 10:46:19 UTC (rev 495) +++ trunk/fcp2/src/fcp2/client.py 2008-07-05 11:17:44 UTC (rev 496) @@ -1557,15 +1557,15 @@ # if uri.KeyType == consts.ConstKeyType.CHK: if uri.tail is not None: - raise valueError('no tail allowed') + raise ValueError('no tail allowed') if uri.filename is not None: msg['TargetFilename'] = uri.docName elif uri.KeyType == consts.ConstKeyType.SSK: if uri.tail is not None: - raise valueError('no tail allowed') + raise ValueError('no tail allowed') elif uri.KeyType == consts.ConstKeyType.USK: if uri.tail is not None: - raise valueError('no tail allowed') + raise ValueError('no tail allowed') # add params for param, value in msgParams.items(): This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 10:46:11
|
Revision: 495 http://fclient.svn.sourceforge.net/fclient/?rev=495&view=rev Author: jUrner Date: 2008-07-05 03:46:19 -0700 (Sat, 05 Jul 2008) Log Message: ----------- fix. complain that on ClientPut key.tail is disallowed Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-05 10:45:22 UTC (rev 494) +++ trunk/fcp2/src/fcp2/client.py 2008-07-05 10:46:19 UTC (rev 495) @@ -1554,10 +1554,20 @@ raise ValueError('Unsupported request type') msg = msgClass(URI=uri) - # add params + # if uri.KeyType == consts.ConstKeyType.CHK: + if uri.tail is not None: + raise valueError('no tail allowed') if uri.filename is not None: msg['TargetFilename'] = uri.docName + elif uri.KeyType == consts.ConstKeyType.SSK: + if uri.tail is not None: + raise valueError('no tail allowed') + elif uri.KeyType == consts.ConstKeyType.USK: + if uri.tail is not None: + raise valueError('no tail allowed') + + # add params for param, value in msgParams.items(): if value is not None: msg[param] = value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 10:45:20
|
Revision: 494 http://fclient.svn.sourceforge.net/fclient/?rev=494&view=rev Author: jUrner Date: 2008-07-05 03:45:22 -0700 (Sat, 05 Jul 2008) Log Message: ----------- added many unittests Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_key.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_key.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-05 10:44:51 UTC (rev 493) +++ trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-05 10:45:22 UTC (rev 494) @@ -22,97 +22,256 @@ # #**************************************************************************************** # for testing some valid key data -DummyKeyData = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA' +DummyKeyData = 'abc,abc,AAA' #**************************************************************************************** # #**************************************************************************************** +class Test_normkey(unittest.TestCase): + + def test_01_addSlash(self): + p = 'CHK@foo' + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') + + def test_02_stripHost(self): + p = 'freenet:CHK@foo' + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') + + p = 'http:///CHK@foo' + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') + + def test_stripSlashes(self): + p = 'http://////CHK@foo///////' + self.assertEqual(fcp2.keyNormkey(p), 'CHK@foo/') + + + class Test_CHK(unittest.TestCase): def test_fromString(self): - p = 'CHK@' + DummyKeyData + '/' + p = 'CHK@' myKey = fcp2.KeyCHK.fromString(p) + self.failUnless(myKey is None) + + p = 'CHK@' + DummyKeyData + myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) - self.failUnless(myKey.docName is None) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.tail, None) self.assertEqual(myKey.toString(), p) - p = 'CHK@' + DummyKeyData + '/foo/' + p = 'CHK@' + DummyKeyData + '/foo' myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.tail, None) self.assertEqual(myKey.toString(), p) - - p = 'CHK@' + + p = 'CHK@' + DummyKeyData + '/foo/bar/baz' myKey = fcp2.KeyCHK.fromString(p) - self.failUnless(myKey is None) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.tail, 'bar/baz') + self.assertEqual(myKey.toString(), p) + + def test_quote(self): + p = 'CHK@' + DummyKeyData + '/foo ' + myKey = fcp2.KeyCHK.fromString(p) + myKey = myKey.toString() + self.assertEqual(myKey, 'CHK@' + DummyKeyData + '/foo%20') + + - def test_toString(self): - pass - class Test_SSK(unittest.TestCase): def test_fromString(self): - p = 'SSK@' + DummyKeyData + '/foo-1/' + p = 'SSK@' myKey = fcp2.KeySSK.fromString(p) + self.failUnless(myKey is None) + + p = 'SSK@' + DummyKeyData + myKey = fcp2.KeySSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.toString(), p) + + p = 'SSK@' + DummyKeyData + '/foo-1' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, None) self.assertEqual(myKey.toString(), p) - - p = 'SSK@' + DummyKeyData + '/' + p = 'SSK@' + DummyKeyData + '/foo-1/bar/baz' myKey = fcp2.KeySSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) - self.assertEqual(myKey.docName, None) - self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, 'bar/baz') self.assertEqual(myKey.toString(), p) + + def test_quote(self): + p = 'SSK@' + DummyKeyData + '/foo -1' + myKey = fcp2.KeySSK.fromString(p) + myKey = myKey.toString() + self.assertEqual(myKey, 'SSK@' + DummyKeyData + '/foo%20-1') - def test_toString(self): - pass +class Test_KSK(unittest.TestCase): + + def test_fromString(self): + + p = 'KSK@' + myKey = fcp2.KeyKSK.fromString(p) + self.failUnless(myKey is None) + + p = 'KSK@' + 'anydatahere' + myKey = fcp2.KeyKSK.fromString(p) + self.assertEqual(myKey.docName, 'anydatahere') + self.assertEqual(myKey.toString(), p) + + # KSKs may not contain slashes + p = 'KSK@' + 'any/data/here' + myKey = fcp2.KeyKSK.fromString(p) + self.failUnless(myKey is None) + + def test_quote(self): + p = 'KSK@' + 'foo ' + myKey = fcp2.KeyKSK.fromString(p) + myKey = myKey.toString() + self.assertEqual(myKey, 'KSK@' + 'foo%20') + + class Test_USK(unittest.TestCase): def test_fromString(self): - p = 'USK@' + DummyKeyData + '/foo/0/' + p = 'USK@' myKey = fcp2.KeyUSK.fromString(p) + self.failUnless(myKey is None) + + p = 'USK@' + DummyKeyData + myKey = fcp2.KeyUSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.toString(), p) + + p = 'USK@' + DummyKeyData + '/foo/1' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') - self.assertEqual(myKey.edition, 0) + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, None) self.assertEqual(myKey.toString(), p) - - p = 'USK@' + DummyKeyData + '/foo/-2/' + p = 'USK@' + DummyKeyData + '/foo/1/bar/baz' myKey = fcp2.KeyUSK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) self.assertEqual(myKey.docName, 'foo') - self.assertEqual(myKey.edition, -2) + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, 'bar/baz') self.assertEqual(myKey.toString(), p) + + def test_edition(self): - p = 'USK@' + p = 'USK@' + DummyKeyData + '/foo/1' myKey = fcp2.KeyUSK.fromString(p) - self.failUnless(myKey is None) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.toString(), p) + p = 'USK@' + DummyKeyData + '/foo/-1' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, -1) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.toString(), p) + + p = 'USK@' + DummyKeyData + '/foo/-100' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, -100) + self.assertEqual(myKey.tail, None) + self.assertEqual(myKey.toString(), p) - def test_toString(self): - pass + def test_quote(self): + p = 'USK@' + DummyKeyData + '/foo /1' + myKey = fcp2.KeyUSK.fromString(p) + myKey = myKey.toString() + self.assertEqual(myKey, 'USK@' + DummyKeyData + '/foo%20/1') + + + + +class Test_TypeKey(unittest.TestCase): + + def test_fcpToPython(self): + + p = 'invalidkey' + self.assertRaises(ValueError, fcp2.TypeKey.fcpToPython, p) + + p = 'CHK@' + DummyKeyData + myKey = fcp2.TypeKey.fcpToPython(p) + self.assertEqual(myKey.KeyType, fcp2.ConstKeyType.CHK) + + p = 'SSK@' + DummyKeyData + myKey = fcp2.TypeKey.fcpToPython(p) + self.assertEqual(myKey.KeyType, fcp2.ConstKeyType.SSK) + + p = 'USK@' + DummyKeyData + myKey = fcp2.TypeKey.fcpToPython(p) + self.assertEqual(myKey.KeyType, fcp2.ConstKeyType.USK) + + p = 'KSK@' + DummyKeyData + myKey = fcp2.TypeKey.fcpToPython(p) + self.assertEqual(myKey.KeyType, fcp2.ConstKeyType.KSK) + + # only a shallow test here to see if the call succeeds + def test_pythonToFcp(self): + + myKey = fcp2.KeyCHK() + self.assertEqual(fcp2.TypeKey.pythonToFcp(myKey), 'CHK@') + + + +class Test_Key(unittest.TestCase): + + # only a shallow test here to see if the call succeeds + def test(self): + myKey = fcp2.Key('KSK@foo') + self.assertEqual(myKey.KeyType, fcp2.ConstKeyType.KSK) + + #********************************************************************************* # #********************************************************************************* def suite(): tests = ( + Test_normkey, Test_CHK, Test_SSK, + Test_KSK, Test_USK, + Test_TypeKey, + Test_Key, ) suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-05 10:44:43
|
Revision: 493 http://fclient.svn.sourceforge.net/fclient/?rev=493&view=rev Author: jUrner Date: 2008-07-05 03:44:51 -0700 (Sat, 05 Jul 2008) Log Message: ----------- another rework of the key module Modified Paths: -------------- trunk/fcp2/src/fcp2/key.py Modified: trunk/fcp2/src/fcp2/key.py =================================================================== --- trunk/fcp2/src/fcp2/key.py 2008-07-04 08:27:51 UTC (rev 492) +++ trunk/fcp2/src/fcp2/key.py 2008-07-05 10:44:51 UTC (rev 493) @@ -2,7 +2,9 @@ import os, sys import base64 +import posixpath import re +import urllib import urlparse #--> rel import hack @@ -24,9 +26,6 @@ _ReMatchExact = '\A%s\Z' KeyTypesAll = {} -# save url chars as defined in [freenet/src/support/URLEncoder.java] -SafeURLChars = '*-_./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz' - #************************************************************************************** # freenet base64 for keys #************************************************************************************** @@ -46,14 +45,15 @@ return base64.b64decode(string, altchars) -def stripKey(key): - """Strips all uri stuff from a key - @param key: (str) key to strip - @return: (str) key - """ - result = urlparse.urlsplit(key)[2] - if result.startswith('/'): - result = result[1:] +def keyNormkey(string): + """""" + result = urlparse.urlsplit(string)[2] + while result.startswith('/'): + result = result[1: ] + while result.endswith('/'): + result = result[ :-1] + if result: + result += '/' return result #************************************************************************************** @@ -65,40 +65,19 @@ # encode: - for + and ~ for / see: [freenet/support/base64.java] # #************************************************************************************** -#TODO: too bad, can not move this to types.py ...cross import -class TypeKey(object): - """key type for type conversions +class TypeKey(type): + """Metaclass for freenet keys""" - >>> key = TypeKey.fcpToPython('CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo') - >>> key.toString() - 'CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/' - >>> key = TypeKey.fcpToPython('CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/') - >>> key.toString() - 'CHK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/' - - >>> key = TypeKey.fcpToPython('SSK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo-1') - >>> key.toString() - 'SSK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo-1/' - >>> key = TypeKey.fcpToPython('SSK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo-1/') - >>> key.toString() - 'SSK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo-1/' - - >>> key = TypeKey.fcpToPython('USK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/0') - >>> key.toString() - 'USK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/0/' - >>> key = TypeKey.fcpToPython('USK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/0/') - >>> key.toString() - 'USK@aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa,AAAAAAA/foo/0/' - - >>> key = TypeKey.fcpToPython('KSK@abcde') - >>> key.toString() - 'KSK@abcde/' - >>> key = TypeKey.fcpToPython('KSK@abcde/') - >>> key.toString() - 'KSK@abcde/' - - """ - + def __new__(klass, name, bases, kws): + """Registers a key type to L{KeyTypesAll} + @note: if KeyType of the the key type is None it will not get registered + """ + + newClass = type.__new__(klass, name, bases, kws) + if newClass.KeyType is not None: + KeyTypesAll[newClass.KeyType] = newClass + return newClass + @classmethod def fcpToPython(clss, string): """converts a fcp key to a python key @@ -107,9 +86,8 @@ @raise ValueError: if the string can not be converted @note: use this method to convert an arbirary key to the corrosponding python key object """ - key = stripKey(string) for clssKeyType in KeyTypesAll.values(): - result = clssKeyType.fromString(key) + result = clssKeyType.fromString(string) if result is not None: return result raise ValueError('Invalid key: %s' % string) @@ -120,24 +98,10 @@ @return: (str) fcp key """ return key.toString() - -#**************************************************************************************** -# -#*************************************************************************************** -class _KeyMeta(type): - """Metaclass for freenet keys""" - - def __new__(klass, name, bases, kws): - """Registers a key type to L{KeyTypesAll} - @note: if KeyType of the the key type is None it will not get registered - """ - - newClass = type.__new__(klass, name, bases, kws) - if newClass.KeyType is not None: - KeyTypesAll[newClass.KeyType] = newClass - return newClass - +#************************************************************************************** +# +#************************************************************************************** def Key(string): """creates a key object from a string @return: (L{_KeyBase}) @@ -151,7 +115,7 @@ """Base class for freenet keys """ - __metaclass__ = _KeyMeta + __metaclass__ = TypeKey KeyType = None def __eq__(self, other): @@ -161,8 +125,10 @@ return self.pytoString() != other.toString() @classmethod - def fromString(clss, string): + def fromString(clss, string, isQuoted=True): """should create a key object from a string + @param string: + @param isQuoted: (bool) if True, the string is assumed to be already quoted """ raise NotImplementedError() @@ -170,6 +136,7 @@ """should return the key as string""" raise NotImplementedError() + class KeyCHK(_KeyBase): """""" @@ -180,36 +147,46 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) - (?: / (?P<docName>[^/]+?)? (?: /)?)? + / + ( + (?P<docName> (?: [^/]+?)) / + ((?P<tail>.+) /)? + )? ''' + KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.CHK - KeyPattern = re.compile(_key_pattern_, re.I | re.X) - ExactKeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) - - def __init__(self, keyData=None, docName=None): + + def __init__(self, keyData=None, docName=None, tail=None): """Creates a CHK key @param keyData: (str) key data or None @param docName: (str) docName to add to the key or None + @param tail: (str) for containers, path to item in container or None """ self.keyData = keyData self.docName = docName + self.tail = tail def toString(self): - out = self.KeyType - if self.keyData is not None: - out += self.keyData + '/' + if self.keyData is None: + out = [self.KeyType, ] + else: + out = [self.KeyType + self.keyData, ] if self.docName is not None: - out += self.docName + '/' - return out + out.append(urllib.quote(self.docName)) + if self.tail is not None: + out.append(urllib.quote(self.tail)) + return posixpath.join(*out) @classmethod def fromString(clss, string): - result = clss.ExactKeyPattern.match(stripKey(string)) + key = keyNormkey(string) + key = urllib.unquote(key) + result = clss.KeyPattern.match(key) if result is not None: d = result.groupdict() - key = clss(d['keyData'], docName=d['docName']) - return key + return clss(d['keyData'], docName=d['docName'], tail=d['tail']) + class KeySSK(_KeyBase): @@ -220,73 +197,89 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) + / ( - (?: / (?P<docName>[^/]+?)) - - - (?: (?P<edition>[\d]+)) + (?: (?P<docName>[^/]+?)) - (?: (?P<edition>[\d]+)) / + ((?P<tail>.+) /)? )? - (?: /)? ''' + KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.SSK - KeyPattern = re.compile(_key_pattern_, re.I | re.X) - ExactKeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) + + def __init__(self, keyData=None, docName=None, edition=0, tail=None): + """Creates a SSK key - def __init__(self, keyData, docName=None, edition=0): + @param keyData: (str) key data or None + @param docName: (str) docName to add to the key or None + @param edition: (int) desired edition + @param tail: (str) for containers, path to item in container or None + """ self.docName = docName self.edition = edition self.keyData = keyData + self.tail = tail def toString(self): - out = self.KeyType - if self.keyData is not None: - out += self.keyData + '/' + if self.keyData is None: + out = [self.KeyType, ] + else: + out = [self.KeyType + self.keyData, ] if self.docName is not None: if self.edition is None: raise ValueError('no edition number specified') - out += self.docName + '-' + str(self.edition) + '/' - return out - + out.append(urllib.quote(self.docName + '-' + str(self.edition))) + if self.tail is not None: + out.append(urllib.quote(self.tail)) + return posixpath.join(*out) + @classmethod def fromString(clss, string): - result = clss.ExactKeyPattern.match(stripKey(string)) + key = keyNormkey(string) + key = urllib.unquote(key) + result = clss.KeyPattern.match(key) if result is not None: d = result.groupdict() edition = d['edition'] if edition is not None: edition = int(edition) - return clss(d['keyData'], d['docName'], edition=edition) + return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail']) + + - - +#TODO: current impl is to not allow slashes in KSKs. have to check if the node enforces this class KeyKSK(_KeyBase): _key_pattern_ = ''' (?P<keyType>KSK@) - (?P<docName>[^/]+?) - (?: /)? + (?P<docName>[^/]+?) / ''' + KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.KSK - KeyPattern = re.compile(_key_pattern_, re.I | re.X) - ExactKeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) + - def __init__(self, docName): + """Creates a KSK key + + @param docName: (str) docName to add to the key or None + """ self.docName = docName def toString(self): - out = self.KeyType - if self.docName is not None: - out += self.docName + '/' - return out + if self.docName is None: + return self.KeyType + return self.KeyType + urllib.quote(self.docName) + @classmethod - def fromString(clss, string): - result = clss.ExactKeyPattern.match(stripKey(string)) + def fromString(clss, string, isQuoted=True): + key = keyNormkey(string) + key = urllib.unquote(key) + result = clss.KeyPattern.match(key) if result is not None: d = result.groupdict() return clss(docName=d['docName']) -#TODO: is docName obligatory? + class KeyUSK(_KeyBase): _key_pattern_ = ''' (?P<keyType>USK@) @@ -295,53 +288,58 @@ (?P<cryptoKey>[a-z0-9\-~]+?), (?P<extra>[a-z0-9\-~]+?) ) + / ( - (?: / (?P<docName>[^/]+?) ) - (?: / (?P<edition>-?[\d]+)) + (?P<docName>[^/]+?) / + (?P<edition>-?\d+) / + ((?P<tail>.+) /)? )? - (?: /)? ''' - + KeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) KeyType = consts.ConstKeyType.USK - KeyPattern = re.compile(_key_pattern_, re.I | re.X) - ExactKeyPattern = re.compile(_ReMatchExact % _key_pattern_, re.I | re.X) - - def __init__(self, keyData, docName=None, edition=0): + + def __init__(self, keyData=None, docName=None, edition=-1, tail=None): """Creates a USK key - @param keyData: (str) public key - @param docName: (str) docName - @param edition: (int) edition number + + @param keyData: (str) key data or None + @param docName: (str) docName to add to the key or None + @param edition: (int) desired edition + @param tail: (str) for containers, path to item in container or None """ self.edition = edition self.docName = docName self.keyData = keyData + self.tail = tail def toString(self): - out = self.KeyType - if self.keyData is not None: - out += self.keyData + '/' + if self.keyData is None: + out = [self.KeyType, ] + else: + out = [self.KeyType + self.keyData, ] if self.docName is not None: - out += self.docName + '/' - if self.edition is not None: - out += str(self.edition) + '/' - return out + if self.edition is None: + raise ValueError('no edition number specified') + out.append(urllib.quote(self.docName)) + out.append(urllib.quote(str(self.edition))) + if self.tail is not None: + out.append(urllib.quote(self.tail)) + return posixpath.join(*out) @classmethod - def fromString(clss, string): - result = clss.ExactKeyPattern.match(stripKey(string)) + def fromString(clss, string, isQuoted=True): + key = keyNormkey(string) + key = urllib.unquote(key) + result = clss.KeyPattern.match(key) if result is not None: d = result.groupdict() edition = d['edition'] if edition is not None: edition = int(edition) - return clss(d['keyData'], d['docName'], edition=edition) + return clss(d['keyData'], docName=d['docName'], edition=edition, tail=d['tail']) + __all__ = [i for i in dir() if i[0].isupper() and not i.startswith('_')] -#***************************************************************************** -# -#***************************************************************************** -if __name__ == '__main__': - import doctest - #print 'doctests failed: %s/%s' % doctest.testmod() +__all__.append('base64UrlsaveDecode') +__all__.append('keyNormkey') This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-04 08:27:41
|
Revision: 492 http://fclient.svn.sourceforge.net/fclient/?rev=492&view=rev Author: jUrner Date: 2008-07-04 01:27:51 -0700 (Fri, 04 Jul 2008) Log Message: ----------- new message Modified Paths: -------------- trunk/fcp2/src/fcp2/consts.py Modified: trunk/fcp2/src/fcp2/consts.py =================================================================== --- trunk/fcp2/src/fcp2/consts.py 2008-07-04 08:27:35 UTC (rev 491) +++ trunk/fcp2/src/fcp2/consts.py 2008-07-04 08:27:51 UTC (rev 492) @@ -322,6 +322,7 @@ SimpleProgress = 'SimpleProgress' SSKKeypair = 'SSKKeypair' StartedCompression = 'StartedCompression' + SubscribedUSK = 'SubscribedUSK' SubscribedUSKUpdate = 'SubscribedUSKUpdate' TestDDAComplete = 'TestDDAComplete' # (since 1027) TestDDAReply = 'TestDDAReply' # (since 1027) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-04 08:27:26
|
Revision: 491 http://fclient.svn.sourceforge.net/fclient/?rev=491&view=rev Author: jUrner Date: 2008-07-04 01:27:35 -0700 (Fri, 04 Jul 2008) Log Message: ----------- new message Modified Paths: -------------- trunk/fcp2/src/fcp2/message.py Modified: trunk/fcp2/src/fcp2/message.py =================================================================== --- trunk/fcp2/src/fcp2/message.py 2008-07-04 08:27:01 UTC (rev 490) +++ trunk/fcp2/src/fcp2/message.py 2008-07-04 08:27:35 UTC (rev 491) @@ -1079,6 +1079,15 @@ } +class MsgSubscribedUSK(_MessageBase): + name = consts.ConstMessage.SubscribedUSK + _additional_params_ = _SubscribeUSKParams + _param_types_ = { + 'DontPoll': types.TypeBool, + 'URI': key.TypeKey, + } + + class MsgSubscribedUSKUpdate(_MessageBase): name = consts.ConstMessage.SubscribedUSKUpdate _additional_params_ = {} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-04 08:26:56
|
Revision: 490 http://fclient.svn.sourceforge.net/fclient/?rev=490&view=rev Author: jUrner Date: 2008-07-04 01:27:01 -0700 (Fri, 04 Jul 2008) Log Message: ----------- adapt to changes in key.py Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_key.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_key.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-04 08:26:52 UTC (rev 489) +++ trunk/fcp2/src/fcp2/test_fcp/test_key.py 2008-07-04 08:27:01 UTC (rev 490) @@ -34,13 +34,13 @@ p = 'CHK@' + DummyKeyData + '/' myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) - self.failUnless(myKey.filename is None) + self.failUnless(myKey.docName is None) self.assertEqual(myKey.toString(), p) p = 'CHK@' + DummyKeyData + '/foo/' myKey = fcp2.KeyCHK.fromString(p) self.assertEqual(myKey.keyData, DummyKeyData) - self.assertEqual(myKey.filename, 'foo') + self.assertEqual(myKey.docName, 'foo') self.assertEqual(myKey.toString(), p) p = 'CHK@' @@ -52,14 +52,67 @@ pass +class Test_SSK(unittest.TestCase): + + def test_fromString(self): + + p = 'SSK@' + DummyKeyData + '/foo-1/' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 1) + self.assertEqual(myKey.toString(), p) + + + p = 'SSK@' + DummyKeyData + '/' + myKey = fcp2.KeySSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, None) + self.assertEqual(myKey.edition, None) + self.assertEqual(myKey.toString(), p) + + + + def test_toString(self): + pass + - +class Test_USK(unittest.TestCase): + + def test_fromString(self): + + p = 'USK@' + DummyKeyData + '/foo/0/' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, 0) + self.assertEqual(myKey.toString(), p) + + + p = 'USK@' + DummyKeyData + '/foo/-2/' + myKey = fcp2.KeyUSK.fromString(p) + self.assertEqual(myKey.keyData, DummyKeyData) + self.assertEqual(myKey.docName, 'foo') + self.assertEqual(myKey.edition, -2) + self.assertEqual(myKey.toString(), p) + + + p = 'USK@' + myKey = fcp2.KeyUSK.fromString(p) + self.failUnless(myKey is None) + + + def test_toString(self): + pass + #********************************************************************************* # #********************************************************************************* def suite(): tests = ( Test_CHK, + Test_SSK, + Test_USK, ) suite = unittest.TestSuite() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-04 08:26:46
|
Revision: 489 http://fclient.svn.sourceforge.net/fclient/?rev=489&view=rev Author: jUrner Date: 2008-07-04 01:26:52 -0700 (Fri, 04 Jul 2008) Log Message: ----------- adapt to changes in key.py Modified Paths: -------------- trunk/fcp2/src/fcp2/test_fcp/test_client.py Modified: trunk/fcp2/src/fcp2/test_fcp/test_client.py =================================================================== --- trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-04 08:26:26 UTC (rev 488) +++ trunk/fcp2/src/fcp2/test_fcp/test_client.py 2008-07-04 08:26:52 UTC (rev 489) @@ -3031,8 +3031,8 @@ requestsAll = self.client.getRequests() self.assertHasNextMessage(fcp2.MsgGenerateSSK) - priv = fcp2.Key('SSK@' + DummyKeyData + '/priv') - pub = fcp2.Key('SSK@' + DummyKeyData + '/pub') + priv = fcp2.Key('SSK@' + DummyKeyData + '/') + pub = fcp2.Key('SSK@' + DummyKeyData + '/') self.sendResponseMessage( 'SSKKeypair', Identifier=myIdentifier, @@ -3067,8 +3067,8 @@ requestsAll = self.client.getRequests() self.assertHasNextMessage(fcp2.MsgGenerateSSK) - priv = fcp2.Key('SSK@' + DummyKeyData + '/priv') - pub = fcp2.Key('SSK@' + DummyKeyData + '/pub') + priv = fcp2.Key('SSK@' + DummyKeyData + '/') + pub = fcp2.Key('SSK@' + DummyKeyData + '/') self.sendResponseMessage( 'SSKKeypair', Identifier=myIdentifier, @@ -3076,8 +3076,8 @@ InsertURI=priv, ) - priv = fcp2.KeyUSK(priv.keyData, filename=priv.filename) - pub = fcp2.KeyUSK(pub.keyData, filename=pub.filename) + priv = fcp2.KeyUSK(priv.keyData, docName=priv.docName) + pub = fcp2.KeyUSK(pub.keyData, docName=pub.docName) msg = self.assertHasNextEvent( self.client.events.KeypairGenerated, fcp2.MsgGenerateSSK, This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <jU...@us...> - 2008-07-04 08:26:20
|
Revision: 488 http://fclient.svn.sourceforge.net/fclient/?rev=488&view=rev Author: jUrner Date: 2008-07-04 01:26:26 -0700 (Fri, 04 Jul 2008) Log Message: ----------- adapt to changes in key.py Modified Paths: -------------- trunk/fcp2/src/fcp2/client.py Modified: trunk/fcp2/src/fcp2/client.py =================================================================== --- trunk/fcp2/src/fcp2/client.py 2008-07-04 08:25:43 UTC (rev 487) +++ trunk/fcp2/src/fcp2/client.py 2008-07-04 08:26:26 UTC (rev 488) @@ -1085,8 +1085,9 @@ requestURI = msg['RequestURI'] if initialRequest['RequestType'] == consts.ConstRequestType.GenerateUSKKeypair: - insertURI = key.KeyUSK(insertURI.keyData, filename=insertURI.filename) - requestURI = key.KeyUSK(requestURI.keyData, filename=requestURI.filename) + insertURI = key.KeyUSK(insertURI.keyData, docName=insertURI.docName) + insertURI = key.KeyUSK(insertURI.keyData, docName=insertURI.docName) + requestURI = key.KeyUSK(requestURI.keyData, docName=requestURI.docName) initialRequest['InsertURI'] = insertURI initialRequest['RequestURI'] = requestURI initialRequest['RequestStatus'] |= consts.ConstRequestStatus.Success @@ -1556,7 +1557,7 @@ # add params if uri.KeyType == consts.ConstKeyType.CHK: if uri.filename is not None: - msg['TargetFilename'] = uri.filename + msg['TargetFilename'] = uri.docName for param, value in msgParams.items(): if value is not None: msg[param] = value This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |