def test_driver_add_object_record():
    """
    Tests creation of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        driver.add("object")

        count = conn.execute(
            """
            SELECT COUNT(*) FROM index_record
        """
        ).fetchone()[0]

        assert count == 1, "driver did not create record"

        record = conn.execute(
            """
            SELECT * FROM index_record
        """
        ).fetchone()

        assert record[0], "record id not populated"
        assert record[1], "record baseid not populated"
        assert record[2], "record rev not populated"
        assert record[3] == "object", "record form is not object"
        assert record[4] is None, "record size non-null"
Esempio n. 2
0
def test_driver_get_latest_version_with_no_record():
    '''
    Tests retrieval of the lattest record version
    '''
    with sqlite3.connect('index.sq3') as conn:
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        for _ in range(10):

            did = str(uuid.uuid4())
            rev = str(uuid.uuid4())[:8]
            size = 512
            form = 'object'
            baseid = str(uuid.uuid4())
            dt = datetime.now()

            conn.execute(
                '''
                INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) VALUES (?,?,?,?,?,?,?)
            ''', (did, baseid, rev, form, size, dt, dt))

            conn.commit()

        with pytest.raises(NoRecordFound):
            driver.get_latest_version('some base version')
def test_driver_add_with_hashes():
    '''
    Tests creation of a record with hashes.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        form = 'object'
        hashes = {
            'a': '1',
            'b': '2',
            'c': '3',
        }

        driver.add(form, hashes=hashes)

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]

        assert count == 1, 'driver did not create record'

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record_hash
        ''').fetchone()[0]

        assert count == 3, 'driver did not create hash(es)'

        new_hashes = {h:v for h, v in conn.execute('''
            SELECT hash_type, hash_value FROM index_record_hash
        ''')}

        assert hashes == new_hashes, 'record hashes mismatch'
def _test_driver_delete_record():
    """
    Tests deletion of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = "object"

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size) VALUES (?,?,?,?,?)
        """,
            (did, baseid, rev, form, None),
        )

        conn.commit()

        driver.delete(did, rev)

        count = conn.execute(
            """
            SELECT COUNT(*) FROM index_record
        """
        ).fetchone()[0]

        assert count == 0, "records remain after deletion"
Esempio n. 5
0
def test_driver_add_with_urls():
    """
    Tests creation of a record with urls.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        form = "object"
        urls = ["a", "b", "c"]

        driver.add(form, urls=urls)

        count = conn.execute("""
            SELECT COUNT(*) FROM index_record
        """).fetchone()[0]

        assert count == 1, "driver did not create record"

        count = conn.execute("""
            SELECT COUNT(*) FROM index_record_url
        """).fetchone()[0]

        assert count == 3, "driver did not create url(s)"

        new_urls = sorted(url[0] for url in conn.execute("""
            SELECT url FROM index_record_url
        """))

        assert urls == new_urls, "record urls mismatch"
def test_driver_add_with_hashes():
    '''
    Tests creation of a record with hashes.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        form = 'object'
        hashes = {
            'a': '1',
            'b': '2',
            'c': '3',
        }
        
        driver.add(form, hashes=hashes)
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 1, 'driver did not create record'
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record_hash
        ''').fetchone()[0]
        
        assert count == 3, 'driver did not create hash(es)'
        
        new_hashes = {h:v for h, v in conn.execute('''
            SELECT hash_type, hash_value FROM index_record_hash
        ''')}
        
        assert hashes == new_hashes, 'record hashes mismatch'
