2014-03-19 02:12:13 +00:00
|
|
|
// This file is part of BOINC.
|
|
|
|
// http://boinc.berkeley.edu
|
2019-01-12 21:43:48 +00:00
|
|
|
// Copyright (C) 2019 University of California
|
2014-03-19 02:12:13 +00:00
|
|
|
//
|
|
|
|
// BOINC is free software; you can redistribute it and/or modify it
|
|
|
|
// under the terms of the GNU Lesser General Public License
|
|
|
|
// as published by the Free Software Foundation,
|
|
|
|
// either version 3 of the License, or (at your option) any later version.
|
|
|
|
//
|
|
|
|
// BOINC 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 Lesser General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU Lesser General Public License
|
|
|
|
// along with BOINC. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
// A sample validator that accepts results whose stderr output
|
2015-01-28 21:53:12 +00:00
|
|
|
// contains or doesn't contain a given string.
|
2014-03-19 02:12:13 +00:00
|
|
|
// Usage:
|
2015-01-28 21:53:12 +00:00
|
|
|
// sample_substr_validator --stderr_string xxx [--reject_if_present]] [other options]
|
|
|
|
// --reject_if_present: reject (invalidate) the result if the string is present
|
|
|
|
// (default: accept it if the string is present)
|
2014-03-19 02:12:13 +00:00
|
|
|
|
2016-11-24 02:10:45 +00:00
|
|
|
#include <vector>
|
|
|
|
|
2014-03-19 02:12:13 +00:00
|
|
|
#include "sched_msgs.h"
|
2016-08-16 09:06:14 +00:00
|
|
|
#include "sched_util_basic.h"
|
2014-03-19 02:12:13 +00:00
|
|
|
#include "validate_util2.h"
|
|
|
|
#include "validator.h"
|
|
|
|
|
2016-11-24 02:10:45 +00:00
|
|
|
using std::vector;
|
|
|
|
|
|
|
|
vector<char*> stderr_strings;
|
2015-01-28 21:53:12 +00:00
|
|
|
bool reject_if_present = false;
|
2014-03-19 02:12:13 +00:00
|
|
|
|
2016-08-16 09:06:14 +00:00
|
|
|
int validate_handler_init(int argc, char** argv) {
|
|
|
|
// handle project specific arguments here
|
2015-02-01 02:30:36 +00:00
|
|
|
bool found = false;
|
2016-08-16 09:06:14 +00:00
|
|
|
for (int i=1; i<argc; i++) {
|
|
|
|
if (is_arg(argv[i], "stderr_string")) {
|
2016-11-24 02:10:45 +00:00
|
|
|
stderr_strings.push_back(argv[++i]);
|
2015-02-01 02:30:36 +00:00
|
|
|
found = true;
|
2016-08-16 09:06:14 +00:00
|
|
|
} else if (is_arg(argv[i], "reject_if_present")) {
|
2015-01-28 21:53:12 +00:00
|
|
|
reject_if_present = true;
|
|
|
|
}
|
2014-03-19 02:12:13 +00:00
|
|
|
}
|
2016-08-16 09:06:14 +00:00
|
|
|
|
2015-02-01 02:30:36 +00:00
|
|
|
if (!found) {
|
|
|
|
log_messages.printf(MSG_CRITICAL,
|
|
|
|
"--stderr_string missing from command line\n"
|
|
|
|
);
|
2016-08-16 09:06:14 +00:00
|
|
|
return 1;
|
2015-02-01 02:30:36 +00:00
|
|
|
}
|
2016-08-16 09:06:14 +00:00
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void validate_handler_usage() {
|
|
|
|
// describe the project specific arguments here
|
|
|
|
fprintf(stderr,
|
|
|
|
" Custom options:\n"
|
|
|
|
" --stderr_string X accept task if X is present in stderr_out\n"
|
|
|
|
" [--reject_if_present] reject (invalidate) the task if X is present\n"
|
|
|
|
);
|
2014-03-19 02:12:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int init_result(RESULT& r, void*&) {
|
2016-11-24 02:10:45 +00:00
|
|
|
for(unsigned int i=0; i<stderr_strings.size(); i++) {
|
|
|
|
char* stderr_string = stderr_strings[i];
|
|
|
|
if (strstr(r.stderr_out, stderr_string)) {
|
|
|
|
if (reject_if_present) return -1;
|
|
|
|
} else {
|
|
|
|
if (!reject_if_present) return -1;
|
|
|
|
}
|
2014-03-19 02:12:13 +00:00
|
|
|
}
|
2016-11-24 02:10:45 +00:00
|
|
|
return 0;
|
2014-03-19 02:12:13 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
int compare_results(RESULT&, void*, RESULT const&, void*, bool& match) {
|
|
|
|
match = true;
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
int cleanup_result(RESULT const&, void*) {
|
|
|
|
return 0;
|
|
|
|
}
|