From: Martin Vidner Date: Fri, 17 Jan 2020 14:58:23 +0000 (+0100) Subject: forwarding-zypp-plugin X-Git-Tag: v0.8.9^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=227bed56ddf9afb8541a95a0b1dfc0c939ebe049;p=thirdparty%2Fsnapper.git forwarding-zypp-plugin a middleware that reparses what its child plugin is replying and thus enables detecting protocol errors like bsc#1160938 --- diff --git a/zypp-plugin/.gitignore b/zypp-plugin/.gitignore index ff41d306..54dbbb3b 100644 --- a/zypp-plugin/.gitignore +++ b/zypp-plugin/.gitignore @@ -1,5 +1,6 @@ *.o snapper-zypp-plugin +forwarding-zypp-plugin *.test *.log *.trs diff --git a/zypp-plugin/Makefile.am b/zypp-plugin/Makefile.am index f03da12d..1fb0a296 100644 --- a/zypp-plugin/Makefile.am +++ b/zypp-plugin/Makefile.am @@ -17,8 +17,16 @@ snapper_zypp_plugin_LDADD = \ ../dbus/libdbus.la \ $(JSONC_LIBS) -check_PROGRAMS = regex.test -TESTS = $(check_PROGRAMS) +check_PROGRAMS = regex.test forwarding-zypp-plugin + +forwarding_zypp_plugin_SOURCES = \ + forwarding_zypp_plugin.cc \ + zypp_plugin.cc zypp_plugin.h +forwarding_zypp_plugin_LDADD = \ + ../snapper/libsnapper.la \ + -lpthread + +TESTS = regex.test regex_test_SOURCES = regex_test.cc \ solvable_matcher.cc solvable_matcher.h regex_test_LDADD = \ diff --git a/zypp-plugin/forwarding_zypp_plugin.cc b/zypp-plugin/forwarding_zypp_plugin.cc new file mode 100644 index 00000000..e41f3054 --- /dev/null +++ b/zypp-plugin/forwarding_zypp_plugin.cc @@ -0,0 +1,71 @@ +/* + * Copyright (c) 2020 SUSE LLC + * + * All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as published + * by the Free Software Foundation. + * + * This program 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 this program; if not, contact SUSE LLC. + * + * To contact SUSE about this file by physical or electronic mail, you may + * find current contact information at www.suse.com. + */ + +#include +using namespace std; + +#include +namespace bp = boost::process; + +#include "zypp_plugin.h" + +class ForwardingZyppPlugin : public ZyppPlugin { +public: + ForwardingZyppPlugin(const string& another_plugin); + + virtual int main() override; + virtual Message dispatch(const Message&) override; +private: + string child_program; + bp::ipstream childs_out; // we read this + // bp::ipstream childs_err; // we read this + bp::opstream childs_in; // we write this +}; + +ForwardingZyppPlugin::ForwardingZyppPlugin(const string& another_plugin) + : child_program(another_plugin) +{ +} + +int ForwardingZyppPlugin::main() { + bp::child c(child_program, + bp::std_out > childs_out, + // bp::std_err > childs_err, + bp::std_in < childs_in); + + int result = ZyppPlugin::main(); + + // c.wait(); + return result; +} + +ZyppPlugin::Message ForwardingZyppPlugin::dispatch(const Message& msg) { + write_message(childs_in, msg); + Message reply = read_message(childs_out); + return reply; +} + +int main(int argc, char** argv) { + if (argc != 2) + throw runtime_error("Usage: forwarding-zypp-plugin ANOTHER_ZYPP_PLUGIN"); + ForwardingZyppPlugin plugin(argv[1]); + return plugin.main(); +} diff --git a/zypp-plugin/testsuite/Makefile.am b/zypp-plugin/testsuite/Makefile.am index ba7523c3..549efb77 100644 --- a/zypp-plugin/testsuite/Makefile.am +++ b/zypp-plugin/testsuite/Makefile.am @@ -5,10 +5,6 @@ check_SCRIPTS = 1-happy.test 2-malformed-xml.test 3-invalid-xml.test 4-badjson.t noinst_SCRIPTS = mock-snapperd test-helper.sh noinst_DATA = zypp-plugin-malformed.conf zypp-plugin-invalid.conf -# Hack: these tests both use mock-snapperd which is not paralellized -# so serialize them -4-badjson.log: 1-happy.log - TESTS = $(check_SCRIPTS) EXTRA_DIST = $(check_SCRIPTS) $(noinst_SCRIPTS) $(noinst_DATA) tap-driver.sh diff --git a/zypp-plugin/testsuite/test-helper.sh b/zypp-plugin/testsuite/test-helper.sh index 89461f67..bfec7d2b 100644 --- a/zypp-plugin/testsuite/test-helper.sh +++ b/zypp-plugin/testsuite/test-helper.sh @@ -12,6 +12,7 @@ runit() { SNAPPER_ZYPP_PLUGIN_SNAPPER_CONFIG=testsuite \ SNAPPER_ZYPP_PLUGIN_DBUS_SESSION=1 \ $STRACE \ + "$MYDIR"/../forwarding-zypp-plugin \ "$MYDIR"/../snapper-zypp-plugin }