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()
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
def testNegate(self): """Tests the Negate function.""" expression = expressions.EventExpression() self.assertTrue(expression._bool_value) expression.Negate() self.assertFalse(expression._bool_value)
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
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)
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