예제 #1
0
def create_cart(file_ids, uid):
    """Create the cart or update previous"""
    Cart.database_connect()
    mycart = Cart(cart_uid=uid, status='staging')
    mycart.save()
    stage_files.delay(file_ids, mycart.id)
    Cart.database_close()
    def test_read_cart_ioerrror(self):
        """Testing the cart interface get against not ready cart"""
        def start_response(*args):
            """stub for start_response to do some checking"""
            self.assertEqual(args[0], '404 Not Found')
            self.assertEqual(args[1][0][0], 'Content-Type')
            self.assertEqual(args[1][0][1], 'application/json')

        env = {'PATH_INFO': '/123', 'QUERY_STRING': ''}
        with test_database(self.sqlite_db, (Cart, File)):
            sample_cart = Cart()
            sample_cart.cart_uid = 123
            sample_cart.bundle_path = mkdtemp()
            sample_cart.status = 'ready'
            sample_cart.save(force_insert=True)
            self.sqlite_db.close()
            cgen = CartGenerator()
            orig_fork = os.fork

            def bad_fork():
                """The get method trys to fork so replacing it with a method that fails.
                """
                raise IOError('failed to fork')

            os.fork = bad_fork
            data = cgen.get(env, start_response)
            self.assertEqual(
                loads(data)['message'], 'The cart bundle does not exist')
            os.fork = orig_fork
    def test_cart_int_get(self):
        """Testing the cart interface get method"""
        saved_state = {}

        def start_response(*args):
            """stub for start_response to do some checking"""
            self.assertEqual(args[0], '200 OK')
            self.assertEqual(args[1][0][0], 'Content-Type')
            self.assertEqual(args[1][0][1], 'application/octet-stream')

        def file_wrapper(rfd, blksize):
            """stub for file_wrapper to do some checking"""
            self.assertEqual(blksize, 1 << 20)
            self.assertEqual(type(rfd), file)
            saved_state['fd'] = rfd
            return iter(lambda: rfd.read(blksize), '')

        env = {
            'PATH_INFO': '/123',
            'wsgi.file_wrapper': file_wrapper,
            'QUERY_STRING': 'filename=my_file.tar'
        }
        with test_database(self.sqlite_db, (Cart, File)):
            sample_cart = Cart()
            sample_cart.cart_uid = 123
            sample_cart.bundle_path = mkdtemp()
            sample_cart.status = 'ready'
            sample_cart.save(force_insert=True)
            self.sqlite_db.close()
            cgen = CartGenerator()
            tarfile_read = cgen.get(env, start_response)
            for buf in tarfile_read:
                self.assertTrue(len(buf) > 0)
            saved_state['fd'].close()
예제 #4
0
 def test_prep_bundle_staging(self):
     """test getting bundle ready with a file in staging state"""
     data = json.loads(cart_json_helper())
     file_ids = data['fileids']
     Cart.database_connect()
     mycart = Cart(cart_uid=343, status='staging')
     mycart.save()
     cart_utils = Cartutils()
     cart_utils.update_cart_files(mycart, file_ids)
     get_files_locally(mycart.id)
     for cart_file in File.select().where(File.cart == mycart.id):
         cart_file.status = 'staging'
         cart_file.save()
     cart_utils.prepare_bundle(
         mycart.id)  #hitting more coverage, set files to staged
     for cart_file in File.select().where(File.cart == mycart.id):
         cart_file.status = 'staged'
         cart_file.save()
     cart_utils.prepare_bundle(mycart.id)  #call again after file update
     status = mycart.status
     cartid = mycart.id
     while status == 'staging':
         mycart = Cart.get(Cart.id == cartid)
         status = mycart.status
     Cart.database_close()
     self.assertEqual(status, 'ready')
예제 #5
0
 def test_stage_files(self):
     """test getting bundle files ready"""
     data = json.loads(cart_json_helper())
     file_ids = data['fileids']
     Cart.database_connect()
     mycart = Cart(cart_uid=747, status='staging')
     mycart.save()
     cart_utils = Cartutils()
     cart_utils.update_cart_files(mycart, file_ids)
     stage_files(file_ids, mycart.id)
     cart_utils.prepare_bundle(mycart.id)
     status = mycart.status
     cartid = mycart.id
     while status == 'staging':
         mycart = Cart.get(Cart.id == cartid)
         status = mycart.status
     Cart.database_close()
     self.assertEqual(status, 'ready')
