[Top][All Lists]
[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
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r12779 - gnunet/src/monkey,
gnunet <=