~ubuntu-branches/ubuntu/trusty/swift/trusty-updates

« back to all changes in this revision

Viewing changes to test/unit/common/ring/test_ring.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short, Soren Hansen, Chuck Short
  • Date: 2012-09-07 19:02:36 UTC
  • mfrom: (1.2.12)
  • Revision ID: package-import@ubuntu.com-20120907190236-fqrmbzm7v6zivs8d
Tags: 1.7.0-0ubuntu1
[ Soren Hansen ]
* Update debian/watch to account for symbolically named tarballs and
  use newer URL.
* Run unit tests at build time.
* Fix Launchpad URLs in debian/watch.

[ Chuck Short ]
* New upstream release
* debian/control: Add pubthon-moc as a build dep
* debian/rules: Dont fail if testsuite fails.

Show diffs side-by-side

added added

removed removed

Lines of Context:
13
13
# See the License for the specific language governing permissions and
14
14
# limitations under the License.
15
15
 
 
16
import array
16
17
import cPickle as pickle
17
18
import os
18
19
import unittest
25
26
 
26
27
class TestRingData(unittest.TestCase):
27
28
 
 
29
    def setUp(self):
 
30
        self.testdir = os.path.join(os.path.dirname(__file__), 'ring_data')
 
31
        rmtree(self.testdir, ignore_errors=1)
 
32
        os.mkdir(self.testdir)
 
33
 
 
34
    def tearDown(self):
 
35
        rmtree(self.testdir, ignore_errors=1)
 
36
 
 
37
    def assert_ring_data_equal(self, rd_expected, rd_got):
 
38
        self.assertEquals(rd_expected._replica2part2dev_id,
 
39
                          rd_got._replica2part2dev_id)
 
40
        self.assertEquals(rd_expected.devs, rd_got.devs)
 
41
        self.assertEquals(rd_expected._part_shift, rd_got._part_shift)
 
42
 
28
43
    def test_attrs(self):
29
44
        r2p2d = [[0, 1, 0, 1], [0, 1, 0, 1]]
30
45
        d = [{'id': 0, 'zone': 0}, {'id': 1, 'zone': 1}]
34
49
        self.assertEquals(rd.devs, d)
35
50
        self.assertEquals(rd._part_shift, s)
36
51
 
37
 
    def test_pickleable(self):
 
52
    def test_can_load_pickled_ring_data(self):
38
53
        rd = ring.RingData([[0, 1, 0, 1], [0, 1, 0, 1]],
39
54
                [{'id': 0, 'zone': 0}, {'id': 1, 'zone': 1}], 30)
 
55
        ring_fname = os.path.join(self.testdir, 'foo.ring.gz')
40
56
        for p in xrange(pickle.HIGHEST_PROTOCOL):
41
 
            pickle.loads(pickle.dumps(rd, protocol=p))
 
57
            pickle.dump(rd, GzipFile(ring_fname, 'wb'), protocol=p)
 
58
            ring_data = ring.RingData.load(ring_fname)
 
59
            self.assert_ring_data_equal(rd, ring_data)
 
60
 
 
61
    def test_roundtrip_serialization(self):
 
62
        ring_fname = os.path.join(self.testdir, 'foo.ring.gz')
 
63
        rd = ring.RingData(
 
64
            [array.array('H', [0, 1, 0, 1]), array.array('H',[0, 1, 0, 1])],
 
65
            [{'id': 0, 'zone': 0}, {'id': 1, 'zone': 1}], 30)
 
66
        rd.save(ring_fname)
 
67
        rd2 = ring.RingData.load(ring_fname)
 
68
        self.assert_ring_data_equal(rd, rd2)
42
69
 
43
70
 
44
71
class TestRing(unittest.TestCase):
49
76
        rmtree(self.testdir, ignore_errors=1)
50
77
        os.mkdir(self.testdir)
51
78
        self.testgz = os.path.join(self.testdir, 'whatever.ring.gz')
52
 
        self.intended_replica2part2dev_id = [[0, 1, 0, 1],
53
 
                                             [0, 1, 0, 1],
54
 
                                             [3, 4, 3, 4]]
 
79
        self.intended_replica2part2dev_id = [
 
80
            array.array('H', [0, 1, 0, 1]),
 
81
            array.array('H', [0, 1, 0, 1]),
 
82
            array.array('H', [3, 4, 3, 4])]
