コード例 #1
0
def test_s3_api_bucket_add_user_admin(mock_set_up_bucket_on_aws, client):

    mock_set_up_bucket_on_aws.return_value = (True, '')

    user = factories.User(admin=True)

    bucket1 = factories.S3Bucket()
    bucket1.users.append(user)
    bucket2 = factories.S3Bucket()
    bucket2.users.append(user)

    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.post(
        '/s3/api/bucket',
        headers={'Content-Type': 'application/json'},
        data=json.dumps({
            'access-key-id': 'id',
            'secret-access-key': 'key',
            'bucket-name': 'name',
        })
    )

    assert response.status_code == 200
    assert get_response_data(response) == {
        'bucket': {
            'id': mock.ANY,
            'name': 'name',
            'active': True,
            'integration_name': 's3'
        },
        'error': None,
    }
コード例 #2
0
def test_s3_api_bucket_add_user_on_free_plan(client):
    user = factories.User()
    bucket1 = factories.S3Bucket()
    bucket1.users.append(user)
    bucket2 = factories.S3Bucket()
    bucket2.users.append(user)

    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.post(
        '/s3/api/bucket',
        headers={'Content-Type': 'application/json'},
        data=json.dumps({
            'access-key-id': 'id',
            'secret-access-key': 'key',
            'bucket-name': 'name',
        })
    )

    assert response.status_code == 200
    assert get_response_data(response) == {
        'bucket': None,
        'error': 'Free plan users can only have {} active buckets'.format(
            settings.MAX_S3_BUCKETS_ON_FREE_PLAN)
    }
コード例 #3
0
def test_get_user_buckets_count():

    user = factories.User()

    factories.S3Bucket(name='test-bucket-1', users=[user])
    factories.S3Bucket(name='test-bucket-2', users=[user])

    buckets_count = get_user_buckets_count(user.id)

    assert buckets_count == 2
コード例 #4
0
def test_get_user_buckets():

    user = factories.User()

    factories.S3Bucket(name='test-bucket-1', users=[user])
    factories.S3Bucket(name='test-bucket-2')

    buckets = get_user_buckets(user.id)

    assert len(buckets) == 1

    assert buckets[0].name == 'test-bucket-1'
コード例 #5
0
def test_create_bucket_already_exists_and_not_active():

    bucket = factories.S3Bucket(name='test-bucket-2', active=False)

    updated_bucket = create_bucket('test-bucket-2')

    assert updated_bucket.id == bucket.id
    assert updated_bucket.active is True
コード例 #6
0
def test_s3_api_bucket_list(client):
    user = factories.User()
    bucket1 = factories.S3Bucket(name='name1', users=[user])
    bucket2 = factories.S3Bucket(name='name2', users=[user])
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.get('/s3/api/bucket')
    assert response.status_code == 200
    assert get_response_data(response) == {
        'buckets': [
            {'id': bucket1.id, 'name': bucket1.name, 'active': bucket1.active,
             'integration_name': 's3'},
            {'id': bucket2.id, 'name': bucket2.name, 'active': bucket2.active,
             'integration_name': 's3'},
        ],
        'error': None,
    }
コード例 #7
0
def test_s3_api_bucket_deactivate_no_access_to_bucket(client):
    user = factories.User()
    bucket = factories.S3Bucket(
        conf={'access_key_id': 'test', 'secret_access_key': 'test'})
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.get('/s3/api/bucket/{}/deactivate'.format(bucket.id))
    assert response.status_code == 403
コード例 #8
0
def test_badge_source_exists_but_no_jobs(client):

    bucket = factories.S3Bucket()

    response = client.get('/badge/s3/{}.svg'.format(bucket.name))

    assert response.content_type == 'image/svg+xml'
    assert b'>unknown</text></g>' in response.get_data()
コード例 #9
0
def test_badge_source_exists_job_failure(client):

    bucket = factories.S3Bucket()
    factories.Job(source=bucket, integration_name='s3', status='failure')

    response = client.get('/badge/s3/{}.svg'.format(bucket.name))

    assert response.content_type == 'image/svg+xml'
    assert b'>invalid</text></g>' in response.get_data()
