~jerith/entropy-store/arbitrary-object-id

« back to all changes in this revision

Viewing changes to entropy/test/test_store.py

  • Committer: Tristan Seligmann
  • Date: 2009-06-08 05:26:43 UTC
  • Revision ID: mithrandi@mithrandi.za.net-20090608052643-xi55lrco5k4io095
Add some tests for hashing and fix bugs in the error path.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from StringIO import StringIO
 
2
 
 
3
from twisted.trial.unittest import TestCase
 
4
 
 
5
from axiom.store import Store
 
6
 
 
7
from nevow.testutil import FakeRequest
 
8
 
 
9
from entropy.store import ContentStore, ImmutableObject, ObjectCreator
 
10
 
 
11
class ContentStoreTests(TestCase):
 
12
    """
 
13
    Tests for L{ContentStore}.
 
14
    """
 
15
    def setUp(self):
 
16
        self.store = Store(self.mktemp())
 
17
        self.contentStore = ContentStore(store=self.store, hash=u'sha256')
 
18
 
 
19
    def test_storeObject(self):
 
20
        """
 
21
        Test storing an object.
 
22
        """
 
23
        content = 'blahblah some data blahblah'
 
24
        contentType = u'application/octet-stream'
 
25
        expectedDigest = u'9aef0e119873bb0aab04e941d8f76daf21dedcd79e2024004766ee3b22ca9862'
 
26
 
 
27
        d = self.contentStore.storeObject(content, contentType)
 
28
        return d.addCallback(lambda objectId: self.assertEqual(objectId, u'sha256:%s' % expectedDigest))
 
29
 
 
30
    def test_getObject(self):
 
31
        """
 
32
        Test retrieving object.
 
33
        """
 
34
        obj = ImmutableObject(store=self.store,
 
35
                              hash=u'somehash',
 
36
                              contentDigest=u'quux',
 
37
                              content=self.store.newFilePath('foo'),
 
38
                              contentType=u'application/octet-stream')
 
39
        d = self.contentStore.getObject(u'somehash:quux')
 
40
        return d.addCallback(lambda obj2: self.assertIdentical(obj, obj2))
 
41
 
 
42
 
 
43
class ObjectCreatorTests(TestCase):
 
44
    def setUp(self):
 
45
        self.store = Store(self.mktemp())
 
46
        self.contentStore = ContentStore(store=self.store, hash=u'sha256')
 
47
        self.creator = ObjectCreator(self.contentStore)
 
48
 
 
49
    def test_correctContentMD5(self):
 
50
        req = FakeRequest()
 
51
        req.received_headers['content-md5'] = '72VMQKtPF0f8aZkV1PcJAg=='
 
52
        req.content = StringIO('testdata')
 
53
        return self.creator.handlePUT(req)
 
54
 
 
55
    def test_incorrectContentMD5(self):
 
56
        req = FakeRequest()
 
57
        req.received_headers['content-md5'] = '72VMQKtPF0f8aZkV1PcJAg=='
 
58
        req.content = StringIO('wrongdata')
 
59
        self.assertRaises(ValueError, self.creator.handlePUT, req)
 
60
 
 
61
    def test_missingContentMD5(self):
 
62
        req = FakeRequest()
 
63
        req.content = StringIO('wrongdata')
 
64
        return self.creator.handlePUT(req)