예제 #6
0
 def test_cart_deleted_date(self):
     """test getting bundle ready with a file in staging state"""
     data = json.loads(cart_json_helper())
     file_ids = data['fileids']
     Cart.database_connect()
     mycart = Cart(cart_uid=444, status='staging')
     mycart.save()
     cart_utils = Cartutils()
     cart_utils.update_cart_files(mycart, file_ids)
     get_files_locally(mycart.id)
     mycart.status = 'deleted'
     mycart.deleted_date = datetime.datetime.now()
     mycart.save()
     status = mycart.status
     for cart_file in File.select().where(File.cart == mycart.id):
         pull_file(cart_file.id, '/tmp/some/Path', '1111', False)
     Cart.database_close()
     self.assertEqual(status, 'deleted')
    def test_not_ready_cart(self):
        """Testing the cart interface get against not ready cart"""
        def start_response(*args):
            """stub for start_response to do some checking"""
            self.assertEqual(args[0], '202 Accepted')
            self.assertEqual(args[1][0][0], 'Content-Type')
            self.assertEqual(args[1][0][1], 'application/json')

        env = {'PATH_INFO': '/123', 'QUERY_STRING': ''}
        with test_database(self.sqlite_db, (Cart, File)):
            sample_cart = Cart()
            sample_cart.cart_uid = 123
            sample_cart.bundle_path = mkdtemp()
            sample_cart.save(force_insert=True)
            self.sqlite_db.close()
            cgen = CartGenerator()
            data = cgen.get(env, start_response)
            self.assertEqual(
                loads(data)['message'], 'The cart is not ready for download')
    def test_cart_int_get_no_file_fd(self):
        """Testing the cart interface get method w/o file_wrapper"""
        def start_response(*args):
            """stub for start_response to do some checking"""
            self.assertEqual(args[0], '200 OK')
            self.assertEqual(args[1][0][0], 'Content-Type')
            self.assertEqual(args[1][0][1], 'application/octet-stream')

        env = {'PATH_INFO': '/123', 'QUERY_STRING': ''}
        with test_database(self.sqlite_db, (Cart, File)):
            sample_cart = Cart()
            sample_cart.cart_uid = 123
            sample_cart.bundle_path = mkdtemp()
            sample_cart.status = 'ready'
            sample_cart.save(force_insert=True)
            self.sqlite_db.close()
            cgen = CartGenerator()
            tarfile_read = cgen.get(env, start_response)
            for buf in tarfile_read:
                self.assertTrue(len(buf) > 0)
예제 #9
0
 def test_prep_bundle_error(self):
     """test getting bundle ready with a file in error state"""
     data = json.loads(cart_json_helper())
     file_ids = data['fileids']
     Cart.database_connect()
     mycart = Cart(cart_uid=343, status='staging')
     mycart.save()
     cart_utils = Cartutils()
     cart_utils.update_cart_files(mycart, file_ids)
     get_files_locally(mycart.id)
     for cart_file in File.select().where(File.cart == mycart.id):
         cart_file.status = 'error'
         cart_file.save()
     cart_utils.prepare_bundle(mycart.id)
     status = mycart.status
     cartid = mycart.id
     while status == 'staging':
         mycart = Cart.get(Cart.id == cartid)
         status = mycart.status
     Cart.database_close()
     self.assertEqual(status, 'error')
예제 #10
0
    def test_cart_int_delete(self):
        """Testing the cart interface delete"""
        def start_response(*args):
            """stub for start_response to do some checking"""
            self.assertEqual(args[0], '200 OK')
            self.assertEqual(args[1][0][0], 'Content-Type')
            self.assertEqual(args[1][0][1], 'application/json')

        env = {'PATH_INFO': '/123', 'QUERY_STRING': ''}
        with test_database(self.sqlite_db, (Cart, File)):
            sample_cart = Cart()
            sample_cart.cart_uid = 123
            sample_cart.bundle_path = mkdtemp()
            sample_cart.status = 'ready'
            sample_cart.save(force_insert=True)
            sample_cart.reload()
            path_to_files = os.path.join(VOLUME_PATH, str(sample_cart.id))
            os.makedirs(path_to_files)
            self.sqlite_db.close()
            cgen = CartGenerator()
            data = cgen.delete_cart(env, start_response)
            self.assertEqual(
                loads(data)['message'], 'Cart Deleted Successfully')