Ejemplo n.º 1
0
  def testCompile(self):
    """Tests the Compile function."""
    expression = expressions.EventExpression()
    expression.SetOperator('==')
    expression.AddArgument('first')
    expression.Compile()

    # Test missing operator.
    expression = expressions.EventExpression()
    expression.AddArgument('first')
    with self.assertRaises(errors.ParseError):
      expression.Compile()

    # Test unknown operator.
    expression = expressions.EventExpression()
    expression.SetOperator('bogus')
    expression.AddArgument('first')
    with self.assertRaises(errors.ParseError):
      expression.Compile()

    # Test missing arguments.
    expression = expressions.EventExpression()
    expression.SetOperator('==')
    with self.assertRaises(errors.InvalidNumberOfOperands):
      expression.Compile()
Ejemplo n.º 2
0
  def _AddArgument(self, value):
    """Adds an argument to the current expression.

    Args:
      value (object): argument value.

    Returns:
      str: state or None if the argument could not be added to the current
          expression.

    Raises:
      ParseError: if the operator does not support negation.
    """
    logging.debug('Storing argument: {0!s}'.format(value))

    if self._have_negate_keyword:
      operator = self._current_expression.operator
      if operator and operator.lower() not in self._OPERATORS_WITH_NEGATION:
        raise errors.ParseError(
            'Operator: {0:s} does not support negation (not).'.format(operator))

    # This expression is complete
    if self._current_expression.AddArgument(value):
      self._stack.append(self._current_expression)
      self._current_expression = expressions.EventExpression()
      # We go to the BINARY state, to find if there's an AND or OR operator
      return self._STATE_BINARY_OPERATOR

    return None
Ejemplo n.º 3
0
  def testNegate(self):
    """Tests the Negate function."""
    expression = expressions.EventExpression()
    self.assertTrue(expression._bool_value)

    expression.Negate()
    self.assertFalse(expression._bool_value)
Ejemplo n.º 4
0
    def InsertArg(self, string='', **unused_kwargs):
        """Inserts an argument into the current expression.

    Args:
      string (Optional[str]): argument string.

    Returns:
      str: state or None if the argument could not be added to the current
          expression.

    Raises:
      ParseError: if the operator does not support negation.
    """
        # Note that "string" is not necessarily of type string.
        logging.debug('Storing argument: {0!s}'.format(string))

        if self._have_negate_keyword:
            operator = self._current_expression.operator
            if operator and operator.lower(
            ) not in self._OPERATORS_WITH_NEGATION:
                raise errors.ParseError(
                    'Operator: {0:s} does not support negation (not).'.format(
                        operator))

        # This expression is complete
        if self._current_expression.AddArg(string):
            self._stack.append(self._current_expression)
            self._current_expression = expressions.EventExpression()
            # We go to the BINARY state, to find if there's an AND or OR operator
            return 'BINARY'

        return None
Ejemplo n.º 5
0
    def testCopyValueToDateTime(self):
        """Tests the _CopyValueToDateTime function."""
        expression = expressions.EventExpression()

        date_time = expression._CopyValueToDateTime(
            '2009-07-13T23:29:02.849131')
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247527742849131)

        date_time = expression._CopyValueToDateTime('2009-07-13')
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247443200000000)

        date_time = expression._CopyValueToDateTime('2009-07-13 23:29:02')
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247527742000000)

        date_time = expression._CopyValueToDateTime(
            '2009-07-13 23:29:02.849131')
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247527742849131)

        date_time = expression._CopyValueToDateTime('1247527742849131')
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247527742849131)

        date_time = expression._CopyValueToDateTime(1247527742849131)
        self.assertIsNotNone(date_time)
        self.assertEqual(date_time.timestamp, 1247527742849131)

        with self.assertRaises(ValueError):
            expression._CopyValueToDateTime(None)
Ejemplo n.º 6
0
 def _Reset(self):
   """Resets the parser."""
   self._buffer = ''
   self._current_expression = expressions.EventExpression()
   self._error = 0
   self._flags = 0
   self._have_negate_keyword = False
   self._processed_buffer = ''
   self._stack = []
   self._state = self._STATE_INITIAL
   self._state_stack = []
   self._string = None