def test_driver_add_with_size():
    '''
    Tests creation of a record with size.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        form = 'object'
        size = 512
        
        driver.add(form, size=size)
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 1, 'driver did not create record'
        
        new_form, new_size = conn.execute('''
            SELECT form, size FROM index_record
        ''').fetchone()
        
        assert form == new_form, 'record form mismatch'
        assert size == new_size, 'record size mismatch'
def test_driver_add_with_urls():
    '''
    Tests creation of a record with urls.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        form = 'object'
        urls = ['a', 'b', 'c']
        
        driver.add(form, urls=urls)
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 1, 'driver did not create record'
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record_url
        ''').fetchone()[0]
        
        assert count == 3, 'driver did not create url(s)'
        
        new_urls = sorted(url[0] for url in conn.execute('''
            SELECT url FROM index_record_url
        '''))
        
        assert urls == new_urls, 'record urls mismatch'
Esempio n. 9
0
def test_driver_update_fails_with_invalid_id():
    """
    Tests updating a record fails if the record id is not found.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = "object"

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size) VALUES (?,?,?,?,?)
        """,
            (did, baseid, rev, form, None),
        )

        conn.commit()

        with pytest.raises(NoRecordFound):
            driver.update("some_record_that_does_not_exist",
                          "some_record_version", rev)
def test_driver_get_bundle():
    """
    Tests retrieval of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        bundle_id = str(uuid.uuid4())
        checksum = "iuhd91h9ufh928jidsoajh9du328"
        size = 512
        name = "object"
        created_time = updated_time = datetime.now()
        bundle_data = "{'bundle_data': [{'access_methods': [{'access_id': 's3', 'access_url': {'url': 's3://endpointurl/bucket/key'}, 'region': '', 'type': 's3'}], 'aliases': [], 'checksums': [{'checksum': '8b9942cf415384b27cadf1f4d2d682e5', 'type': 'md5'}], 'contents': [], 'created_time': '2020-04-23T21:42:36.506404', 'description': '', 'id': 'testprefix:7e677693-9da3-455a-b51c-03467d5498b0', 'mime_type': 'application/json', 'name': None, 'self_uri': 'drs://fictitious-commons.io/testprefix:7e677693-9da3-455a-b51c-03467d5498b0', 'size': 123, 'updated_time': '2020-04-23T21:42:36.506410', 'version': '3c995667'}], 'bundle_id': '1ff381ef-55c7-42b9-b33f-81ac0689d131', 'checksum': '65b464c1aea98176ef2fa38e8b6b9fc7', 'created_time': '2020-04-23T21:42:36.564808', 'name': 'test_bundle', 'size': 123, 'updated_time': '2020-04-23T21:42:36.564819'}"
        conn.execute(
            """
            INSERT INTO drs_bundle_record(bundle_id, name, checksum, size, bundle_data, created_time, updated_time) VALUES (?,?,?,?,?,?,?)
        """,
            (bundle_id, name, checksum, size, bundle_data, created_time, updated_time),
        )

        conn.commit()

        record = driver.get_bundle(bundle_id)

        assert record["id"] == bundle_id, "record id does not match"
        assert record["checksum"] == checksum, "record revision does not match"
        assert record["size"] == size, "record size does not match"
        assert record["name"] == name, "record name does not match"
        assert (
            record["created_time"] == created_time.isoformat()
        ), "created date does not match"
        assert (
            record["updated_time"] == updated_time.isoformat()
        ), "created date does not match"
def test_driver_get_record():
    '''
    Tests retrieval of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        size = 512
        form = 'object'
        
        conn.execute('''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, size))
        
        conn.commit()
        
        record = driver.get(did)
        
        assert record['did'] == did, 'record id does not match'
        assert record['rev'] == rev, 'record revision does not match'
        assert record['size'] == size, 'record size does not match'
        assert record['form'] == form, 'record form does not match'
Esempio n. 12
0
def test_driver_add_with_size():
    '''
    Tests creation of a record with size.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        form = 'object'
        size = 512

        driver.add(form, size=size)

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]

        assert count == 1, 'driver did not create record'

        new_form, new_size = conn.execute('''
            SELECT form, size FROM index_record
        ''').fetchone()

        assert form == new_form, 'record form mismatch'
        assert size == new_size, 'record size mismatch'
def test_driver_nonstrict_get_with_incorrect_prefix():
    """
    Tests retrieval of a record fails if default prefix is set and request uses a different prefix with same uuid
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver(
            "sqlite:///index.sq3",
            index_config={
                "DEFAULT_PREFIX": "testprefix/",
                "PREPEND_PREFIX": True,
                "ADD_PREFIX_ALIAS": False,
            },
        )

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        size = 512
        form = "object"
        baseid = str(uuid.uuid4())
        created_date = datetime.now()
        updated_date = datetime.now()

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) VALUES (?,?,?,?,?,?,?)
        """,
            ("testprefix/" + did, baseid, rev, form, size, created_date, updated_date),
        )

        conn.commit()

        with pytest.raises(NoRecordFound):
            driver.get_with_nonstrict_prefix("wrongprefix/" + did)
