gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r12779 - gnunet/src/monkey


From: gnunet
Subject: [GNUnet-SVN] r12779 - gnunet/src/monkey
Date: Tue, 31 Aug 2010 15:54:32 +0200

Author: safey
Date: 2010-08-31 15:54:32 +0200 (Tue, 31 Aug 2010)
New Revision: 12779

Added:
   gnunet/src/monkey/C.jj
   gnunet/src/monkey/test_gnunet_monkey.c
Modified:
   gnunet/src/monkey/Makefile.am
   gnunet/src/monkey/bug_null_pointer_exception.c
   gnunet/src/monkey/gnunet-monkey.c
   gnunet/src/monkey/mail_sender.c
Log:
Monkey sends e-mails reporting bugs detected using gdbmi
C.jj grammar for C

Added: gnunet/src/monkey/C.jj
===================================================================
--- gnunet/src/monkey/C.jj                              (rev 0)
+++ gnunet/src/monkey/C.jj      2010-08-31 13:54:32 UTC (rev 12779)
@@ -0,0 +1,543 @@
+/*
+
+  C grammar defintion for use with JavaCC
+  Contributed by Doug South (address@hidden) 21/3/97
+
+  This parser assumes that the C source file has been preprocessed : all
+  #includes have been included and all macros have been expanded. I accomplish
+  this with "gcc -P -E <source file> > <output file>".
+
+  There is a problem with compiler specific types, such as __signed, __const,
+  __inline__, etc. These types can be added as typedef types before the parser
+  is run on a file. See main() for an example. I have also found a strange 
little
+  compiler specific "type" if you can call it that. It is __attribute__, but it
+  does not seem to be used as a type. I found that just deleting the 
__attribute__
+  and the following "offensive" code works.
+
+  This grammar also prints out all the types defined while parsing the file. 
This
+  is done via a call to printTypes() when the parser is complete. If you do 
not want
+  this, just comment out the printTypes() method call in the production rule
+  TranslationUnit(), which BTW is the root node for parsing a C source file.
+
+  I have not in anyway extensively tested this grammar, in fact it is barely 
tested,
+  but I imagine it is better to have a starting point for a C grammar other 
than from
+  scratch. It has not been optimized in anyway, my main aim was to get a 
parser that
+  works. Lookahead may not be optimum at choice points and may even be 
insufficient at
+  times. I choose to err on the side of not optimum if I made a choice at all.
+
+  If you use this grammar, I would appreciate hearing from you. I will try to 
maintain
+  this grammar to the best of my ability, but at this point in time, this is 
only a side
+  hobby (unless someone wants to pay me for doing JavaCC work!). In that 
regards, I am
+  interested in hearing bugs and comments.
+
+  TODO:
+
+    Insert the appropriate code to enable C source trees from this grammar.
+
+=============================================
+3/2/06: Modified by Tom Copeland
+- STRING_LITERAL now handles embedded escaped newlines, thanks to J.Chris 
Findlay for the patch
+- Works with JavaCC 4.0
+- Preprocessor directives are now simply SKIP'd, so no need to run C files 
through GCC first
+
+  */
+
+PARSER_BEGIN(CParser)
+
+import java.util.*;
+
+  public class CParser{
+
+    // Run the parser
+    public static void main ( String args [ ] ) {
+      CParser parser ;
+
+
+      if(args.length == 0){
+        System.out.println("C Parser Version 0.1Alpha:  Reading from standard 
input . . .");
+        parser = new CParser(System.in);
+      }
+      else if(args.length == 1){
+        System.out.println("C Parser Version 0.1Alpha:  Reading from file " + 
args[0] + " . . ." );
+      try {
+        parser = new CParser(new java.io.FileInputStream(args[0]));
+      }
+      catch(java.io.FileNotFoundException e){
+        System.out.println("C Parser Version 0.1:  File " + args[0] + " not 
found.");
+        return ;
+        }
+      }
+      else {
+        System.out.println("C Parser Version 0.1Alpha:  Usage is one of:");
+        System.out.println("         java CParser < inputfile");
+        System.out.println("OR");
+        System.out.println("         java CParser inputfile");
+        return ;
+      }
+      try {
+        parser.TranslationUnit();
+        System.out.println("C Parser Version 0.1Alpha:  Java program parsed 
successfully.");
+      }
+      catch(ParseException e){
+        System.out.println("C Parser Version 0.1Alpha:  Encountered errors 
during parse.");
+        e.printStackTrace();
+      }
+    }
+  }
+
+PARSER_END(CParser)
+
+SKIP : {
+ " "
+|  "\t"
+|  "\n"
+|  "\r"
+|  <"//" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
+|  <"/*" (~["*"])* "*" ("*" | ~["*","/"] (~["*"])* "*")* "/">
+| "#" : PREPROCESSOR_OUTPUT
+}
+
+<PREPROCESSOR_OUTPUT> SKIP:
+{
+     "\n" : DEFAULT
+}
+
+<PREPROCESSOR_OUTPUT> MORE:
+{
+ "\\\n"
+ |
+ "\\\r\n"
+ |
+ < ~[] >
+}
+
+
+TOKEN : {
+ <INTEGER_LITERAL: <DECIMAL_LITERAL> (["l","L"])? | <HEX_LITERAL> (["l","L"])? 
| <OCTAL_LITERAL> (["l","L"])?>
+|  <#DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])*>
+|  <#HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+>
+|  <#OCTAL_LITERAL: "0" (["0"-"7"])*>
+|  <FLOATING_POINT_LITERAL: (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? 
(["f","F","d","D"])? | "." (["0"-"9"])+ (<EXPONENT>)? (["f","F","d","D"])? | 
(["0"-"9"])+ <EXPONENT> (["f","F","d","D"])? | (["0"-"9"])+ (<EXPONENT>)? 
["f","F","d","D"]>
+|  <#EXPONENT: ["e","E"] (["+","-"])? (["0"-"9"])+>
+|  <CHARACTER_LITERAL: "\'" (~["\'","\\","\n","\r"] | "\\" 
(["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] 
["0"-"7"] ["0"-"7"])) "\'">
+|  <STRING_LITERAL: "\"" ( ~["\"","\\","\n","\r"] | "\\" ( 
["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])?  | ["0"-"3"] 
["0"-"7"] ["0"-"7"] | ( ["\n","\r"] | "\r\n")))* "\"">
+}
+
+TOKEN : {
+       <CONTINUE: "continue"> |
+       <VOLATILE: "volatile"> |
+       <REGISTER: "register"> |
+       <UNSIGNED: "unsigned"> |
+       <TYPEDEF: "typedef"> |
+       <DFLT: "default"> |
+       <DOUBLE: "double"> |
+       <SIZEOF: "sizeof"> |
+       <SWITCH: "switch"> |
+       <RETURN: "return"> |
+       <EXTERN: "extern"> |
+       <STRUCT: "struct"> |
+       <STATIC: "static"> |
+       <SIGNED: "signed"> |
+       <WHILE: "while"> |
+       <BREAK: "break"> |
+       <UNION: "union"> |
+       <CONST: "const"> |
+       <FLOAT: "float"> |
+       <SHORT: "short"> |
+       <ELSE: "else"> |
+       <CASE: "case"> |
+       <LONG: "long"> |
+       <ENUM: "enum"> |
+       <AUTO: "auto"> |
+       <VOID: "void"> |
+       <CHAR: "char"> |
+       <GOTO: "goto"> |
+       <FOR: "for"> |
+       <INT: "int"> |
+       <IF: "if"> |
+       <DO: "do">
+}
+
+TOKEN : {
+ <IDENTIFIER: <LETTER> (<LETTER> | <DIGIT>)*>
+|  <#LETTER: ["$","A"-"Z","_","a"-"z"]>
+|  <#DIGIT: ["0"-"9"]>
+}
+
+void TranslationUnit() : {}
+{
+       (ExternalDeclaration())+
+}
+
+void ExternalDeclaration() : {}
+{
+       ( LOOKAHEAD( FunctionDefinition() ) FunctionDefinition() | 
Declaration())
+}
+
+void FunctionDefinition() : {}
+{
+       [LOOKAHEAD(DeclarationSpecifiers()) DeclarationSpecifiers()] 
Declarator() [ DeclarationList() ]
+       CompoundStatement()
+}
+
+void Declaration() : {}
+{
+       DeclarationSpecifiers() [ InitDeclaratorList() ] ";"
+}
+
+void DeclarationList() : {}
+{
+       ( LOOKAHEAD(Declaration()) Declaration() )+
+}
+
+void DeclarationSpecifiers() : {}
+{
+         StorageClassSpecifier() [ LOOKAHEAD(DeclarationSpecifiers())
+               DeclarationSpecifiers() ] |
+         TypeSpecifier()  [ LOOKAHEAD(DeclarationSpecifiers())
+               DeclarationSpecifiers() ] |
+         TypeQualifier() [ LOOKAHEAD(DeclarationSpecifiers())
+               DeclarationSpecifiers() ]
+}
+
+void StorageClassSpecifier() : {}
+{
+       ( <AUTO> | <REGISTER> | <STATIC> | <EXTERN> | <TYPEDEF>
+        )
+}
+
+void TypeSpecifier() : {}
+{
+       ( <VOID> | <CHAR> | <SHORT> | <INT> | <LONG> | <FLOAT> | <DOUBLE> | 
<SIGNED> |
+         <UNSIGNED> | StructOrUnionSpecifier() | EnumSpecifier() | 
TypedefName() )
+}
+
+void TypeQualifier() : {}
+{
+       ( <CONST> | <VOLATILE> )
+}
+
+void StructOrUnionSpecifier() : {}
+{
+       StructOrUnion() ( LOOKAHEAD(3) [ <IDENTIFIER> ] "{" 
StructDeclarationList() "}" | <IDENTIFIER> )
+
+}
+
+void StructOrUnion() : {}
+{
+       ( <STRUCT> | <UNION> )
+}
+
+void StructDeclarationList() : {}
+{
+       (StructDeclaration())+
+}
+
+void InitDeclaratorList() : {}
+{
+       InitDeclarator() ("," InitDeclarator())*
+}
+
+void InitDeclarator() : {}
+{
+       Declarator() [ "=" Initializer() ]
+}
+
+void StructDeclaration() : {}
+{
+       SpecifierQualifierList() StructDeclaratorList() ";"
+}
+
+void SpecifierQualifierList() : {}
+{
+         TypeSpecifier() [ LOOKAHEAD(SpecifierQualifierList())
+               SpecifierQualifierList() ]|
+         TypeQualifier() [ LOOKAHEAD(SpecifierQualifierList())
+               SpecifierQualifierList() ]
+}
+
+void StructDeclaratorList() : {}
+{
+       StructDeclarator() ( "," StructDeclarator() )*
+}
+
+void StructDeclarator() : {}
+{
+       ( LOOKAHEAD(3) Declarator() | [ Declarator() ] ":" ConstantExpression() 
)
+}
+
+void EnumSpecifier() : {}
+{
+       <ENUM> ( LOOKAHEAD(3) [ <IDENTIFIER> ] "{" EnumeratorList() "}" | 
<IDENTIFIER> )
+}
+
+void EnumeratorList() : {}
+{
+       Enumerator() ("," Enumerator())*
+}
+
+void Enumerator() : {}
+{
+       <IDENTIFIER> [ "=" ConstantExpression() ]
+}
+
+void Declarator() : {}
+{
+       [ Pointer() ] DirectDeclarator()
+}
+
+void DirectDeclarator() : {}
+{
+       ( <IDENTIFIER>
+        | "(" Declarator() ")" )
+  
+       ( "[" [ ConstantExpression() ] "]" |
+           LOOKAHEAD(3) "(" ParameterTypeList() ")" |
+           "(" [ IdentifierList() ] ")" )*
+}
+
+void Pointer() : {}
+{
+       "*" [ TypeQualifierList() ] [ Pointer() ]
+}
+
+void TypeQualifierList() : {}
+{
+       (TypeQualifier())+
+}
+
+void ParameterTypeList() : {}
+{
+       ParameterList() ["," "..." ]
+}
+
+void ParameterList() : {}
+{
+       ParameterDeclaration() (LOOKAHEAD(2) "," ParameterDeclaration())*
+}
+
+void ParameterDeclaration() : {}
+{
+       DeclarationSpecifiers() ( LOOKAHEAD(Declarator()) Declarator() | [ 
AbstractDeclarator() ] )
+}
+
+void IdentifierList() : {}
+{
+       <IDENTIFIER> ("," <IDENTIFIER>)*
+}
+
+void Initializer() : {}
+{
+       ( AssignmentExpression() |
+         "{" InitializerList() [","] "}" )
+}
+
+void InitializerList() : {}
+{
+       Initializer() (LOOKAHEAD(2) "," Initializer())*
+}
+
+void TypeName() : {}
+{
+       SpecifierQualifierList() [ AbstractDeclarator() ]
+
+}
+
+void AbstractDeclarator() : {}
+{
+       ( LOOKAHEAD(3) Pointer() |
+         [Pointer()] DirectAbstractDeclarator() )
+}
+
+void DirectAbstractDeclarator() : {}
+{
+       ( LOOKAHEAD(2) "(" AbstractDeclarator() ")" |
+                      "[" [ConstantExpression()] "]" |
+                      "(" [ParameterTypeList()] ")" )
+
+         ( "[" [ ConstantExpression() ] "]" | "(" [ ParameterTypeList() ] ")" 
)*
+}
+
+void TypedefName() : {}
+{
+       <IDENTIFIER>
+}
+
+void Statement() : {}
+{
+       ( LOOKAHEAD(2) LabeledStatement() |
+         ExpressionStatement() |
+         CompoundStatement() |
+         SelectionStatement() |
+         IterationStatement() |
+         JumpStatement() )
+}
+
+void LabeledStatement() : {}
+{
+       ( <IDENTIFIER> ":" Statement() |
+         <CASE> ConstantExpression() ":" Statement() |
+         <DFLT> ":" Statement() )
+}
+
+void ExpressionStatement() : {}
+{
+       [ Expression() ] ";"
+}
+
+void CompoundStatement() : {}
+{
+       "{" [ LOOKAHEAD(DeclarationList()) DeclarationList() ]
+           [ StatementList() ]
+       "}"
+}
+
+void StatementList() : {}
+{
+       (Statement())+
+}
+
+void SelectionStatement() : {}
+{
+       ( <IF> "(" Expression() ")" Statement() [ LOOKAHEAD(2) <ELSE> 
Statement() ] |
+         <SWITCH> "(" Expression() ")" Statement() )
+}
+
+void IterationStatement() : {}
+{
+       ( <WHILE> "(" Expression() ")" Statement() |
+         <DO> Statement() <WHILE> "(" Expression() ")" ";" |
+         <FOR> "(" [ Expression() ] ";" [ Expression() ] ";" [ Expression() ] 
")" Statement() )
+}
+
+void JumpStatement() : {}
+{
+       ( <GOTO> <IDENTIFIER> ";" |
+         <CONTINUE> ";" |
+         <BREAK> ";" |
+         <RETURN> [ Expression() ] ";" )
+}
+
+void Expression() : {}
+{
+       AssignmentExpression() ( "," AssignmentExpression() )*
+}
+
+void AssignmentExpression() : {}
+{
+         LOOKAHEAD(UnaryExpression() AssignmentOperator()) UnaryExpression() 
AssignmentOperator() AssignmentExpression() |
+         LOOKAHEAD(3) ConditionalExpression()
+}
+
+void AssignmentOperator() : {}
+{
+       ( "=" | "*=" | "/=" | "%=" | "+=" | "-=" | "<<=" | ">>=" | "&=" | "^=" 
| "|=" )
+}
+
+void ConditionalExpression() : {}
+{
+       LogicalORExpression() [ "?" Expression() ":" ConditionalExpression() ]
+}
+
+void ConstantExpression() : {}
+{
+       ConditionalExpression()
+}
+
+void LogicalORExpression() : {}
+{
+       LogicalANDExpression() [ "||" LogicalORExpression() ]
+}
+
+void LogicalANDExpression() : {}
+{
+       InclusiveORExpression() [ "&&" LogicalANDExpression() ]
+}
+
+void InclusiveORExpression() : {}
+{
+       ExclusiveORExpression() [ "|" InclusiveORExpression() ]
+}
+
+void ExclusiveORExpression() : {}
+{
+       ANDExpression() [ "^" ExclusiveORExpression() ]
+}
+
+void ANDExpression() : {}
+{
+       EqualityExpression() [ "&" ANDExpression() ]
+}
+
+void EqualityExpression() : {}
+{
+       RelationalExpression() [ ( "==" | "!=" ) EqualityExpression() ]
+}
+
+void RelationalExpression() : {}
+{
+       ShiftExpression() [ ( "<" | ">" | "<=" | ">=" ) RelationalExpression() ]
+}
+
+void ShiftExpression() : {}
+{
+       AdditiveExpression() [ ( "<<" | ">>" ) ShiftExpression() ]
+}
+
+void AdditiveExpression() : {}
+{
+       MultiplicativeExpression() [ ( "+" | "-" ) AdditiveExpression() ]
+}
+
+void MultiplicativeExpression() : {}
+{
+       CastExpression() [ ( "*" | "/" | "%" ) MultiplicativeExpression() ]
+}
+
+void CastExpression() : {}
+{
+       ( LOOKAHEAD("(" TypeName() ")" CastExpression() ) "(" TypeName() ")" 
CastExpression() |
+         UnaryExpression() )
+}
+
+void UnaryExpression() : {}
+{
+       ( LOOKAHEAD(3) PostfixExpression() |
+         "++" UnaryExpression() |
+         "--" UnaryExpression() |
+         UnaryOperator() CastExpression() |
+         <SIZEOF> ( LOOKAHEAD(UnaryExpression() ) UnaryExpression() | "(" 
TypeName() ")" ) )
+}
+
+void UnaryOperator() : {}
+{
+       ( "&" | "*" | "+" | "-" | "~" | "!" )
+}
+
+void PostfixExpression() : {}
+{
+       PrimaryExpression() ( "[" Expression() "]" |
+                             "(" [ LOOKAHEAD(ArgumentExpressionList() ) 
ArgumentExpressionList() ] ")" |
+                                                 "." <IDENTIFIER> |
+                                                 "->" <IDENTIFIER> |
+                                                 "++" |
+                                                 "--" )*
+}
+
+void PrimaryExpression() : {}
+{
+       ( <IDENTIFIER> |
+         Constant() |
+         "(" Expression() ")" )
+}
+
+void ArgumentExpressionList() : {}
+{
+       AssignmentExpression() ( "," AssignmentExpression() )*
+}
+
+void Constant() : {}
+{
+ <INTEGER_LITERAL> | <FLOATING_POINT_LITERAL> | <CHARACTER_LITERAL> | 
<STRING_LITERAL>
+}
+

Modified: gnunet/src/monkey/Makefile.am
===================================================================
--- gnunet/src/monkey/Makefile.am       2010-08-31 13:41:22 UTC (rev 12778)
+++ gnunet/src/monkey/Makefile.am       2010-08-31 13:54:32 UTC (rev 12779)
@@ -16,8 +16,7 @@
 
 bin_PROGRAMS = \
  gnunet-monkey \
- gnunet-service-monkey \
- mail_sender
+ gnunet-service-monkey 
 
 noinst_PROGRAMS = \
  bug_null_pointer_exception 
@@ -39,10 +38,12 @@
  gdbmi_target_man.c \
  gdbmi_thread.c \
  gdbmi_var_obj.c \
- gnunet-monkey.c
+ gnunet-monkey.c \
+ mail_sender.c
 
 gnunet_monkey_LDADD = \
   $(top_builddir)/src/util/libgnunetutil.la \
+  -lesmtp \
   $(GN_LIBINTL)
 
 
@@ -53,23 +54,27 @@
   $(GN_LIBINTL)
 
 
-mail_sender_SOURCES = \
-       mail_sender.c
-mail_sender_LDADD = \
-       $(top_builddir)/src/util/libgnunetutil.la \
-        -lesmtp \
-       $(GN_LIBINTL)
-
 bug_null_pointer_exception_SOURCES = \
        bug_null_pointer_exception.c
 bug_null_pointer_exception_LDADD = \
        $(top_builddir)/src/util/libgnunetutil.la \
        $(GN_LIBINTL)
+       
+check_PROGRAMS = \
+    bug_null_pointer_exception \
+    test_gnunet_monkey 
 
 if !DISABLE_TEST_RUN
-#TESTS = $(check_PROGRAMS) $(check_SCRIPTS)
+# TESTS = $(check_SCRIPTS)
 endif
 
+test_gnunet_monkey_SOURCES = \
+ test_gnunet_monkey.c
+test_gnunet_monkey_LDADD = \
+  $(top_builddir)/src/arm/libgnunetarm.la \
+  $(top_builddir)/src/util/libgnunetutil.la  
+  
+  
 check_SCRIPTS = \
   test_gnunet_monkey.sh 
 #  test_monkey_npe.sh

Modified: gnunet/src/monkey/bug_null_pointer_exception.c
===================================================================
--- gnunet/src/monkey/bug_null_pointer_exception.c      2010-08-31 13:41:22 UTC 
(rev 12778)
+++ gnunet/src/monkey/bug_null_pointer_exception.c      2010-08-31 13:54:32 UTC 
(rev 12779)
@@ -3,25 +3,15 @@
 
 void crashFunction() 
 {
-       //char *stringCannotBeChanged = "String cannot be changed!";
        char *nullString = NULL;
-       
-       printf("Now the program will crash! Take a cover! \n");
-       //*stringCannotBeChanged = 'h';
-       printf("Nonsense!\n");
+       printf("Now the program will crash!\n");
        if (strcmp(nullString, "A string to compare with") == 0) {
-               printf("How come?! It had to be crashed!\n");
+               printf("How come?! It had to crash!\n");
        }
 }
 
 int main(int argc, char *argv[]) 
 {
-       int i;
-       printf("arguments: %d\n", argc);
-       for (i=0; i<argc; i++)
-               printf("%d: %s\n", i, argv[i]);
-       printf("Press ENTER\n");
-       getchar();
        crashFunction();
        return 0;
 }

Modified: gnunet/src/monkey/gnunet-monkey.c
===================================================================
--- gnunet/src/monkey/gnunet-monkey.c   2010-08-31 13:41:22 UTC (rev 12778)
+++ gnunet/src/monkey/gnunet-monkey.c   2010-08-31 13:54:32 UTC (rev 12779)
@@ -13,7 +13,11 @@
 #include <unistd.h> //usleep
 #include <libesmtp.h>
 #include "gdbmi.h"
+#include "platform.h"
+#include "gnunet_common.h"
 
+extern void sendMail(const char *messageContents);
+
 void cb_console(const char *str, void *data)
 {
  printf("CONSOLE> %s\n",str);
@@ -48,6 +52,16 @@
  async_c++;
 }
 
+
+void send_bug_mail(mi_stop* sr, mi_frames* f)
+{
+       char *message;
+       asprintf(&message, "Bug detected in 
file:%s\nfunction:%s\nline:%d\nreason:%s\nreceived signal:%s\n%s\n",
+               f->file, f->func, f->line, mi_reason_enum_to_str(sr->reason), 
sr->signal_name, sr->signal_meaning);
+       sendMail(message);
+}
+
+
 int wait_for_stop(mi_h *h)
 {
  int res=1;
@@ -60,13 +74,10 @@
  sr=mi_res_stop(h);
  if (sr)
    {
-    printf("Stopped, reason: %s\n",mi_reason_enum_to_str(sr->reason));
-    printf("Received signal name: %s\n", sr->signal_name);
-    printf("Received signal meaning: %s\n", sr->signal_meaning);
-    //printf("In file: %s\n", sr->frame->file);
-    //printf("Line Number: %d\n", sr->frame->line);
     f = gmi_stack_info_frame(h);
+    send_bug_mail(sr, f);
     mi_free_stop(sr);
+    res = 0;
    }
  else
    {
@@ -80,7 +91,11 @@
 int main(int argc, char *argv[])
 {
  mi_aux_term *xterm_tty=NULL;
+ const char* binaryName;
  
+ binaryName = argv[1];
+ GNUNET_assert(NULL != binaryName);
+ 
  /* This is like a file-handle for fopen.
     Here we have all the state of gdb "connection". */
  mi_h *h;
@@ -103,7 +118,7 @@
  mi_set_from_gdb_cb(h,cb_from,NULL);
 
  /* Set the name of the child and the command line aguments. */
- if (!gmi_set_exec(h,"bug_null_pointer_exception", NULL))
+ if (!gmi_set_exec(h, binaryName, NULL))
    {
     printf("Error setting exec y args\n");
     mi_disconnect(h);

Modified: gnunet/src/monkey/mail_sender.c
===================================================================
--- gnunet/src/monkey/mail_sender.c     2010-08-31 13:41:22 UTC (rev 12778)
+++ gnunet/src/monkey/mail_sender.c     2010-08-31 13:54:32 UTC (rev 12779)
@@ -145,18 +145,17 @@
 }
 
 
-void sendMail() 
+void sendMail(const char *messageContents) 
 {
        smtp_session_t session;
        smtp_message_t message;
        smtp_recipient_t recipient;
-       // auth_context_t authctx;
        const smtp_status_t *status;
        struct sigaction sa;
        char *host = "localhost:25";
        char *from = "gnunet-monkey";
        char *subject = "e-mail from Libesmtp!";
-       const char *recipient_address = "address@hidden";
+       const char *recipient_address = "address@hidden";
        char tempFileName[1000];
        int tempFd;
        FILE *fp;
@@ -193,7 +192,7 @@
        sprintf(tempFileName, "/tmp/messageXXXXXX");
        tempFd = mkstemp(tempFileName);
        fp = fdopen(tempFd, "w");
-       fprintf(fp, "Hello! This is a test message!\r\n");
+       fprintf(fp, messageContents);
        fclose(fp);     
        fp = fopen(tempFileName, "r");
        smtp_set_message_fp(message, fp);
@@ -222,14 +221,7 @@
        /* Free resources consumed by the program.
         */
        smtp_destroy_session(session);
-       // auth_destroy_context(authctx);
        fclose(fp);
        auth_client_exit();
-       exit(0);
 }
 
-int main()
-{
-       sendMail();
-       return 0;
-}

Added: gnunet/src/monkey/test_gnunet_monkey.c
===================================================================
--- gnunet/src/monkey/test_gnunet_monkey.c                              (rev 0)
+++ gnunet/src/monkey/test_gnunet_monkey.c      2010-08-31 13:54:32 UTC (rev 
12779)
@@ -0,0 +1,67 @@
+/*
+     This file is part of GNUnet.
+     (C) 2009 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 3, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file monkey/test_gnunet_monkey.c
+ * @brief Testcase for Monkey
+ * @author Safey Abdel Halim
+ */
+
+/**
+ * Test case for Monkey Automatic Debugger.
+ * It launches Monkey to run binaries having 
+ * known bugs (e.g. Null Pointer Exception)
+ * Monkey should be able to detect the problem and send an e-mail
+ * containing the problem description.
+ */
+
+
+#include "platform.h"
+#include "gnunet_common.h"
+#include "gnunet_util_lib.h"
+#include "gnunet_program_lib.h"
+
+
+static int
+check ()
+{
+    GNUNET_OS_start_process (NULL, NULL, "gnunet-monkey",
+                                            "gnunet-monkey",
+                                            "./bug_null_pointer_exception", 
NULL);
+       return 0;
+}
+
+
+int
+main (int argc, char *argv[])
+{
+  int ret;
+
+  GNUNET_log_setup ("test-gnunet-monkey",
+#if VERBOSE
+                    "DEBUG",
+#else
+                    "WARNING",
+#endif
+                    NULL);
+  ret = check ();
+  return ret;
+}
+/* end of test_gnunet_monkey.c */
\ No newline at end of file




reply via email to

[Prev in Thread] Current Thread [Next in Thread]