Пример #1
0
  def CreateTaskStorage(self, task, task_storage_format):
    """Creates a task storage.

    The task storage is used to store attribute containers created by the task.

    Args:
      task (Task): task.
      task_storage_format (str): storage format used to store task results.

    Returns:
      StorageWriter: storage writer.

    Raises:
      OSError: if the storage type or storage format is not supported.
      IOError: if the storage type or storage format is not supported.
    """
    if self._storage_type != definitions.STORAGE_TYPE_SESSION:
      raise IOError('Unsupported storage type: {0:s}'.format(
          self._storage_type))

    if task_storage_format == definitions.STORAGE_FORMAT_SQLITE:
      writer = self._CreateTaskStorageWriter(task)

    elif task_storage_format == definitions.STORAGE_FORMAT_REDIS:
      writer = redis_writer.RedisStorageWriter(
          self._session, storage_type=definitions.STORAGE_TYPE_TASK, task=task)

    else:
      raise IOError('Unsupported storage format: {0:s}'.format(
          task_storage_format))

    task.storage_format = task_storage_format

    return writer
Пример #2
0
    def _CreateTaskStore(self, session, redis_client):
        """Creates a task store for testing.

    Args:
      session (Session): session the task store is part of.
      redis_client (Redis): Redis client to query. If specified, no
          new client will be created.

    Returns:
      Task: the the task for the store that was created.
    """
        task = tasks.Task(session_identifier=session.identifier)

        task_store = redis_writer.RedisStorageWriter(
            session, storage_type=definitions.STORAGE_TYPE_TASK, task=task)

        task_store.Open(redis_client=redis_client)

        for event, event_data in containers_test_lib.CreateEventsFromValues(
                self._TEST_EVENTS):
            task_store.AddEventData(event_data)

            event.SetEventDataIdentifier(event_data.GetIdentifier())
            task_store.AddEvent(event)

        task_store.Close()

        return task
Пример #3
0
    def testScanForProcessedTasks(self):
        """Tests the ScanForProcessedTasks method"""
        redis_client = self._CreateRedisClient()

        session = sessions.Session()
        task = tasks.Task(session_identifier=session.identifier)

        # There should be no processed task identifiers initially.
        task_identifiers, _ = redis_store.RedisStore.ScanForProcessedTasks(
            session.identifier, redis_client=redis_client)
        self.assertEqual([], task_identifiers)

        # Opening and closing a writer for a task should cause the task to be marked
        # as complete.
        storage_writer = writer.RedisStorageWriter(
            storage_type=definitions.STORAGE_TYPE_TASK)
        storage_writer.Open(redis_client=redis_client,
                            session_identifier=task.session_identifier,
                            task_identifier=task.identifier)
        storage_writer.Close()

        # The task store is now marked as processed.
        task_identifiers, _ = redis_store.RedisStore.ScanForProcessedTasks(
            session.identifier, redis_client=redis_client)
        self.assertEqual([task.identifier], task_identifiers)
Пример #4
0
    def testMarkTaskAsMerging(self):
        """Tests the MarkTaskAsMerging method"""
        redis_client = self._CreateRedisClient()

        session = sessions.Session()
        task = tasks.Task(session_identifier=session.identifier)

        # Trying to mark a task as merging without finalizing it raises an error.
        with self.assertRaises(IOError):
            redis_store.RedisStore.MarkTaskAsMerging(task.identifier,
                                                     session.identifier,
                                                     redis_client=redis_client)

        # Opening and closing a writer for a task should cause the task to be marked
        # as complete.
        storage_writer = writer.RedisStorageWriter(
            storage_type=definitions.STORAGE_TYPE_TASK)
        storage_writer.Open(redis_client=redis_client,
                            session_identifier=task.session_identifier,
                            task_identifier=task.identifier)
        storage_writer.Close()

        redis_store.RedisStore.MarkTaskAsMerging(task.identifier,
                                                 session.identifier,
                                                 redis_client=redis_client)
Пример #5
0
    def CreateStorageWriter(cls, storage_format):
        """Creates a storage writer.

    Args:
      storage_format (str): storage format.

    Returns:
      StorageWriter: a storage writer or None if the storage file cannot be
          opened or the storage format is not supported.
    """
        if storage_format == definitions.STORAGE_FORMAT_SQLITE:
            return sqlite_writer.SQLiteStorageFileWriter()

        if storage_format == definitions.STORAGE_FORMAT_REDIS:
            return redis_writer.RedisStorageWriter()

        return None
Пример #6
0
    def CreateStorageWriter(cls, storage_format, session, path):
        """Creates a storage writer.

    Args:
      storage_format (str): storage format.
      session (Session): session the storage changes are part of.
      path (str): path to the storage file.

    Returns:
      StorageWriter: a storage writer or None if the storage file cannot be
          opened or the storage format is not supported.
    """
        if storage_format == definitions.STORAGE_FORMAT_SQLITE:
            return sqlite_writer.SQLiteStorageFileWriter(session, path)

        if storage_format == definitions.STORAGE_FORMAT_REDIS:
            return redis_writer.RedisStorageWriter(session)

        return None