======================
ResourceSync Simulator
======================

The ResourceSync Simulator simulates a `ResourceSync
<http://www.openarchives.org/rs>`_ Source, which is a server that hosts resources subject to synchronization.

Any ResourceSync-compliant client can be used to synchronize a Destination with the simulated Source. This version of the simulator is written against v0.9.1 of the `ResourceSync specification
<http://www.openarchives.org/rs/0.9.1>`_ and has been tested with v0.9.3 of our own `ResourceSync client and library reference implementation
<https://github.com/resync/resync>`_.

Installation
------------

Make sure Python 2.7.2 or later is running on your system::

    python --version

**Automatic installation**::

    easy_install resync-simulator

``rsync-simulator`` is listed in `PyPI
<http://pypi.python.org/pypi/resync-simulator>`_ and can be installed with ``pip`` or ``easy_install``. Doing an ``easy_install`` should also install the dependencies ``resync`` and ``tornado`` if they are not already on your system.

**Manual installation from github**:

Install the `resync
<https://github.com/resync/resync>`_ library code and the `Tornado
<http://www.tornadoweb.org/>`_ web server::

    sudo easy_install resync
    sudo easy_install tornado
    
Get the ResourceSync Simulator from `Github
<http://www.github.com/resync/simulator>`_::

    git clone git://github.com/resync/simulator.git

Quick Start
-----------

Run the source simulator (with the default configuration in ``./config/default.yaml``)::

    ./resync-simulator

Access from a web browser as http://localhost:8888/

Terminate the source simulator::

    CTRL-C

How to define parameterized use cases
-------------------------------------

Parameterized Use Cases can be defined by creating a `YAML
<http://www.yaml.org/>`_ configuration file (e.g., ``simulation1.yaml`` and defining a set of parameters::

    source:
        name: ResourceSync Simulator
        number_of_resources: 1000
        change_delay: 2
        event_types: [create, update, delete]
        average_payload: 1000
        max_events: -1
        stats_interval: 10
        
Additional **resource_list_builder** and **change memory** implementations can be attached for simulation purposes. For instance, the following configuration attaches a change memory implemented by the DynamicChangeList class::

    resource_list_builder:
        class: DynamicResourceListBuilder
        uri_path: resourcelist.xml

    changememory:
        class: DynamicChangeList
        uri_path: changelist.xml
        max_changes: 1000
            
See the examples in the **./config** directory for further details.

See also
--------

`ResourceSync library
<http://github.com/resync/resync>`_

Author and Contributors
-----------------------

Author:
`Bernhard Haslhofer
<https://github.com/behas>`_

Contributors:
`Simeon Warner
<https://github.com/zimeon>`_
