// This file is part of BOINC. // http://boinc.berkeley.edu // Copyright (C) 2020 University of California // // 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 . // A validator that runs scripts to check and compare results, // so that you can do your validation in Python, PHP, Perl, bash, etc. // // cmdline args to this program: // --init_script "scriptname arg1 ... argn" // --compare_script "scriptname arg1 ... argn" // // You must specify at least one. // // The init script checks the validity of a result, // e.g. that the output files have the proper format. // It returns zero if the files are valid // // The compare script compares two results. // If returns zero if the output files are equivalent. // // arg1 ... argn represent cmdline args to be passed to the scripts. // The options for init_script are: // // files list of paths of output files of the result // result_id result ID // runtime task runtime // // Additional options for compare_script, for the second result: // files2 list of paths of output files // result_id2 result ID // runtime2 task runtime // // "arg1 ... argn" can be omitted, // in which case only the output file paths are passed to the scripts. #include #include "validate_util2.h" #include "error_numbers.h" #include "boinc_db.h" #include "sched_util.h" #include "validate_util.h" #include "validator.h" using std::string; using std::vector; vector init_script, compare_script; // first element is script path, other elements are args int validate_handler_init(int argc, char** argv) { // handle project specific arguments here for (int i=1; i paths; int retval; retval = get_output_file_paths(result, paths); if (retval) { fprintf(stderr, "get_output_file_paths() returned %d\n", retval); return retval; } char cmd[4096]; sprintf(cmd, "../bin/%s", init_script[0].c_str()); for (i=1; i paths1, paths2; int retval; retval = get_output_file_paths(r1, paths1); if (retval) { fprintf(stderr, "get_output_file_paths() returned %d\n", retval); return retval; } retval = get_output_file_paths(r2, paths2); if (retval) { fprintf(stderr, "get_output_file_paths() returned %d\n", retval); return retval; } char cmd[4096]; sprintf(cmd, "../bin/%s", compare_script[0].c_str()); for (i=1; i