def setUp(self): config = {} config['name'] = "ResourceSync Simulator" config['number_of_resources'] = 1000 config['change_frequency'] = 0.5 config['event_types'] = ['create', 'update', 'delete'] config['average_payload'] = 1000 config['max_events'] = -1 self.source = Source(config, "localhost", "8888") self.source.bootstrap()
def main(): p = optparse.OptionParser( description='ResourceSync OAI-PMH adapter', usage='usage: %prog [options] uri_path local_path (-h for help)') # Define adapter options p.add_option('--config-file', '-c', type=str, action='store', default=DEFAULT_CONFIG_FILE, help="the simulation configuration file") p.add_option('--endpoint-url', '-u', type=str, action='store', help="the oai-pmh endpoint") p.add_option('--port', '-p', type=int, action='store', default=8888, help="the HTTP interface port") p.add_option('--hostname', '-n', type=str, action='store', default="localhost", help="the hostname where the adapter is running") p.add_option('--logger', '-l', action='store_true', default=False, help="write detailed logs of source to file") p.add_option('--verbose', '-v', action='store_true', default=False, help="verbose") p.add_option('--eval', '-e', action='store_true', default=False, help="run in evaluation mode (log all events)") # Parse command line arguments (args, map) = p.parse_args() if (args.logger or args.verbose): init_logging(file=args.logger, console=args.verbose, eval_mode=args.eval) # Load the YAML configuration file config = yaml.load(file(args.config_file, 'r')) print "Setting up ResourceSync OAI-Adapter..." # Set up the source source_settings = config['source'] source = Source(source_settings, args.hostname, args.port) # Set up and register the source inventory (if defined) if config.has_key('inventory_builder'): klass_name = config['inventory_builder']['class'] mod = __import__('resync.source', fromlist=[klass_name]) inventory_builder_klass = getattr(mod, klass_name) builder = inventory_builder_klass(source, config['inventory_builder']) source.add_inventory_builder(builder) # Set up and register change memory (if defined) if config.has_key('changememory'): klass_name = config['changememory']['class'] mod = __import__('resync.changememory', fromlist=[klass_name]) changemem_klass = getattr(mod, klass_name) changememory = changemem_klass(source, config['changememory']) source.add_changememory(changememory) # Set up and register publishers (if defined) if config.has_key('publisher'): klass_name = config['publisher']['class'] mod = __import__('resync.publisher', fromlist=[klass_name]) publisher_klass = getattr(mod, klass_name) publisher = publisher_klass(source, config['publisher']) # Attach event loggers; if config.has_key('logger'): klass_name = config['logger']['class'] mod = __import__('resync.event_log', fromlist=[klass_name]) logger_class = getattr(mod, klass_name) logger = logger_class(source, config['logger']) # Bootstrap the source print "Bootstrapping the source ..." source.bootstrap() print "OAI-PMH adapter is now running at %s" % source.base_uri # Start the Web interface, run the simulation # Attach HTTP interface to source http_interface = HTTPInterface(source) try: http_interface.start() if args.endpoint_url is not None: source.bootstrap_oai(args.endpoint_url) else: source.bootstrap_oai(source_settings['endpoint']) except KeyboardInterrupt: print "\nStopping simulation and exiting gracefully..." finally: http_interface.stop()
class TestSource(unittest.TestCase): def setUp(self): config = {} config['name'] = "ResourceSync Simulator" config['number_of_resources'] = 1000 config['change_frequency'] = 0.5 config['event_types'] = ['create', 'update', 'delete'] config['average_payload'] = 1000 config['max_events'] = -1 self.source = Source(config, "localhost", "8888") self.source.bootstrap() def test_init(self): self.assertTrue(self.source is not None) self.assertTrue(self.source.config is not None) self.assertEqual(self.source.port, "8888") self.assertEqual(self.source.hostname, "localhost") self.assertTrue(self.source.inventory is None) self.assertTrue(self.source.changememory is None) def test_base_uri(self): self.assertEqual(self.source.base_uri, "http://localhost:8888") def test_resource_count(self): self.assertEqual(self.source.resource_count, 1000) def test_resources(self): resources = [resource for resource in self.source.resources] self.assertEqual(len(resources), 1000) def test_resource(self): # Fetch a random basename from the source repository rand_basename = random.choice(self.source._repository.keys()) self.assertTrue(rand_basename is not None) resource = self.source.resource(rand_basename) self.assertTrue(resource is not None, "Cannot create resource %s" % rand_basename) self.assertTrue( isinstance(resource, Resource) ) self.assertEquals(resource.uri, "http://localhost:8888/resources/%s" % rand_basename) self.assertEquals(resource.size, self.source._repository[rand_basename]['size']) self.assertEquals(resource.timestamp, self.source._repository[rand_basename]['timestamp']) # Try to fetch non-existing resource resource = self.source.resource(-10) self.assertTrue(resource is None) def test_resource_payload(self): # Fetch a random basename from the source repository rand_basename = random.choice(self.source._repository.keys()) size = self.source._repository[rand_basename]['size'] payload = self.source.resource_payload(rand_basename) self.assertEqual(len(payload), size) def test_random_resources(self): self.assertEqual(len(self.source.random_resources()), 1) self.assertEqual(len(self.source.random_resources(1)), 1) self.assertEqual(len(self.source.random_resources(17)), 17) def test_create_resource(self): len_before = self.source.resource_count self.source._create_resource(basename="1177") self.assertEqual(self.source.resource_count, len_before+1) def test_delete_resource(self): len_before = self.source.resource_count rand_basename = self.source.random_resource.basename self.source._delete_resource(basename=rand_basename) self.assertEqual(self.source.resource_count, len_before-1) def test_update_resource(self): len_before = self.source.resource_count rand_basename = self.source.random_resource.basename self.source._update_resource(basename=rand_basename) self.assertEqual(self.source.resource_count, len_before)
def main(): p = optparse.OptionParser(description='ResourceSync OAI-PMH adapter', usage='usage: %prog [options] uri_path local_path (-h for help)') # Define adapter options p.add_option('--config-file', '-c', type=str, action='store', default=DEFAULT_CONFIG_FILE, help="the simulation configuration file") p.add_option('--endpoint-url', '-u', type=str, action='store', help="the oai-pmh endpoint") p.add_option('--port', '-p', type=int, action='store', default=8888, help="the HTTP interface port") p.add_option('--hostname', '-n', type=str, action='store', default="localhost", help="the hostname where the adapter is running") p.add_option('--logger', '-l', action='store_true', default=False, help="write detailed logs of source to file") p.add_option('--verbose', '-v', action='store_true', default=False, help="verbose") p.add_option('--eval', '-e', action='store_true', default=False, help="run in evaluation mode (log all events)") # Parse command line arguments (args, map) = p.parse_args() if(args.logger or args.verbose): init_logging(file=args.logger, console=args.verbose, eval_mode=args.eval) # Load the YAML configuration file config = yaml.load(file(args.config_file, 'r')) print "Setting up ResourceSync OAI-Adapter..." # Set up the source source_settings = config['source'] source = Source(source_settings, args.hostname, args.port) # Set up and register the source inventory (if defined) if config.has_key('inventory_builder'): klass_name = config['inventory_builder']['class'] mod = __import__('resync.source', fromlist=[klass_name]) inventory_builder_klass = getattr(mod, klass_name) builder = inventory_builder_klass(source, config['inventory_builder']) source.add_inventory_builder(builder) # Set up and register change memory (if defined) if config.has_key('changememory'): klass_name = config['changememory']['class'] mod = __import__('resync.changememory', fromlist=[klass_name]) changemem_klass = getattr(mod, klass_name) changememory = changemem_klass(source, config['changememory']) source.add_changememory(changememory) # Set up and register publishers (if defined) if config.has_key('publisher'): klass_name = config['publisher']['class'] mod = __import__('resync.publisher', fromlist=[klass_name]) publisher_klass = getattr(mod, klass_name) publisher = publisher_klass(source, config['publisher']) # Attach event loggers; if config.has_key('logger'): klass_name = config['logger']['class'] mod = __import__('resync.event_log', fromlist=[klass_name]) logger_class = getattr(mod, klass_name) logger = logger_class(source, config['logger']) # Bootstrap the source print "Bootstrapping the source ..." source.bootstrap() print "OAI-PMH adapter is now running at %s" % source.base_uri # Start the Web interface, run the simulation # Attach HTTP interface to source http_interface = HTTPInterface(source) try: http_interface.start() if args.endpoint_url is not None: source.bootstrap_oai(args.endpoint_url) else: source.bootstrap_oai(source_settings['endpoint']) except KeyboardInterrupt: print "\nStopping simulation and exiting gracefully..." finally: http_interface.stop()