~ubuntu-branches/ubuntu/raring/swift/raring-security

« back to all changes in this revision

Viewing changes to .pc/fix-ubuntu-unittests.patch/test/probe/test_account_failures.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-04-10 09:23:54 UTC
  • mfrom: (1.2.9)
  • Revision ID: package-import@ubuntu.com-20120410092354-5z06qt1jal4wtoxf
Tags: 1.4.8-0ubuntu1
* New upstream release.
* debian/patches/fix-ubuntu-unittests.patch: Refreshed. 
* debian/patches/fix-doc-no-network.patch: Dont access network when
  trying to build docs.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python -u
 
2
# Copyright (c) 2010-2012 OpenStack, LLC.
 
3
#
 
4
# Licensed under the Apache License, Version 2.0 (the "License");
 
5
# you may not use this file except in compliance with the License.
 
6
# You may obtain a copy of the License at
 
7
#
 
8
#    http://www.apache.org/licenses/LICENSE-2.0
 
9
#
 
10
# Unless required by applicable law or agreed to in writing, software
 
11
# distributed under the License is distributed on an "AS IS" BASIS,
 
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
 
13
# implied.
 
14
# See the License for the specific language governing permissions and
 
15
# limitations under the License.
 
16
 
 
17
import unittest
 
18
from os import kill
 
19
from signal import SIGTERM
 
20
from subprocess import Popen
 
21
from time import sleep
 
22
 
 
23
from swift.common import client, direct_client
 
24
from test.probe.common import get_to_final_state, kill_pids, reset_environment
 
25
 
 
26
 
 
27
class TestAccountFailures(unittest.TestCase):
 
28
 
 
29
    def setUp(self):
 
30
        self.pids, self.port2server, self.account_ring, self.container_ring, \
 
31
            self.object_ring, self.url, self.token, self.account = \
 
32
                reset_environment()
 
33
 
 
34
    def tearDown(self):
 
35
        kill_pids(self.pids)
 
36
 
 
37
    def test_main(self):
 
38
        container1 = 'container1'
 
39
        client.put_container(self.url, self.token, container1)
 
40
        container2 = 'container2'
 
41
        client.put_container(self.url, self.token, container2)
 
42
        headers, containers = client.get_account(self.url, self.token)
 
43
        self.assertEquals(headers['x-account-container-count'], '2')
 
44
        self.assertEquals(headers['x-account-object-count'], '0')
 
45
        self.assertEquals(headers['x-account-bytes-used'], '0')
 
46
        found1 = False
 
47
        found2 = False
 
48
        for c in containers:
 
49
            if c['name'] == container1:
 
50
                found1 = True
 
51
                self.assertEquals(c['count'], 0)
 
52
                self.assertEquals(c['bytes'], 0)
 
53
            elif c['name'] == container2:
 
54
                found2 = True
 
55
                self.assertEquals(c['count'], 0)
 
56
                self.assertEquals(c['bytes'], 0)
 
57
        self.assert_(found1)
 
58
        self.assert_(found2)
 
59
 
 
60
        client.put_object(self.url, self.token, container2, 'object1', '1234')
 
61
        headers, containers = client.get_account(self.url, self.token)
 
62
        self.assertEquals(headers['x-account-container-count'], '2')
 
63
        self.assertEquals(headers['x-account-object-count'], '0')
 
64
        self.assertEquals(headers['x-account-bytes-used'], '0')
 
65
        found1 = False
 
66
        found2 = False
 
67
        for c in containers:
 
68
            if c['name'] == container1:
 
69
                found1 = True
 
70
                self.assertEquals(c['count'], 0)
 
71
                self.assertEquals(c['bytes'], 0)
 
72
            elif c['name'] == container2:
 
73
                found2 = True
 
74
                self.assertEquals(c['count'], 0)
 
75
                self.assertEquals(c['bytes'], 0)
 
76
        self.assert_(found1)
 
77
        self.assert_(found2)
 
78
 
 
79
        get_to_final_state()
 
80
        headers, containers = client.get_account(self.url, self.token)
 
81
        self.assertEquals(headers['x-account-container-count'], '2')
 
82
        self.assertEquals(headers['x-account-object-count'], '1')
 
83
        self.assertEquals(headers['x-account-bytes-used'], '4')
 
84
        found1 = False
 
85
        found2 = False
 
86
        for c in containers:
 
87
            if c['name'] == container1:
 
88
                found1 = True
 
89
                self.assertEquals(c['count'], 0)
 
90
                self.assertEquals(c['bytes'], 0)
 
91
            elif c['name'] == container2:
 