Esempio n. 14
0
def test_driver_add_with_urls():
    '''
    Tests creation of a record with urls.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        form = 'object'
        urls = ['a', 'b', 'c']

        driver.add(form, urls=urls)

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]

        assert count == 1, 'driver did not create record'

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record_url
        ''').fetchone()[0]

        assert count == 3, 'driver did not create url(s)'

        new_urls = sorted(url[0] for url in conn.execute('''
            SELECT url FROM index_record_url
        '''))

        assert urls == new_urls, 'record urls mismatch'
Esempio n. 15
0
def test_driver_delete_record():
    '''
    Tests deletion of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'

        conn.execute(
            '''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, None))

        conn.commit()

        driver.delete(did, rev)

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]

        assert count == 0, 'records remain after deletion'
Esempio n. 16
0
def test_driver_get_record():
    '''
    Tests retrieval of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        size = 512
        form = 'object'

        conn.execute(
            '''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, size))

        conn.commit()

        record = driver.get(did)

        assert record['did'] == did, 'record id does not match'
        assert record['rev'] == rev, 'record revision does not match'
        assert record['size'] == size, 'record size does not match'
        assert record['form'] == form, 'record form does not match'
def test_driver_add_with_size():
    """
    Tests creation of a record with size.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        form = "object"
        size = 512

        driver.add(form, size=size)

        count = conn.execute(
            """
            SELECT COUNT(*) FROM index_record
        """
        ).fetchone()[0]

        assert count == 1, "driver did not create record"

        new_form, new_size = conn.execute(
            """
            SELECT form, size FROM index_record
        """
        ).fetchone()

        assert form == new_form, "record form mismatch"
        assert size == new_size, "record size mismatch"
def test_driver_add_bundles_record():
    """
    Tests creation of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        driver.add_bundle(name="bundle")

        count = conn.execute(
            """
            SELECT COUNT(*) FROM drs_bundle_record
        """
        ).fetchone()[0]

        assert count == 1, "driver did not create record"

        record = conn.execute(
            """
            SELECT * FROM drs_bundle_record
        """
        ).fetchone()
        assert record[0], "record id not populated"
        assert record[1], "record name not populated"
        assert record[1] == "bundle", "record name is not bundle"
        assert record[2], "record created date not populated"
        assert record[3], "record updated date not populated"
def test_driver_add_bundle_record():
    """
    Tests creation of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        driver.add_blank_bundle()

        count = conn.execute(
            """
            SELECT COUNT(*) FROM drs_bundle_record
        """
        ).fetchone()[0]

        assert count == 1, "driver did not create record"

        record = conn.execute(
            """
            SELECT * FROM drs_bundle_record
        """
        ).fetchone()

        assert record != None
        assert len(record) == 10
Esempio n. 20
0
def test_driver_add_container_record():
    '''
    Tests creation of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        driver.add('container')

        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]

        assert count == 1, 'driver did not create record'

        record = conn.execute('''
            SELECT * FROM index_record
        ''').fetchone()

        assert record[0], 'record id not populated'
        assert record[1], 'record baseid not populated'
        assert record[2], 'record rev not populated'
        assert record[3] == 'container', 'record form is not container'
        assert record[4] == None, 'record size non-null'
def test_driver_get_all_versions_with_no_record():
    """
    Tests retrieval of the lattest record version
    """
    with sqlite3.connect("index.sq3") as conn:
        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")
        baseid = str(uuid.uuid4())

        for _ in range(3):

            did = str(uuid.uuid4())
            rev = str(uuid.uuid4())[:8]
            size = 512
            form = "object"

            conn.execute(
                """
                INSERT INTO index_record(did, baseid, rev, form, size) VALUES (?,?,?,?,?)
            """,
                (did, baseid, rev, form, size),
            )

        conn.commit()

        with pytest.raises(NoRecordFound):
            driver.get_all_versions("some baseid")
Esempio n. 22
0
def test_driver_add_with_hashes():
    """
    Tests creation of a record with hashes.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        form = "object"
        hashes = {"a": "1", "b": "2", "c": "3"}

        driver.add(form, hashes=hashes)

        count = conn.execute("""
            SELECT COUNT(*) FROM index_record
        """).fetchone()[0]

        assert count == 1, "driver did not create record"

        count = conn.execute("""
            SELECT COUNT(*) FROM index_record_hash
        """).fetchone()[0]

        assert count == 3, "driver did not create hash(es)"

        new_hashes = {
            h: v
            for h, v in conn.execute("""
            SELECT hash_type, hash_value FROM index_record_hash
        """)
        }

        assert hashes == new_hashes, "record hashes mismatch"