55
83
        self.intended_devs = [{'id': 0, 'zone': 0, 'weight': 1.0,
56
84
                               'ip': '10.1.1.1', 'port': 6000},
57
85
                              {'id': 1, 'zone': 0, 'weight': 1.0,
63
91
                               'ip': '10.1.2.2', 'port': 6000}]
64
92
        self.intended_part_shift = 30
65
93
        self.intended_reload_time = 15
66
 
        pickle.dump(ring.RingData(self.intended_replica2part2dev_id,
67
 
            self.intended_devs, self.intended_part_shift),
68
 
            GzipFile(self.testgz, 'wb'))
 
94
        ring.RingData(self.intended_replica2part2dev_id,
 
95
            self.intended_devs, self.intended_part_shift).save(self.testgz)
69
96
        self.ring = ring.Ring(self.testdir,
70
97
            reload_time=self.intended_reload_time, ring_name='whatever')
71
98
 
78
105
        self.assertEquals(self.ring._part_shift, self.intended_part_shift)
79
106
        self.assertEquals(self.ring.devs, self.intended_devs)
80
107
        self.assertEquals(self.ring.reload_time, self.intended_reload_time)
81
 
        self.assertEquals(self.ring.pickle_gz_path, self.testgz)
 
108
        self.assertEquals(self.ring.serialized_path, self.testgz)
82
109
        # test invalid endcap
83
110
        _orig_hash_path_suffix = utils.HASH_PATH_SUFFIX
84
111
        try:
99
126
        orig_mtime = self.ring._mtime
100
127
        self.assertEquals(len(self.ring.devs), 5)
101
128
        self.intended_devs.append({'id': 3, 'zone': 3, 'weight': 1.0})
102
 
        pickle.dump(ring.RingData(self.intended_replica2part2dev_id,
103
 
            self.intended_devs, self.intended_part_shift),
104
 
            GzipFile(self.testgz, 'wb'))
 
129
        ring.RingData(self.intended_replica2part2dev_id,
 
130
            self.intended_devs, self.intended_part_shift).save(self.testgz)
105
131
        sleep(0.1)
106
132
        self.ring.get_nodes('a')
107
133
        self.assertEquals(len(self.ring.devs), 6)
113
139
        orig_mtime = self.ring._mtime
114
140
        self.assertEquals(len(self.ring.devs), 6)
115
141
        self.intended_devs.append({'id': 5, 'zone': 4, 'weight': 1.0})
116
 
        pickle.dump(ring.RingData(self.intended_replica2part2dev_id,
117
 
            self.intended_devs, self.intended_part_shift),
118
 
            GzipFile(self.testgz, 'wb'))
 
142
        ring.RingData(self.intended_replica2part2dev_id,
 
143
            self.intended_devs, self.intended_part_shift).save(self.testgz)
119
144
        sleep(0.1)
120
145
        self.ring.get_part_nodes(0)
121
146
        self.assertEquals(len(self.ring.devs), 7)
128
153
        part, nodes = self.ring.get_nodes('a')
129
154
        self.assertEquals(len(self.ring.devs), 7)
130
155
        self.intended_devs.append({'id': 6, 'zone': 5, 'weight': 1.0})
131
 
        pickle.dump(ring.RingData(self.intended_replica2part2dev_id,
132
 
            self.intended_devs, self.intended_part_shift),
133
 
            GzipFile(self.testgz, 'wb'))
 
156
        ring.RingData(self.intended_replica2part2dev_id,
 
157
            self.intended_devs, self.intended_part_shift).save(self.testgz)
134
158
        sleep(0.1)
135
159
        self.ring.get_more_nodes(part).next()
136
160
        self.assertEquals(len(self.ring.devs), 8)
142
166
        orig_mtime = self.ring._mtime
143
167
        self.assertEquals(len(self.ring.devs), 8)
144
168
        self.intended_devs.append({'id': 5, 'zone': 4, 'weight': 1.0})
145
 
        pickle.dump(ring.RingData(self.intended_replica2part2dev_id,
146
 
            self.intended_devs, self.intended_part_shift),
147
 
            GzipFile(self.testgz, 'wb'))
 
169
        ring.RingData(self.intended_replica2part2dev_id,
 
170
            self.intended_devs, self.intended_part_shift).save(self.testgz)
148
171
        sleep(0.1)
149
172
        self.assertEquals(len(self.ring.devs), 9)
150
173
        self.assertNotEquals(self.ring._mtime, orig_mtime)