92
                found2 = True
 
93
                self.assertEquals(c['count'], 1)
 
94
                self.assertEquals(c['bytes'], 4)
 
95
        self.assert_(found1)
 
96
        self.assert_(found2)
 
97
 
 
98
        apart, anodes = self.account_ring.get_nodes(self.account)
 
99
        kill(self.pids[self.port2server[anodes[0]['port']]], SIGTERM)
 
100
 
 
101
        client.delete_container(self.url, self.token, container1)
 
102
        client.put_object(self.url, self.token, container2, 'object2', '12345')
 
103
        headers, containers = client.get_account(self.url, self.token)
 
104
        self.assertEquals(headers['x-account-container-count'], '1')
 
105
        self.assertEquals(headers['x-account-object-count'], '1')
 
106
        self.assertEquals(headers['x-account-bytes-used'], '4')
 
107
        found1 = False
 
108
        found2 = False
 
109
        for c in containers:
 
110
            if c['name'] == container1:
 
111
                found1 = True
 
112
            elif c['name'] == container2:
 
113
                found2 = True
 
114
                self.assertEquals(c['count'], 1)
 
115
                self.assertEquals(c['bytes'], 4)
 
116
        self.assert_(not found1)
 
117
        self.assert_(found2)
 
118
 
 
119
        ps = []
 
120
        for n in xrange(1, 5):
 
121
            ps.append(Popen(['swift-container-updater',
 
122
                             '/etc/swift/container-server/%d.conf' % n,
 
123
                             'once']))
 
124
        for p in ps:
 
125
            p.wait()
 
126
        headers, containers = client.get_account(self.url, self.token)
 
127
        self.assertEquals(headers['x-account-container-count'], '1')
 
128
        self.assertEquals(headers['x-account-object-count'], '2')
 
129
        self.assertEquals(headers['x-account-bytes-used'], '9')
 
130
        found1 = False
 
131
        found2 = False
 
132
        for c in containers:
 
133
            if c['name'] == container1:
 
134
                found1 = True
 
135
            elif c['name'] == container2:
 
136
                found2 = True
 
137
                self.assertEquals(c['count'], 2)
 
138
                self.assertEquals(c['bytes'], 9)
 
139
        self.assert_(not found1)
 
140
        self.assert_(found2)
 
141
 
 
142
        self.pids[self.port2server[anodes[0]['port']]] = \
 
143
            Popen(['swift-account-server',
 
144
                   '/etc/swift/account-server/%d.conf' %
 
145
                    ((anodes[0]['port'] - 6002) / 10)]).pid
 
146
        sleep(2)
 
147
        # This is the earlier counts and bytes because the first node doesn't
 
148
        # have the newest udpates yet.
 
149
        headers, containers = \
 
150
            direct_client.direct_get_account(anodes[0], apart, self.account)
 
151
        self.assertEquals(headers['x-account-container-count'], '2')
 
152
        self.assertEquals(headers['x-account-object-count'], '1')
 
153
        self.assertEquals(headers['x-account-bytes-used'], '4')
 
154
        found1 = False
 
155
        found2 = False
 
156
        for c in containers:
 
157
            if c['name'] == container1:
 
158
                found1 = True
 
159
            elif c['name'] == container2:
 
160
                found2 = True
 
161
                # This is the earlier count and bytes because the first node
 
162
                # doesn't have the newest udpates yet.
 
163
                self.assertEquals(c['count'], 1)
 
164
                self.assertEquals(c['bytes'], 4)
 
165
        # This okay because the first node hasn't got the update that
 
166
        # container1 was deleted yet.
 
167
        self.assert_(found1)
 
168
        self.assert_(found2)
 
169
 
 
170
        get_to_final_state()
 
171
        headers, containers = \
 
172
            direct_client.direct_get_account(anodes[0], apart, self.account)
 
173
        self.assertEquals(headers['x-account-container-count'], '1')
 
174
        self.assertEquals(headers['x-account-object-count'], '2')
 
175
        self.assertEquals(headers['x-account-bytes-used'], '9')
 
176
        found1 = False
 
177
        found2 = False
 
178
        for c in containers:
 
179
            if c['name'] == container1:
 
180
                found1 = True
 
181
            elif c['name'] == container2:
 
182
                found2 = True
 
183
                self.assertEquals(c['count'], 2)
 
184
                self.assertEquals(c['bytes'], 9)
 
185
        self.assert_(not found1)
 
186
        self.assert_(found2)
 
187
 
 
188
 
 
189
if __name__ == '__main__':
 
190
    unittest.main()