Esempio n. 23
0
def test_driver_get_latest_version():
    '''
    Tests retrieval of the lattest record version
    '''
    with sqlite3.connect('index.sq3') as conn:
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        baseid = str(uuid.uuid4())

        for _ in range(10):

            did = str(uuid.uuid4())
            rev = str(uuid.uuid4())[:8]
            size = 512
            form = 'object'
            baseid = str(uuid.uuid4())
            created_date = datetime.now()
            updated_date = datetime.now()

            conn.execute(
                '''
                INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) VALUES (?,?,?,?,?,?,?)
            ''', (did, baseid, rev, form, size, created_date, updated_date))

            conn.commit()

        record = driver.get_latest_version(did)

        assert record['did'] == did, 'record id does not match'
        assert record['rev'] == rev, 'record revision does not match'
        assert record['size'] == size, 'record size does not match'
        assert record['form'] == form, 'record form does not match'
        assert record['created_date'] == created_date.isoformat(
        ), 'created date does not match'
        assert record['updated_date'] == updated_date.isoformat(
        ), 'updated date does not match'
def test_driver_delete_record():
    '''
    Tests deletion of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'
        
        conn.execute('''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, None))
        
        conn.commit()
        
        driver.delete(did, rev)
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 0, 'records remain after deletion'
def test_driver_add_multiple_records():
    '''
    Tests creation of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        driver.add('object')
        driver.add('object')
        driver.add('object')
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 3, 'driver did not create record(s)'
        
        records = conn.execute('''
            SELECT * FROM index_record
        ''')
        
        for record in records:
            assert record[0], 'record id not populated'
            assert record[1], 'record rev not populated'
            assert record[2] == 'object', 'record form is not object'
            assert record[3] == None, 'record size non-null'
Esempio n. 26
0
def _test_driver_update_record():
    """
    Tests updating of a record.
    """
    with sqlite3.connect("index.sq3") as conn:

        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = "object"

        conn.execute(
            """
            INSERT INTO index_record(did, baseid, rev, form, size) VALUES (?,?,?,?,?)
        """,
            (did, baseid, rev, form, None),
        )

        conn.commit()

        # update_size = 256
        update_urls = ["a", "b", "c"]
        # update_hashes = {"a": "1", "b": "2", "c": "3"}

        file_name = "test"
        version = "ver_123"

        changing_fields = {
            "urls": update_urls,
            "file_name": file_name,
            "version": version,
        }

        driver.update(did, rev, changing_fields)

        new_did, new_rev, new_file_name, new_version = conn.execute("""
            SELECT did, rev, file_name, version FROM index_record
        """).fetchone()

        new_urls = sorted(url[0] for url in conn.execute("""
            SELECT url FROM index_record_url
        """))

        # new_hashes = {
        #     h: v
        #     for h, v in conn.execute(
        #         """
        #     SELECT hash_type, hash_value FROM index_record_hash
        # """
        #     )
        # }

        assert did == new_did, "record id does not match"
        assert rev != new_rev, "record revision matches prior"
        assert update_urls == new_urls, "record urls mismatch"
        assert file_name == new_file_name, "file_name does not match"
        assert version == new_version, "version does not match"
def test_driver_delete_fails_with_no_records():
    """
    Tests deletion of a record fails if there are no records.
    """
    driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

    with pytest.raises(NoRecordFound):
        driver.delete("some_record_that_does_not_exist", "some_revision")
def test_driver_delete_fails_with_no_records():
    '''
    Tests deletion of a record fails if there are no records.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(NoRecordFound):
        driver.delete('some_record_that_does_not_exist', 'some_revision')
