Exemple #1
0
    def test_canvas_sync_metadata(self, app, metadata_db):
        """When given a job id, updates metadata on file sync."""
        url = 'http://shakespeare.mit.edu/Poetry/sonnet.XLV.html'
        key = 'canvas/sonnet_submission_dim/sonnet-xlv.txt'

        with mock_s3(app):
            with open(_get_fixtures_path() + '/sonnet_xlv.html', 'r') as file:
                responses.add(responses.GET,
                              url,
                              body=file.read(),
                              headers={'Content-Length': '767'})

            # Run two successive sync jobs on the same file. The first succeeds, the second is skipped as
            # a duplicate.
            metadata.create_canvas_sync_status('job_1', 'sonnet-xlv.txt',
                                               'sonnet_submission_dim', url)
            result = SyncFileToS3().run(url=url,
                                        key=key,
                                        canvas_sync_job_id='job_1')
            assert result is True
            metadata.create_canvas_sync_status('job_2', 'sonnet-xlv.txt',
                                               'sonnet_submission_dim', url)
            result = SyncFileToS3().run(url=url,
                                        key=key,
                                        canvas_sync_job_id='job_2')
            assert result is False

            schema = app.config['REDSHIFT_SCHEMA_METADATA']
            sync_metadata = redshift.fetch(
                f'SELECT * FROM {schema}.canvas_sync_job_status')
            snapshot_metadata = redshift.fetch(
                f'SELECT * FROM {schema}.canvas_synced_snapshots')

            assert len(sync_metadata) == 2
            assert sync_metadata[0]['job_id'] == 'job_1'
            assert sync_metadata[0][
                'destination_url'] == 's3://mock-bucket/canvas/sonnet_submission_dim/sonnet-xlv.txt'
            assert sync_metadata[0]['status'] == 'complete'
            assert sync_metadata[0]['source_size'] == 767
            assert sync_metadata[0]['destination_size'] == 767
            assert sync_metadata[0]['updated_at'] > sync_metadata[0][
                'created_at']
            assert sync_metadata[1]['job_id'] == 'job_2'
            assert sync_metadata[1][
                'destination_url'] == 's3://mock-bucket/canvas/sonnet_submission_dim/sonnet-xlv.txt'
            assert sync_metadata[1]['status'] == 'duplicate'
            assert sync_metadata[1]['source_size'] is None
            assert sync_metadata[1]['destination_size'] is None
            assert sync_metadata[1]['updated_at'] > sync_metadata[1][
                'created_at']

            assert len(snapshot_metadata) == 1
            assert snapshot_metadata[0]['filename'] == 'sonnet-xlv.txt'
            assert snapshot_metadata[0][
                'canvas_table'] == 'sonnet_submission_dim'
            assert snapshot_metadata[0][
                'url'] == 's3://mock-bucket/canvas/sonnet_submission_dim/sonnet-xlv.txt'
            assert snapshot_metadata[0]['size'] == 767
            assert snapshot_metadata[0]['created_at']
            assert snapshot_metadata[0]['deleted_at'] is None
Exemple #2
0
def _create_fixtures(app, sample_csids):
    fixture_output = os.environ.get('FIXTURE_OUTPUT_PATH') or mockingbird._get_fixtures_path()
    cl = Client(app)
    cl.server.info.to_file(f'{fixture_output}/calnet_server_info.json')
    cl.server.schema.to_file(f'{fixture_output}/calnet_server_schema.json')
    conn = cl.connect()
    conn.search('ou=people,dc=berkeley,dc=edu', cl._csids_filter(sample_csids), attributes=ldap3.ALL_ATTRIBUTES)
    conn.response_to_file(f'{fixture_output}/calnet_search_entries.json', raw=True)
    conn.unbind()
Exemple #3
0
def _fixture_path(pattern):
    fixtures_path = mockingbird._get_fixtures_path()
    return f'{fixtures_path}/calnet_{pattern}.json'