コード例 #10
0
def test_delete_bucket():
    user = factories.User()
    factories.GithubRepo(users=[user], active=True)
    bucket = factories.S3Bucket(users=[user], active=True)
    bucket = database['session'].query(S3Bucket).one()
    database['session'].delete(bucket)
    database['session'].commit()
    users = database['session'].query(User).all()
    buckets = database['session'].query(S3Bucket).all()
    assert len(users) == 1
    assert len(users[0].sources) == 1
    assert len(buckets) == 0
コード例 #11
0
def test_access_key_id_del():

    bucket = factories.S3Bucket(access_key_id='xxx')

    del bucket.access_key_id

    assert bucket.access_key_id is None

    database['session'].commit()
    bucket_db = database['session'].query(S3Bucket).first()

    assert bucket_db.access_key_id is None
コード例 #12
0
def test_secret_access_key_del():

    bucket = factories.S3Bucket(secret_access_key='xxx')

    del bucket.secret_access_key

    assert bucket.secret_access_key is None

    database['session'].commit()
    bucket_db = database['session'].query(S3Bucket).first()

    assert bucket_db.secret_access_key is None
コード例 #13
0
def test_deactivate_bucket():

    factories.S3Bucket(name='test-bucket-2', active=True)

    deactivate_bucket('test-bucket-2')

    buckets = database['session'].query(S3Bucket).all()

    assert len(buckets) == 1

    assert buckets[0].name == 'test-bucket-2'

    assert buckets[0].active is False
コード例 #14
0
def test_secret_access_key_set():

    bucket = factories.S3Bucket()

    bucket.secret_access_key = 'xxx'

    # Encrypted
    assert bucket.conf['secret_access_key'].startswith('gAAA')

    database['session'].commit()
    bucket_db = database['session'].query(S3Bucket).first()

    assert bucket_db.secret_access_key == 'xxx'
コード例 #15
0
def test_s3_api_bucket_deactivate_failure(mock_disable_bucket_on_aws, client):
    user = factories.User()
    bucket = factories.S3Bucket(
        users=[user], active=True,
        conf={'access_key_id': 'test', 'secret_access_key': 'test'})
    mock_disable_bucket_on_aws.return_value = (False, 'Some error happened')
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.get('/s3/api/bucket/{}/deactivate'.format(bucket.id))
    assert response.status_code == 200
    assert get_response_data(response) == {
        'error': 'Error removing bucket integration. Some error happened',
    }
コード例 #16
0
def test_s3_api_bucket_delete(mock_disable_bucket_on_aws, client):
    user = factories.User()
    bucket = factories.S3Bucket(
        users=[user], active=True,
        conf={'access_key_id': 'test', 'secret_access_key': 'test'})
    mock_disable_bucket_on_aws.return_value = (True, '')
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.delete('/s3/api/bucket/{}'.format(bucket.id))
    buckets = database['session'].query(S3Bucket).all()
    assert len(buckets) == 0
    assert response.status_code == 200
    assert get_response_data(response) == {
        'error': None,
    }
コード例 #17
0
def test_s3_api_bucket(client):
    user = factories.User()
    bucket = factories.S3Bucket(name='name', users=[user])
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.get('/s3/api/bucket/%s' % bucket.id)
    assert response.status_code == 200
    assert get_response_data(response) == {
        'bucket': {
            'id': bucket.id,
            'name': bucket.name,
            'active': bucket.active,
        },
        'error': None,
    }
コード例 #18
0
def test_s3_api_bucket_activate(mock_set_up_bucket_on_aws, client):
    user = factories.User()
    bucket = factories.S3Bucket(
        users=[user], active=False,
        conf={'access_key_id': 'test', 'secret_access_key': 'test'})
    mock_set_up_bucket_on_aws.return_value = (True, '')
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.get('/s3/api/bucket/{}/activate'.format(bucket.id))
    buckets = database['session'].query(S3Bucket).all()
    assert buckets[0].name == bucket.name
    assert buckets[0].active is True
    assert response.status_code == 200
    assert get_response_data(response) == {
        'error': None,
    }