def test_driver_add_fails_with_invalid_forms():
    '''
    Tests creation of a record with invalid form will fail.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(ValueError):
        driver.add('this_is_not_a_valid_form')
def test_driver_get_fails_with_no_records():
    '''
    Tests retrieval of a record fails if there are no records.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(NoRecordFound):
        driver.get('some_record_that_does_not_exist')
Esempio n. 31
0
def test_driver_delete_fails_with_no_records():
    '''
    Tests deletion of a record fails if there are no records.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(NoRecordFound):
        driver.delete('some_record_that_does_not_exist', 'some_revision')
Esempio n. 32
0
def test_driver_get_fails_with_no_records():
    '''
    Tests retrieval of a record fails if there are no records.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(NoRecordFound):
        driver.get('some_record_that_does_not_exist')
def test_driver_add_fails_with_invalid_sizes():
    '''
    Tests creation of a record with invalid size will fail.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    with pytest.raises(ValueError):
        driver.add('object', size=-1)
Esempio n. 34
0
def test_driver_update_record():
    '''
    Tests updating of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:

        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

        did = str(uuid.uuid4())
        baseid = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'

        conn.execute(
            '''
            INSERT INTO index_record(did, baseid, rev, form, size) VALUES (?,?,?,?,?)
        ''', (did, baseid, rev, form, None))

        conn.commit()

        update_size = 256
        update_urls = ['a', 'b', 'c']
        update_hashes = {
            'a': '1',
            'b': '2',
            'c': '3',
        }

        file_name = 'test'
        version = 'ver_123'

        driver.update(did,
                      rev,
                      urls=update_urls,
                      file_name=file_name,
                      version=version)

        new_did, new_rev, new_file_name, new_version = conn.execute('''
            SELECT did, rev, file_name, version FROM index_record
        ''').fetchone()

        new_urls = sorted(url[0] for url in conn.execute('''
            SELECT url FROM index_record_url
        '''))

        new_hashes = {
            h: v
            for h, v in conn.execute('''
            SELECT hash_type, hash_value FROM index_record_hash
        ''')
        }

        assert did == new_did, 'record id does not match'
        assert rev != new_rev, 'record revision matches prior'
        assert update_urls == new_urls, 'record urls mismatch'
        assert file_name == new_file_name, 'file_name does not match'
        assert version == new_version, 'version does not match'
def test_driver_add_with_filename():
    """
    Tests creation of a record with filename.
    """
    driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

    form = "object"
    file_name = "abc"
    driver.add(form, file_name=file_name)
    with driver.session as s:
        assert s.query(IndexRecord).first().file_name == "abc"
def test_driver_add_with_version():
    """
    Tests creation of a record with version string.
    """
    driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")

    form = "object"
    version = "ver_123"
    driver.add(form, version=version)
    with driver.session as s:
        assert s.query(IndexRecord).first().version == "ver_123"
def test_driver_get_all_versions():
    """
    Tests retrieval of the lattest record version
    """
    with sqlite3.connect("index.sq3") as conn:
        driver = SQLAlchemyIndexDriver("sqlite:///index.sq3")
        baseid = str(uuid.uuid4())

        NUMBER_OF_RECORD = 3

        dids = []
        revs = []
        created_dates = []
        updated_dates = []

        for _ in range(NUMBER_OF_RECORD):

            did = str(uuid.uuid4())
            rev = str(uuid.uuid4())[:8]
            size = 512
            form = "object"
            created_date = datetime.now()
            updated_date = created_date

            dids.append(did)
            revs.append(rev)
            created_dates.append(created_date)
            updated_dates.append(updated_date)

            conn.execute(
                """
                INSERT INTO index_record(did, baseid, rev, form, size, created_date, updated_date) \
                    VALUES (?,?,?,?,?,?,?)
            """,
                (did, baseid, rev, form, size, created_date, updated_date),
            )

        conn.commit()

        records = driver.get_all_versions(did)
        assert len(records) == NUMBER_OF_RECORD, "the number of records does not match"

        # make sure records are returned in creation date order
        for i, record in records.items():
            assert record["did"] == dids[i], "record id does not match"
            assert record["rev"] == revs[i], "record revision does not match"
            assert record["size"] == size, "record size does not match"
            assert record["form"] == form, "record form does not match"
            assert (
                record["created_date"] == created_dates[i].isoformat()
            ), "created date does not match"
            assert (
                record["updated_date"] == updated_dates[i].isoformat()
            ), "updated date does not match"
