Support for split testsuite, launchmon in testsuite
[dyninst.git] / testsuite / src / module.C
1 /*
2  * Copyright (c) 1996-2009 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  * By your use of Paradyn, you understand and agree that we (or any
12  * other person or entity with proprietary rights in Paradyn) are
13  * under no obligation to provide either maintenance services,
14  * update services, notices of latent defects, or correction of
15  * defects for Paradyn.
16  * 
17  * This library is free software; you can redistribute it and/or
18  * modify it under the terms of the GNU Lesser General Public
19  * License as published by the Free Software Foundation; either
20  * version 2.1 of the License, or (at your option) any later version.
21  * 
22  * This library is distributed in the hope that it will be useful,
23  * but WITHOUT ANY WARRANTY; without even the implied warranty of
24  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
25  * Lesser General Public License for more details.
26  * 
27  * You should have received a copy of the GNU Lesser General Public
28  * License along with this library; if not, write to the Free Software
29  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
30  */
31
32 #include "module.h"
33 #include "test_info_new.h"
34 #include "remotetest.h"
35
36 Module::Module(std::string name_, bool remote_)
37 {
38    name = name_;
39    remote = remote_;
40    if (remote) {
41       tester = RemoteComponentFE::createRemoteComponentFE(name, getConnection());
42    }
43    else {
44       tester = loadModuleLibrary();
45    }
46    creation_error = (tester == NULL);
47    if (creation_error) {
48       mods(remote)[name] = NULL;
49       return;
50    }
51    mods(remote)[name] = this;
52    initialized = true;
53    setup_run = false;
54 }
55
56 bool Module::registerGroupInModule(std::string modname, RunGroup *group, bool remote)
57 {
58    assert(group);
59    Module *mod = NULL;
60    if (mods(remote).count(modname) && !remote) {
61       mod = mods(remote)[modname];
62    }
63    else {
64       mod = new Module(modname, remote);
65       if (mod->creation_error) {
66          delete mod;
67          mod = NULL;
68       }
69    }
70
71    if (group->mod) {
72       assert(group->mod == mod);
73       return true;
74    }
75
76    group->mod = mod;
77    if (!mod)
78       return false;
79
80    mod->groups.push_back(group);
81    return true;
82 }
83
84
85 void Module::getAllModules(std::vector<Module *> &mods)
86 {
87    mods.clear();
88    std::map<std::string, Module *>::iterator i;
89    for (i=localmods.begin(); i!=localmods.end(); i++)
90       if ((*i).second) mods.push_back((*i).second);
91    for (i=remotemods.begin(); i!=remotemods.end(); i++)
92       if ((*i).second) mods.push_back((*i).second);
93 }
94
95 bool Module::setupRun()
96 {
97    return setup_run;
98 }
99
100 void Module::setSetupRun(bool result)
101 {
102    setup_run = result;
103 }
104
105 bool Module::isInitialized()
106 {
107   return initialized;
108 }
109
110 void Module::setInitialized(bool result)
111 {
112   initialized = result;
113 }
114
115
116 std::map<std::string, Module *> Module::remotemods;
117 std::map<std::string, Module *> Module::localmods;