コード例 #19
0
def test_s3_api_bucket_add_already_exists(client):
    user = factories.User()
    bucket = factories.S3Bucket()
    with client.session_transaction() as session:
        session['user_id'] = user.id
    response = client.post('/s3/api/bucket',
                           headers={'Content-Type': 'application/json'},
                           data=json.dumps({
                               'access-key-id': 'test',
                               'secret-access-key': 'test',
                               'bucket-name': bucket.name
                           }))
    assert response.status_code == 200
    assert get_response_data(response) == {
        'bucket': None,
        'error': 'Bucket already exists',
    }
コード例 #20
0
def test_badge_source_exists_picks_last_finished_job(client):

    bucket = factories.S3Bucket()
    factories.Job(source=bucket,
                  integration_name='s3',
                  status='success',
                  finished=datetime.datetime.utcnow())
    factories.Job(source=bucket,
                  integration_name='s3',
                  status='failure',
                  finished=datetime.datetime.utcnow())
    factories.Job(source=bucket, integration_name='s3', status='running')

    response = client.get('/badge/s3/{}.svg'.format(bucket.name))

    assert response.content_type == 'image/svg+xml'
    assert b'>invalid</text></g>' in response.get_data()
コード例 #21
0
def test_s3_hook_bucket_success(mock_1, client):

    factories.S3Bucket(name='test-bucket')

    data = {'Records': [{'s3': {'bucket': {'name': 'test-bucket'}}}]}
    sig = create_signature(settings.S3_LAMBDA_HOOK_SECRET, json.dumps(data))

    response = client.post(
        '/s3/hook', data=json.dumps(data),
        content_type='application/json',
        headers={'X-GoodTables-Signature': sig})

    assert response.status_code == 200
    body = response.get_data(as_text=True)

    job_id = json.loads(body)['job_id']

    jobs = database['session'].query(Job).all()

    assert jobs[0].id == job_id
コード例 #22
0
def test_get_validation_conf():

    bucket = factories.S3Bucket(name='test=bucket',
                                conf={
                                    'access_key_id': 'test',
                                    'secret_access_key': 'test'
                                })
    job = factories.Job(source=bucket)

    def mock_make_api_call(self, operation_name, kwarg):
        if operation_name == 'GetObject':
            return mock_responses.s3_get_object
        elif operation_name == 'ListObjects':
            return mock_responses.s3_list_objects
        else:
            assert 0

    def mock_generate_presigned_url(*args, **kwargs):
        return 'https://example.com/presigned/{}'.format(
            kwargs['Params']['Key'])

    with mock.patch('botocore.client.BaseClient._make_api_call',
                    new=mock_make_api_call), \
            mock.patch('botocore.signers.generate_presigned_url',
                       new=mock_generate_presigned_url):

        expected = {
            'source': [{
                'source':
                'https://example.com/presigned/councillors-address-3.csv'
            }, {
                'source':
                'https://example.com/presigned/councillors-address2.csv'
            }],
            'settings': {
                'error_limit': 1
            }
        }

        assert get_validation_conf('test-gtio-1', job.id) == expected
コード例 #23
0
def test_access_key_id_get():

    bucket = factories.S3Bucket(access_key_id='xxx')

    assert bucket.access_key_id == 'xxx'
コード例 #24
0
def test_secret_access_key_get_unencrypted():

    bucket = factories.S3Bucket(conf={'secret_access_key': 'xxx'})

    assert bucket.secret_access_key is None
コード例 #25
0
def test_secret_access_key_get():

    bucket = factories.S3Bucket(secret_access_key='xxx')

    assert bucket.secret_access_key == 'xxx'
コード例 #26
0
def test_access_key_id_get_unencrypted():

    bucket = factories.S3Bucket(conf={'access_key_id': 'xxx'})

    assert bucket.access_key_id is None
コード例 #27
0
def test_create_bucket_already_exists_and_active():

    factories.S3Bucket(name='test-bucket-2', active=True)

    assert create_bucket('test-bucket-2') is False