diff --git a/swh/loader/git/tests/test_api_content.py b/swh/loader/git/tests/test_api_content.py index 9d629b1..ec75181 100644 --- a/swh/loader/git/tests/test_api_content.py +++ b/swh/loader/git/tests/test_api_content.py @@ -1,111 +1,113 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import app_client, app_client_teardown @attr('slow') class ContentTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, self.content_storage_dir = app_client() with db.connect(db_url) as db_conn: self.content_sha1_id = '222222f9dd5dc46ee476a8be155ab049994f717e' content_sha1_id = 'blabliblablo' self.content_sha256_hex = '222222f9dd5dc46ee476a8be155ab049994f717e' models.add_content(db_conn, self.content_sha1_id, content_sha1_id, self.content_sha256_hex, 10) - def tearDown(self): + @classmethod + def tearDownClass(self): app_client_teardown(self.content_storage_dir) @istest def get_content_ok(self): # when rv = self.app.get('/vcs/contents/%s' % self.content_sha1_id) # then assert rv.status_code == 200 data = serial.loads(rv.data) assert data['id'] == '222222f9dd5dc46ee476a8be155ab049994f717e' @istest def get_content_not_found(self): # when rv = self.app.get('/vcs/contents/222222f9dd5dc46ee476a8be155ab049994f7170') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def get_content_not_found_with_bad_format(self): # when rv = self.app.get('/vcs/contents/1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def put_content_create_and_update(self): content_sha1 = '62cdb7020ff920e5aa642c3d4066950dd1f01f4d' # real sha1 of 'bar' # does not exist rv = self.app.get('/vcs/contents/%s' % content_sha1) # then assert rv.status_code == 404 assert rv.data == b'Not found!' # we create it body = {'id': content_sha1, 'git-sha1': 'content-sha1c46ee476a8be155ab03333333333', 'content-sha256': 'content-sha2566ee476a8be155ab03333333333', 'content': b'bar', 'size': '3'} rv = self.app.put('/vcs/contents/%s' % content_sha1, data=serial.dumps(body), headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # now it exists rv = self.app.get('/vcs/contents/%s' % content_sha1) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == content_sha1 # # we update it body = {'id': content_sha1, 'content-sha1': 'content-sha1c46ee476a8be155ab03333333333', 'content-sha256': 'content-sha2566ee476a8be155ab03333333333', 'content': b'bar', 'size': '3'} rv = self.app.put('/vcs/contents/%s' % content_sha1, data=serial.dumps(body), headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # still the same rv = self.app.get('/vcs/contents/%s' % content_sha1) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == content_sha1 diff --git a/swh/loader/git/tests/test_api_directory.py b/swh/loader/git/tests/test_api_directory.py index 579c687..7654eec 100644 --- a/swh/loader/git/tests/test_api_directory.py +++ b/swh/loader/git/tests/test_api_directory.py @@ -1,118 +1,120 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial -from test_utils import now, app_client, app_client_teardown +from test_utils import app_client, app_client_teardown @attr('slow') class DirectoryTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, self.content_storage_dir = app_client() with db.connect(db_url) as db_conn: self.content_sha1_id = 'content-sha1c46ee476a8be155ab049994f717e' content_sha1_hex = 'content-sha1c46ee476a8be155ab049994f717e' content_sha256_hex = 'content-sha2566ee476a8be155ab049994f717e' models.add_content(db_conn, self.content_sha1_id, content_sha1_hex, content_sha256_hex, 10) self.directory_sha1_hex = 'directory-sha16ee476a8be155ab049994f717e' models.add_directory(db_conn, self.directory_sha1_hex) self.directory_sha1_put = 'directory-sha36ee476a8be155ab049994f717e' models.add_directory(db_conn, self.directory_sha1_put) - def tearDown(self): + @classmethod + def tearDownClass(self): app_client_teardown(self.content_storage_dir) @istest def get_directory_ok(self): # when rv = self.app.get('/vcs/directories/%s' % self.directory_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == 'directory-sha16ee476a8be155ab049994f717e' @istest def get_directory_not_found(self): # when rv = self.app.get('/vcs/directories/111111f9dd5dc46ee476a8be155ab049994f7170') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def get_directory_not_found_with_bad_format(self): # when rv = self.app.get('/vcs/directories/1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def put_directory_create_and_update(self): directory_sha1='directory-sha16ee476a8be155ab049994f7170' # does not exist rv = self.app.get('/vcs/directories/%s' % directory_sha1) # then assert rv.status_code == 404 assert rv.data == b'Not found!' # we create it body = serial.dumps({'entry-files': [{'name': 'filename', 'target-sha1': self.content_sha1_id, 'perms': '000', 'atime': None, 'mtime': None, 'ctime': None}], 'entry-dirs': [{'name': 'dirname', 'target-sha1': self.directory_sha1_put, 'perms': '012', 'atime': None, 'mtime': None, 'ctime': None}] }) rv = self.app.put('/vcs/directories/%s' % directory_sha1, data=body, headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # now it exists rv = self.app.get('/vcs/directories/%s' % directory_sha1) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == 'directory-sha16ee476a8be155ab049994f7170' # we update it rv = self.app.put('/vcs/directories/directory-sha16ee476a8be155ab049994f7170', data=serial.dumps({'entry-files': 'directory-bar'}), headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # still the same rv = self.app.get('/vcs/directories/directory-sha16ee476a8be155ab049994f7170') # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == 'directory-sha16ee476a8be155ab049994f7170' diff --git a/swh/loader/git/tests/test_api_home.py b/swh/loader/git/tests/test_api_home.py index 3352151..99f7edc 100644 --- a/swh/loader/git/tests/test_api_home.py +++ b/swh/loader/git/tests/test_api_home.py @@ -1,43 +1,44 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from test_utils import app_client @attr('slow') class HomeTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, _, _ = app_client() @istest def get_slash(self): # when rv = self.app.get('/') # then assert rv.status_code == 200 assert rv.data == b'Dev SWH API' @istest def get_404(self): # when rv = self.app.get('/nowhere') # then assert rv.status_code == 404 @istest def get_bad_request(self): # when rv = self.app.get('/vcs/not-a-good-type/1') # then assert rv.status_code == 400 assert rv.data == b'Bad request!' diff --git a/swh/loader/git/tests/test_api_origin.py b/swh/loader/git/tests/test_api_origin.py index 5689147..f6dfcaa 100644 --- a/swh/loader/git/tests/test_api_origin.py +++ b/swh/loader/git/tests/test_api_origin.py @@ -1,98 +1,99 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import app_client @attr('slow') class OriginTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, _ = app_client() with db.connect(db_url) as db_conn: self.origin_url = 'https://github.com/torvalds/linux.git' self.origin_type = 'git' self.origin_id = models.add_origin(db_conn, self.origin_url, self.origin_type) @istest def get_origin_ok(self): # when payload = {'url': self.origin_url, 'type': self.origin_type} rv = self.app.post('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == self.origin_id @istest def get_origin_not_found(self): # when payload = {'url': 'unknown', 'type': 'blah'} rv = self.app.post('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 404 assert rv.data == b'Origin not found!' @istest def get_origin_not_found_with_bad_format(self): # when rv = self.app.post('/vcs/origins/', data=serial.dumps({'url': 'unknown'}), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 400 @istest def put_origin(self): # when payload = {'url': 'unknown', 'type': 'blah'} rv = self.app.post('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 404 assert rv.data == b'Origin not found!' # when rv = self.app.put('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 # FIXME: 201 assert serial.loads(rv.data)['id'] payload = {'url': 'unknown', 'type': 'blah'} rv = self.app.post('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 origin_id = serial.loads(rv.data)['id'] assert origin_id # when rv = self.app.put('/vcs/origins/', data=serial.dumps(payload), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 # FIXME: 204 assert serial.loads(rv.data)['id'] == origin_id diff --git a/swh/loader/git/tests/test_api_person.py b/swh/loader/git/tests/test_api_person.py index 8c52f17..85e87fa 100644 --- a/swh/loader/git/tests/test_api_person.py +++ b/swh/loader/git/tests/test_api_person.py @@ -1,98 +1,99 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import app_client @attr('slow') class PersonTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, _ = app_client() with db.connect(db_url) as db_conn: self.person_name = 'some-name' self.person_email = 'some@mail.git' self.person_id = models.add_person(db_conn, self.person_name, self.person_email) @istest def get_person_ok(self): # when person = {'name': self.person_name, 'email': self.person_email} rv = self.app.post('/vcs/persons/', data=serial.dumps(person), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == self.person_id @istest def get_person_not_found(self): # when person = {'name': 'unknown', 'email': 'blah'} rv = self.app.post('/vcs/persons/', data=serial.dumps(person), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 404 assert rv.data == b'Person not found!' @istest def get_person_not_found_with_bad_format(self): # when rv = self.app.post('/vcs/persons/', data=serial.dumps({'name': 'unknown'}), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 400 @istest def put_person(self): # when person = {'name': 'unknown', 'email': 'blah'} rv = self.app.post('/vcs/persons/', data=serial.dumps(person), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 404 assert rv.data == b'Person not found!' # when rv = self.app.put('/vcs/persons/', data=serial.dumps([person]), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 204 assert rv.data == b'' person = {'name': 'unknown', 'email': 'blah'} rv = self.app.post('/vcs/persons/', data=serial.dumps(person), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 person_id = serial.loads(rv.data)['id'] assert person_id # when rv = self.app.put('/vcs/persons/', data=serial.dumps([person, person]), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 204 assert rv.data == b'' diff --git a/swh/loader/git/tests/test_api_post_per_type.py b/swh/loader/git/tests/test_api_post_per_type.py index d8332de..c508cc8 100644 --- a/swh/loader/git/tests/test_api_post_per_type.py +++ b/swh/loader/git/tests/test_api_post_per_type.py @@ -1,215 +1,218 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import now, app_client, app_client_teardown @attr('slow') class TestPostObjectsPerTypeCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, self.db_url, self.content_storage_dir = app_client() with db.connect(self.db_url) as db_conn: self.content_sha1_id = 'sha1-content0-6ee476a8be155ab049994f717e' self.content_sha256_hex = 'sha256-content0-e476a8be155ab049994f717e' models.add_content(db_conn, self.content_sha1_id, self.content_sha1_id, self.content_sha256_hex, 10) self.directory_sha1_hex = 'directory-sha1-ee476a8be155ab049994f717e' models.add_directory(db_conn, self.directory_sha1_hex) authorAndCommitter = {'name': 'some-name', 'email': 'some-email'} models.add_person(db_conn, authorAndCommitter['name'], authorAndCommitter['email']) authorAndCommitter2 = {'name': 'tony', 'email': 'tony@dude.org'} models.add_person(db_conn, authorAndCommitter2['name'], authorAndCommitter2['email']) self.revision_sha1_hex = 'revision-sha1-to-test-existence9994f717e' models.add_revision(db_conn, self.revision_sha1_hex, now(), now(), self.directory_sha1_hex, "revision message", authorAndCommitter, authorAndCommitter) self.revision_sha1_hex2 = 'revision-sha1-2-for-testing-put-occurr' models.add_revision(db_conn, self.revision_sha1_hex2, now(), now(), self.directory_sha1_hex, "revision message", authorAndCommitter2, authorAndCommitter2, parent_shas=['revision-sha1-to-test-existence9994f717e']) self.release_sha1_hex = 'release-sha1-to-test-existence1234567901' models.add_release(db_conn, self.release_sha1_hex, self.revision_sha1_hex, now(), "0.0.1", "Super release tagged by tony", authorAndCommitter2) self.origin_url = "https://github.com/user/repo" models.add_origin(db_conn, self.origin_url, 'git') - models.add_occurrence(db_conn, - self.origin_url, - 'master', - self.revision_sha1_hex) + models.add_occurrence_history(db_conn, + self.origin_url, + 'master', + self.revision_sha1_hex, + 'softwareheritage') - def tearDown(self): + @classmethod + def tearDownClass(self): app_client_teardown(self.content_storage_dir) @istest def post_all_non_presents_contents(self): # given # when payload = [self.content_sha1_id, '555444f9dd5dc46ee476a8be155ab049994f717e', '555444f9dd5dc46ee476a8be155ab049994f717e', '666777f9dd5dc46ee476a8be155ab049994f717e'] query_payload = serial.dumps(payload) rv = self.app.post('/vcs/contents/', data=query_payload, headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 sha1s = serial.loads(rv.data) assert len(sha1s) is 2 # only 2 sha1s assert "666777f9dd5dc46ee476a8be155ab049994f717e" in sha1s assert "555444f9dd5dc46ee476a8be155ab049994f717e" in sha1s @istest def post_all_non_presents_directories(self): # given # when payload = [self.directory_sha1_hex, '555444f9dd5dc46ee476a8be155ab049994f717e', '555444f9dd5dc46ee476a8be155ab049994f717e', '666777f9dd5dc46ee476a8be155ab049994f717e'] query_payload = serial.dumps(payload) rv = self.app.post('/vcs/directories/', data=query_payload, headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 sha1s = serial.loads(rv.data) assert len(sha1s) is 2 # only 2 sha1s assert "666777f9dd5dc46ee476a8be155ab049994f717e" in sha1s assert "555444f9dd5dc46ee476a8be155ab049994f717e" in sha1s @istest def post_all_non_presents_revisions(self): # given # when payload = [self.revision_sha1_hex, self.revision_sha1_hex, '555444f9dd5dc46ee476a8be155ab049994f717e', '555444f9dd5dc46ee476a8be155ab049994f717e', '666777f9dd5dc46ee476a8be155ab049994f717e'] query_payload = serial.dumps(payload) rv = self.app.post('/vcs/revisions/', data=query_payload, headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 sha1s = serial.loads(rv.data) assert len(sha1s) is 2 # only 2 sha1s assert "666777f9dd5dc46ee476a8be155ab049994f717e" in sha1s assert "555444f9dd5dc46ee476a8be155ab049994f717e" in sha1s @istest def post_all_non_presents_releases(self): # given # when payload = [self.release_sha1_hex, self.release_sha1_hex, '555444f9dd5dc46ee476a8be155ab049994f717e', '555444f9dd5dc46ee476a8be155ab049994f717e', '666777f9dd5dc46ee476a8be155ab049994f717e'] query_payload = serial.dumps(payload) rv = self.app.post('/vcs/releases/', data=query_payload, headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 400 assert rv.data == b'Bad request. Type not supported!' @istest def post_all_non_presents_occurrences_KO(self): # given # when payload = [self.revision_sha1_hex, self.revision_sha1_hex, '555444f9dd5dc46ee476a8be155ab049994f717e', '555444f9dd5dc46ee476a8be155ab049994f717e', '666777f9dd5dc46ee476a8be155ab049994f717e'] query_payload = serial.dumps(payload) rv = self.app.post('/vcs/occurrences/', data=query_payload, headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 400 assert rv.data == b'Bad request. Type not supported!' @istest def post_non_presents_objects_empty_payload_so_empty_results(self): # given # when for api_type in ['contents', 'directories', 'revisions']: rv = self.app.post('/vcs/%s/' % api_type, data=serial.dumps({}), headers={'Content-Type': serial.MIMETYPE}) # then assert rv.status_code == 200 assert serial.loads(rv.data) == [] @istest def post_non_presents_objects_bad_requests_format_pickle(self): # given # when for api_type in ['contents', 'directories', 'revisions']: rv = self.app.post('/vcs/%s/' % api_type, data="not pickle -> fail") # then assert rv.status_code == 400 assert rv.data == b'Bad request. Expected application/octet-stream data!' diff --git a/swh/loader/git/tests/test_api_release.py b/swh/loader/git/tests/test_api_release.py index d6c4ad7..8e9252b 100644 --- a/swh/loader/git/tests/test_api_release.py +++ b/swh/loader/git/tests/test_api_release.py @@ -1,120 +1,121 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import now, app_client, app_client_teardown @attr('slow') class ReleaseTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, self.content_storage_dir = app_client() with db.connect(db_url) as db_conn: self.directory_sha1_hex = 'directory-sha16ee476a8be155ab049994f717e' models.add_directory(db_conn, self.directory_sha1_hex) self.tagAuthor = {'name': 'tony', 'email': 'tony@mail.org'} models.add_person(db_conn, self.tagAuthor['name'], self.tagAuthor['email']) self.revision_sha1_hex = 'revision-sha1-to-test-existence9994f717e' models.add_revision(db_conn, self.revision_sha1_hex, now(), now(), self.directory_sha1_hex, "revision message", self.tagAuthor, self.tagAuthor) self.release_sha1_hex = 'release-sha1-to-test-existence1234567901' models.add_release(db_conn, self.release_sha1_hex, self.revision_sha1_hex, now(), "0.0.1", "Super release tagged by tony", self.tagAuthor) - - def tearDown(self): + @classmethod + def tearDownClass(self): app_client_teardown(self.content_storage_dir) @istest def get_release_ok(self): # when rv = self.app.get('/vcs/releases/%s' % self.release_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == self.release_sha1_hex @istest def get_release_not_found(self): # when rv = self.app.get('/vcs/releases/inexistant-sha1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def get_release_not_found_with_bad_format(self): # when rv = self.app.get('/vcs/releases/1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def put_release_create_and_update(self): release_sha1_hex = 'sha1-release46ee476a8be155ab049994f717e' rv = self.app.get('/vcs/releases/%s' % release_sha1_hex) # then assert rv.status_code == 404 assert rv.data == b'Not found!' # we create it body = serial.dumps({'id': release_sha1_hex, 'revision': self.revision_sha1_hex, 'date': now(), 'name': '0.0.1', 'comment': 'super release tagged by ardumont', 'author': self.tagAuthor}) rv = self.app.put('/vcs/releases/%s' % release_sha1_hex, data=body, headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # now it exists rv = self.app.get('/vcs/releases/%s' % release_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == release_sha1_hex # we update it rv = self.app.put('/vcs/releases/%s' % release_sha1_hex, data=body, headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # still the same rv = self.app.get('/vcs/releases/%s' % release_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == release_sha1_hex diff --git a/swh/loader/git/tests/test_api_revision.py b/swh/loader/git/tests/test_api_revision.py index 4f90968..c1dbb8b 100644 --- a/swh/loader/git/tests/test_api_revision.py +++ b/swh/loader/git/tests/test_api_revision.py @@ -1,134 +1,136 @@ # Copyright (C) 2015 The Software Heritage developers # See the AUTHORS file at the top-level directory of this distribution # License: GNU General Public License version 3, or any later version # See top-level LICENSE file for more information import unittest from nose.tools import istest from nose.plugins.attrib import attr from swh.loader.git.storage import db, models from swh.loader.git.protocols import serial from test_utils import now, app_client, app_client_teardown @attr('slow') class RevisionTestCase(unittest.TestCase): - def setUp(self): + @classmethod + def setUpClass(self): self.app, db_url, self.content_storage_dir = app_client() with db.connect(db_url) as db_conn: self.directory_sha1_hex = 'directory-sha16ee476a8be155ab049994f717e' models.add_directory(db_conn, self.directory_sha1_hex) self.authorAndCommitter = {'name': 'some-name', 'email': 'some-email'} models.add_person(db_conn, self.authorAndCommitter['name'], self.authorAndCommitter['email']) self.revision_parent_sha1_hex = 'revision-sha1-to-test-existence9994f717e' models.add_revision(db_conn, self.revision_parent_sha1_hex, now(), now(), self.directory_sha1_hex, "revision message", self.authorAndCommitter, self.authorAndCommitter) self.revision_parent_2_sha1_hex = 'revision-sha1-to-test-as-parent-994f717e' models.add_revision(db_conn, self.revision_parent_2_sha1_hex, now(), now(), self.directory_sha1_hex, "revision message 2", self.authorAndCommitter, self.authorAndCommitter) self.revision_parent_3_sha1_hex = 'revision-sha1-to-test-as-parent-3-4f717e' models.add_revision(db_conn, self.revision_parent_3_sha1_hex, now(), now(), self.directory_sha1_hex, "revision message 3", self.authorAndCommitter, self.authorAndCommitter) - def tearDown(self): + @classmethod + def tearDownClass(self): app_client_teardown(self.content_storage_dir) @istest def get_revision_ok(self): # when rv = self.app.get('/vcs/revisions/%s' % self.revision_parent_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == self.revision_parent_sha1_hex @istest def get_revision_not_found(self): # when rv = self.app.get('/vcs/revisions/inexistant-sha1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def get_revision_not_found_with_bad_format(self): # when rv = self.app.get('/vcs/revisions/1') # then assert rv.status_code == 404 assert rv.data == b'Not found!' @istest def put_revision_create_and_update(self): revision_sha1_hex = 'sha1-revision46ee476a8be155ab049994f717e' rv = self.app.get('/vcs/revisions/%s' % revision_sha1_hex) # then assert rv.status_code == 404 assert rv.data == b'Not found!' # we create it body = serial.dumps({'date': now(), 'committer-date': now(), 'directory': self.directory_sha1_hex, 'message': 'revision message describing it', 'committer': self.authorAndCommitter, 'author': self.authorAndCommitter, 'parent-sha1s': [self.revision_parent_sha1_hex, self.revision_parent_3_sha1_hex, self.revision_parent_2_sha1_hex]}) rv = self.app.put('/vcs/revisions/%s' % revision_sha1_hex, data=body, headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # now it exists rv = self.app.get('/vcs/revisions/%s' % revision_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == revision_sha1_hex # we update it rv = self.app.put('/vcs/revisions/%s' % revision_sha1_hex, data=body, headers={'Content-Type': serial.MIMETYPE}) assert rv.status_code == 204 assert rv.data == b'' # still the same rv = self.app.get('/vcs/revisions/%s' % revision_sha1_hex) # then assert rv.status_code == 200 assert serial.loads(rv.data)['id'] == revision_sha1_hex