Esempio n. 38
0
def test_driver_add_with_version():
    '''
    Tests creation of a record with version string.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    form = 'object'
    version = 'ver_123'
    driver.add(form, version=version)
    with driver.session as s:
        assert s.query(IndexRecord).first().version == 'ver_123'
Esempio n. 39
0
def test_driver_add_with_filename():
    '''
    Tests creation of a record with filename.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    form = 'object'
    file_name = 'abc'
    driver.add(form, file_name=file_name)
    with driver.session as s:
        assert s.query(IndexRecord).first().file_name == 'abc'
Esempio n. 40
0
def test_driver_add_with_valid_did():
    '''
    Tests creation of a record with given valid did.
    '''
    driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')

    form = 'object'
    did = '3d313755-cbb4-4b08-899d-7bbac1f6e67d'
    driver.add(form, did=did)
    with driver.session as s:
        assert s.query(IndexRecord).first().did == did
def test_driver_update_record():
    '''
    Tests updating of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'
        
        conn.execute('''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, None))
        
        conn.commit()
        
        update_size = 256
        update_urls = ['a', 'b', 'c']
        update_hashes = {
            'a': '1',
            'b': '2',
            'c': '3',
        }
        
        driver.update(did, rev,
            size=update_size,
            urls=update_urls,
            hashes=update_hashes,
        )
        
        new_did, new_rev, new_form, new_size = conn.execute('''
            SELECT did, rev, form, size FROM index_record
        ''').fetchone()
        
        new_urls = sorted(url[0] for url in conn.execute('''
            SELECT url FROM index_record_url
        '''))
        
        new_hashes = {h:v for h,v in conn.execute('''
            SELECT hash_type, hash_value FROM index_record_hash
        ''')}
        
        assert did == new_did, 'record id does not match'
        assert rev != new_rev, 'record revision matches prior'
        assert form == new_form, 'record form does not match'
        assert update_size == new_size, 'record size mismatch'
        assert update_urls == new_urls, 'record urls mismatch'
        assert update_hashes == new_hashes, 'record hashes mismatch'
def test_driver_delete_fails_with_invalid_id():
    '''
    Tests deletion of a record fails if the record id is not found.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'
        
        conn.execute('''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, None))
        
        conn.commit()
        
        with pytest.raises(NoRecordFound):
            driver.delete('some_record_that_does_not_exist', rev)
def test_driver_delete_fails_with_invalid_rev():
    '''
    Tests deletion of a record fails if the record rev is not invalid.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        did = str(uuid.uuid4())
        rev = str(uuid.uuid4())[:8]
        form = 'object'
        
        conn.execute('''
            INSERT INTO index_record VALUES (?,?,?,?)
        ''', (did, rev, form, None))
        
        conn.commit()
        
        with pytest.raises(RevisionMismatch):
            driver.delete(did, 'some_revision')
def test_driver_add_container_record():
    '''
    Tests creation of a record.
    '''
    with sqlite3.connect('index.sq3') as conn:
        
        driver = SQLAlchemyIndexDriver('sqlite:///index.sq3')
        
        driver.add('container')
        
        count = conn.execute('''
            SELECT COUNT(*) FROM index_record
        ''').fetchone()[0]
        
        assert count == 1, 'driver did not create record'
        
        record = conn.execute('''
            SELECT * FROM index_record
        ''').fetchone()
        
        assert record[0], 'record id not populated'
        assert record[1], 'record rev not populated'
        assert record[2] == 'container', 'record form is not container'
        assert record[3] == None, 'record size non-null'