Rename newtestsuite to testsuite
[dyninst.git] / testsuite / src / dyninst / test2_1.C
1 /*
2  * Copyright (c) 1996-2004 Barton P. Miller
3  * 
4  * We provide the Paradyn Parallel Performance Tools (below
5  * described as "Paradyn") on an AS IS basis, and do not warrant its
6  * validity or performance.  We reserve the right to update, modify,
7  * or discontinue this software at any time.  We shall have no
8  * obligation to supply such updates or modifications or any other
9  * form of support to you.
10  * 
11  * This license is for research uses.  For such uses, there is no
12  * charge. We define "research use" to mean you may freely use it
13  * inside your organization for whatever purposes you see fit. But you
14  * may not re-distribute Paradyn or parts of Paradyn, in any form
15  * source or binary (including derivatives), electronic or otherwise,
16  * to any other organization or entity without our permission.
17  * 
18  * (for other uses, please contact us at paradyn@cs.wisc.edu)
19  * 
20  * All warranties, including without limitation, any warranty of
21  * merchantability or fitness for a particular purpose, are hereby
22  * excluded.
23  * 
24  * By your use of Paradyn, you understand and agree that we (or any
25  * other person or entity with proprietary rights in Paradyn) are
26  * under no obligation to provide either maintenance services,
27  * update services, notices of latent defects, or correction of
28  * defects for Paradyn.
29  * 
30  * Even if advised of the possibility of such damages, under no
31  * circumstances shall we (or any other person or entity with
32  * proprietary rights in the software licensed hereunder) be liable
33  * to you or any third party for direct, indirect, or consequential
34  * damages of any character regardless of type of action, including,
35  * without limitation, loss of profits, loss of use, loss of good
36  * will, or computer failure or malfunction.  You agree to indemnify
37  * us (and any other person or entity with proprietary rights in the
38  * software licensed hereunder) for any and all liability it may
39  * incur to third parties resulting from your use of Paradyn.
40  */
41
42 // $Id: test2_1.C,v 1.1 2008/10/30 19:20:09 legendre Exp $
43 /*
44  * #Name: test2_1
45  * #Desc: Run an executable that does not exist
46  * #Dep: 
47  * #Arch: all
48  * #Notes:
49  */
50
51 #include "BPatch.h"
52 #include "BPatch_Vector.h"
53 #include "BPatch_thread.h"
54 #include "BPatch_snippet.h"
55
56 #include "test_lib.h"
57 #include "Callbacks.h"
58
59 #include "dyninst_comp.h"
60 class test2_1_Mutator : public DyninstMutator {
61   bool useAttach;
62   BPatch *bpatch;
63
64   virtual bool hasCustomExecutionPath() { return true; }
65   virtual test_results_t setup(ParameterDict &param);
66   virtual test_results_t executeTest();
67 };
68 extern "C" DLLEXPORT DLLEXPORT TestMutator *test2_1_factory() {
69   return new test2_1_Mutator();
70 }
71
72 //
73 // Test #1 - run an executable that does not exist
74 //      Attempt to run a program file that does not exist.  Should return a
75 //      null values from createProcess (called via mutatorMAIN)
76 //
77
78 // static int mutatorTest(BPatch *bpatch, bool useAttach)
79 test_results_t test2_1_Mutator::executeTest() {
80
81     if (useAttach) {
82         logerror("Skipping test #1 (run an executable that does not exist)\n");
83         logerror("    not relevant with -attach option\n");
84         return SKIPPED;
85     } else {
86         // try to run a program that does not exist
87         clearError();
88         BPatch_thread *ret = startMutateeTest(bpatch, "./noSuchFile", "test2_1", useAttach, NULL, NULL);
89         bool gotError = getError();
90         if (ret || !gotError) {
91             logerror("**Failed** test #1 (run an executable that does not exist)\n");
92             if (ret)
93                 logerror("    created a thread handle for a non-existant file\n");
94             if (!gotError)
95                 logerror("    the error callback should have been called but wasn't\n");
96             return FAILED;
97         } else {
98             logerror("Passed test #1 (run an executable that does not exist)\n");
99             return PASSED;
100         }
101     }
102 }
103
104 // extern "C" TEST_DLL_EXPORT int test2_1_mutatorMAIN(ParameterDict &param)
105 test_results_t test2_1_Mutator::setup(ParameterDict &param) {
106   useAttach = param["useAttach"]->getInt();
107   bpatch = (BPatch *)(param["bpatch"]->getPtr());
108
109   if (useAttach) {
110     logerror("Skipping test #1 (run an executable that does not exist)\n");
111     logerror("    not relevant with -attach option\n");
112     return SKIPPED;
113   } else {
114     return PASSED;
115   }
116 }