def test_has_error(app, es_clear, document):
    """Test if data has error."""
    # No error
    monitoring = DataIntegrityMonitoring()
    assert not monitoring.hasError()

    # Error
    document.delete()
    assert monitoring.hasError()
Example #2
0
def data_info():
    """Info of data integrity."""
    try:
        data_monitoring = DataIntegrityMonitoring()
        return jsonify({
            'data':
            data_monitoring.info(with_detail=('detail' in request.args))
        })
    except Exception as exception:
        return jsonify({'error': str(exception)}), 500
def test_es_count(app, es_clear, document):
    """Test ES count."""
    monitoring = DataIntegrityMonitoring()

    # Resource not configured
    with pytest.raises(Exception) as exception:
        monitoring.get_es_count('not-existing')
    assert str(exception.value) == 'No index found for "not-existing"'

    # OK
    assert monitoring.get_es_count('documents') == 1
Example #4
0
def data_status():
    """Status of data integrity."""
    try:
        data_monitoring = DataIntegrityMonitoring()
        return jsonify({
            'data': {
                'status': 'green' if not data_monitoring.has_error() else 'red'
            }
        })
    except Exception as exception:
        return jsonify({'error': str(exception)}), 500
def test_missing_pids(app, es_clear, document_json):
    """Test missing PIDs."""
    document_json['pid'] = '1000'

    document = DocumentRecord.create(data=document_json, dbcommit=True)
    monitoring = DataIntegrityMonitoring()

    # Only in DB
    assert monitoring.missing_pids('doc') == {
        'db': ['1000'],
        'es': [],
        'es_double': []
    }

    # OK
    document.reindex()
    assert monitoring.missing_pids('doc') == {
        'db': [],
        'es': [],
        'es_double': []
    }

    # Only in ES
    document.delete()
    assert monitoring.missing_pids('doc') == {
        'db': [],
        'es': ['1000'],
        'es_double': []
    }

    # With deleted
    assert monitoring.missing_pids('doc', True) == {
        'db': [],
        'es': [],
        'es_double': []
    }

    # Duplicate
    document2 = DocumentRecord.create(data=document_json, dbcommit=True)
    document2.reindex()
    current_search.flush_and_refresh('documents')
    assert monitoring.missing_pids('doc') == {
        'db': [],
        'es': ['1000'],
        'es_double': ['1000']
    }

    # Index not configured
    app.config.get('RECORDS_REST_ENDPOINTS')['doc'].pop('search_index', None)
    with pytest.raises(Exception) as exception:
        monitoring.missing_pids('doc')
    assert str(
        exception.value) == 'No "search_index" configured for resource "doc"'
    app.config.get(
        'RECORDS_REST_ENDPOINTS')['doc']['search_index'] = 'documents'
def test_db_count(app, es_clear, document):
    """Test DB count."""
    monitoring = DataIntegrityMonitoring()

    # Resource not configured
    with pytest.raises(Exception) as exception:
        monitoring.get_db_count('not-existing')
    assert str(exception.value) == 'No endpoint configured for "not-existing"'

    # OK
    assert monitoring.get_db_count('doc') == 1

    # With deleted
    document.delete()
    assert monitoring.get_db_count('doc') == 0
    assert monitoring.get_db_count('doc', True) == 1
def test_info(app, es_clear, document, deposit):
    """Test info."""
    monitoring = DataIntegrityMonitoring()
    info = monitoring.info()
    for doc_type in ['depo', 'doc', 'org', 'proj', 'user']:
        assert doc_type in info
Example #8
0
def data_info():
    """Info of data integrity."""
    data_monitoring = DataIntegrityMonitoring()
    return jsonify(data_monitoring.info())
Example #9
0
def data_status():
    """Status of data integrity."""
    data_monitoring = DataIntegrityMonitoring()
    return jsonify(
        {'status': 'green' if not data_monitoring.hasError() else 'red'})