diff options
| author | Luis Pabon <lpabon@redhat.com> | 2013-06-11 14:28:48 -0400 | 
|---|---|---|
| committer | Peter Portante <pportant@redhat.com> | 2013-06-11 13:39:53 -0700 | 
| commit | b00e479637955cec8a58a81db934d2ddf743a219 (patch) | |
| tree | dbfee95b7ff7eabac34f91d3acc2b3045cf15453 /test/unit | |
| parent | a88accbe275d9d86d4626244ddd60653d5a9b6ab (diff) | |
Return correct status when deleting non-existing container
The code was raising an exception when the container (which
happens to be a directory) did not exist.  To be compatible
with OpenStack Swift, we need to handle an object which its
container/directory does not exist.
BUG: 960944 (https://bugzilla.redhat.com/show_bug.cgi?id=960944)
Change-Id: Ibb2db354a655e040fb70ebbe6a7d8f815d33dc0f
Signed-off-by: Luis Pabon <lpabon@redhat.com>
Reviewed-on: http://review.gluster.org/5201
Reviewed-by: Peter Portante <pportant@redhat.com>
Tested-by: Peter Portante <pportant@redhat.com>
Diffstat (limited to 'test/unit')
| -rw-r--r-- | test/unit/common/test_diskdir.py | 34 | ||||
| -rw-r--r-- | test/unit/proxy/test_server.py | 35 | 
2 files changed, 69 insertions, 0 deletions
diff --git a/test/unit/common/test_diskdir.py b/test/unit/common/test_diskdir.py index 580e76a..be0c922 100644 --- a/test/unit/common/test_diskdir.py +++ b/test/unit/common/test_diskdir.py @@ -344,6 +344,22 @@ class TestDiskCommon(unittest.TestCase):          del dc.metadata['X-Container-Meta-foo']          assert dc.metadata == md_copy +    def test_empty_dir_is_not_empty(self): +        dc = dd.DiskCommon(self.td, self.fake_drives[0], +                    self.fake_accounts[0], self.fake_logger) +        os.makedirs(os.path.join(self.td, self.fake_drives[0], 'aaabbbccc')) +        self.assertFalse(dc.empty()) + +    def test_empty_dir_is_empty(self): +        dc = dd.DiskCommon(self.td, self.fake_drives[0], +                    self.fake_accounts[0], self.fake_logger) +        self.assertTrue(dc.empty()) + +    def test_empty_dir_does_not_exist(self): +        dc = dd.DiskCommon(self.td, 'non_existent_drive', +                    self.fake_accounts[0], self.fake_logger) +        self.assertTrue(dc.empty()) +  class TestContainerBroker(unittest.TestCase):      """ @@ -498,6 +514,24 @@ class TestContainerBroker(unittest.TestCase):          self.assertEquals(info['x_container_sync_point1'], -1)          self.assertEquals(info['x_container_sync_point2'], -1) +    def test_get_info_nonexistent_container(self): +        broker = dd.DiskDir(self.path, self.drive, account='no_account', +                          container='no_container', logger=FakeLogger()) +        info = broker.get_info() + +        # +        # Because broker._dir_exists is False and _update_object_count() +        # has not been called yet, the values returned for +        # object_count, bytes_used, and put_timestamp are '0' as +        # a string.  OpenStack Swift handles this situation by +        # passing the value to float(). +        # +        self.assertEquals(info['account'], 'no_account') +        self.assertEquals(info['container'], 'no_container') +        self.assertEquals(info['object_count'], '0') +        self.assertEquals(info['bytes_used'], '0') +        self.assertEquals(info['put_timestamp'], '0') +      def test_set_x_syncs(self):          broker = self._get_broker(account='test1',                                   container='test2') diff --git a/test/unit/proxy/test_server.py b/test/unit/proxy/test_server.py index a04380d..57e3111 100644 --- a/test/unit/proxy/test_server.py +++ b/test/unit/proxy/test_server.py @@ -4512,6 +4512,41 @@ class TestContainerController(unittest.TestCase):              self.assert_status_map(controller.DELETE,                                     (200, 404, 404, 404), 404) +    def test_DELETE_container_that_does_not_exist(self): +        prolis = _test_sockets[0] +        # Create a container +        sock = connect_tcp(('localhost', prolis.getsockname()[1])) +        fd = sock.makefile() +        fd.write('PUT /v1/a/aaabbbccc HTTP/1.1\r\nHost: localhost\r\n' +                 'Connection: close\r\nX-Storage-Token: t\r\n' +                 'Content-Length: 0\r\n\r\n') +        fd.flush() +        headers = readuntil2crlfs(fd) +        exp = 'HTTP/1.1 201' +        self.assertEquals(headers[:len(exp)], exp) + +        # Delete container +        sock = connect_tcp(('localhost', prolis.getsockname()[1])) +        fd = sock.makefile() +        fd.write('DELETE /v1/a/aaabbbccc HTTP/1.1\r\nHost: localhost\r\n' +                 'Connection: close\r\nX-Storage-Token: t\r\n' +                 'Content-Length: 0\r\n\r\n') +        fd.flush() +        headers = readuntil2crlfs(fd) +        exp = 'HTTP/1.1 204' +        self.assertEquals(headers[:len(exp)], exp) + +        # Delete again +        sock = connect_tcp(('localhost', prolis.getsockname()[1])) +        fd = sock.makefile() +        fd.write('DELETE /v1/a/aaabbbccc HTTP/1.1\r\nHost: localhost\r\n' +                 'Connection: close\r\nX-Storage-Token: t\r\n' +                 'Content-Length: 0\r\n\r\n') +        fd.flush() +        headers = readuntil2crlfs(fd) +        exp = 'HTTP/1.1 404' +        self.assertEquals(headers[:len(exp)], exp) +      def test_response_get_accept_ranges_header(self):          with save_globals():              set_http_connect(200, 200, body='{}')  | 
