~ntt-pf-lab/nova/monkey_patch_notification

« back to all changes in this revision

Viewing changes to vendor/Twisted-10.0.0/twisted/test/test_sob.py

  • Committer: Jesse Andrews
  • Date: 2010-05-28 06:05:26 UTC
  • Revision ID: git-v1:bf6e6e718cdc7488e2da87b21e258ccc065fe499
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
 
2
# See LICENSE for details.
 
3
 
 
4
 
 
5
import sys, os
 
6
 
 
7
try:
 
8
    import Crypto.Cipher.AES
 
9
except ImportError:
 
10
    Crypto = None
 
11
 
 
12
from twisted.trial import unittest
 
13
from twisted.persisted import sob
 
14
from twisted.python import components
 
15
 
 
16
class Dummy(components.Componentized):
 
17
    pass
 
18
 
 
19
objects = [
 
20
1,
 
21
"hello",
 
22
(1, "hello"),
 
23
[1, "hello"],
 
24
{1:"hello"},
 
25
]
 
26
 
 
27
class FakeModule(object):
 
28
    pass
 
29
 
 
30
class PersistTestCase(unittest.TestCase):
 
31
    def testStyles(self):
 
32
        for o in objects:
 
33
            p = sob.Persistent(o, '')
 
34
            for style in 'source pickle'.split():
 
35
                p.setStyle(style)
 
36
                p.save(filename='persisttest.'+style)
 
37
                o1 = sob.load('persisttest.'+style, style)
 
38
                self.failUnlessEqual(o, o1)
 
39
 
 
40
    def testStylesBeingSet(self):
 
41
        o = Dummy()
 
42
        o.foo = 5
 
43
        o.setComponent(sob.IPersistable, sob.Persistent(o, 'lala'))
 
44
        for style in 'source pickle'.split():
 
45
            sob.IPersistable(o).setStyle(style)
 
46
            sob.IPersistable(o).save(filename='lala.'+style)
 
47
            o1 = sob.load('lala.'+style, style)
 
48
            self.failUnlessEqual(o.foo, o1.foo)
 
49
            self.failUnlessEqual(sob.IPersistable(o1).style, style)
 
50
 
 
51
 
 
52
    def testNames(self):
 
53
        o = [1,2,3]
 
54
        p = sob.Persistent(o, 'object')
 
55
        for style in 'source pickle'.split():
 
56
            p.setStyle(style)
 
57
            p.save()
 
58
            o1 = sob.load('object.ta'+style[0], style)
 
59
            self.failUnlessEqual(o, o1)
 
60
            for tag in 'lala lolo'.split():
 
61
                p.save(tag)
 
62
                o1 = sob.load('object-'+tag+'.ta'+style[0], style)
 
63
                self.failUnlessEqual(o, o1)
 
64
      
 
65
    def testEncryptedStyles(self):
 
66
        for o in objects:
 
67
            phrase='once I was the king of spain'
 
68
            p = sob.Persistent(o, '')
 
69
            for style in 'source pickle'.split():
 
70
                p.setStyle(style)
 
71
                p.save(filename='epersisttest.'+style, passphrase=phrase)
 
72
                o1 = sob.load('epersisttest.'+style, style, phrase)
 
73
                self.failUnlessEqual(o, o1)
 
74
    if Crypto is None:
 
75
        testEncryptedStyles.skip = "PyCrypto required for encrypted config"
 
76
 
 
77
    def testPython(self):
 
78
        f = open("persisttest.python", 'w')
 
79
        f.write('foo=[1,2,3] ')
 
80
        f.close()
 
81
        o = sob.loadValueFromFile('persisttest.python', 'foo')
 
82
        self.failUnlessEqual(o, [1,2,3])
 
83
 
 
84
    def testEncryptedPython(self):
 
85
        phrase='once I was the king of spain'
 
86
        f = open("epersisttest.python", 'w')
 
87
        f.write(
 
88
            sob._encrypt(phrase, 'foo=[1,2,3]'))
 
89
        f.close()
 
90
        o = sob.loadValueFromFile('epersisttest.python', 'foo', phrase)
 
91
        self.failUnlessEqual(o, [1,2,3])
 
92
    if Crypto is None:
 
93
        testEncryptedPython.skip = "PyCrypto required for encrypted config"
 
94
 
 
95
    def testTypeGuesser(self):
 
96
        self.assertRaises(KeyError, sob.guessType, "file.blah")
 
97
        self.assertEqual('python', sob.guessType("file.py"))
 
98
        self.assertEqual('python', sob.guessType("file.tac"))
 
99
        self.assertEqual('python', sob.guessType("file.etac"))
 
100
        self.assertEqual('pickle', sob.guessType("file.tap"))
 
101
        self.assertEqual('pickle', sob.guessType("file.etap"))
 
102
        self.assertEqual('source', sob.guessType("file.tas"))
 
103
        self.assertEqual('source', sob.guessType("file.etas"))
 
104
 
 
105
    def testEverythingEphemeralGetattr(self):
 
106
        """
 
107
        Verify that _EverythingEphermal.__getattr__ works.
 
108
        """
 
109
        self.fakeMain.testMainModGetattr = 1
 
110
 
 
111
        dirname = self.mktemp()
 
112
        os.mkdir(dirname)
 
113
 
 
114
        filename = os.path.join(dirname, 'persisttest.ee_getattr')
 
115
 
 
116
        f = file(filename, 'w')
 
117
        f.write('import __main__\n')
 
118
        f.write('if __main__.testMainModGetattr != 1: raise AssertionError\n')
 
119
        f.write('app = None\n')
 
120
        f.close()
 
121
 
 
122
        sob.load(filename, 'source')
 
123
 
 
124
    def testEverythingEphemeralSetattr(self):
 
125
        """
 
126
        Verify that _EverythingEphemeral.__setattr__ won't affect __main__.
 
127
        """
 
128
        self.fakeMain.testMainModSetattr = 1
 
129
 
 
130
        dirname = self.mktemp()
 
131
        os.mkdir(dirname)
 
132
 
 
133
        filename = os.path.join(dirname, 'persisttest.ee_setattr')
 
134
        f = file(filename, 'w')
 
135
        f.write('import __main__\n')
 
136
        f.write('__main__.testMainModSetattr = 2\n')
 
137
        f.write('app = None\n')
 
138
        f.close()
 
139
 
 
140
        sob.load(filename, 'source')
 
141
 
 
142
        self.assertEqual(self.fakeMain.testMainModSetattr, 1)
 
143
 
 
144
    def testEverythingEphemeralException(self):
 
145
        """
 
146
        Test that an exception during load() won't cause _EE to mask __main__
 
147
        """
 
148
        dirname = self.mktemp()
 
149
        os.mkdir(dirname)
 
150
        filename = os.path.join(dirname, 'persisttest.ee_exception')
 
151
 
 
152
        f = file(filename, 'w')
 
153
        f.write('raise ValueError\n')
 
154
        f.close()
 
155
 
 
156
        self.assertRaises(ValueError, sob.load, filename, 'source')
 
157
        self.assertEqual(type(sys.modules['__main__']), FakeModule)
 
158
 
 
159
    def setUp(self):
 
160
        """
 
161
        Replace the __main__ module with a fake one, so that it can be mutated
 
162
        in tests
 
163
        """
 
164
        self.realMain = sys.modules['__main__']
 
165
        self.fakeMain = sys.modules['__main__'] = FakeModule()
 
166
 
 
167
    def tearDown(self):
 
168
        """
 
169
        Restore __main__ to its original value
 
170
        """
 
171
        sys.modules['__main__'] = self.realMain
 
172