diff --git a/CHANGES b/CHANGES index 57525ad3da..017f5cfa7f 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2.6-beta2-16 | 2018-09-29 21:30:31 -0500 + + * Add an optional plugin patch version (Jon Zeolla) 2.6-beta2-14 | 2018-09-25 16:38:29 -0500 diff --git a/NEWS b/NEWS index a9360d2eec..1b71c14db7 100644 --- a/NEWS +++ b/NEWS @@ -544,6 +544,11 @@ Changed Functionality indicated whether each Bro process was the "parent" or "child", but this is no longer relevant because each Bro node now runs as a single process. +- Bro's Plugin framework now allows a patch version. If a patch version is not + provided, it will default to 0. To specify this, modify the plugin + Configuration class in your ``src/Plugin.cc` and set + ``config.version.patch``. + Removed Functionality --------------------- diff --git a/doc/devel/plugins.rst b/doc/devel/plugins.rst index dc1c9a3cd4..bdc9305924 100644 --- a/doc/devel/plugins.rst +++ b/doc/devel/plugins.rst @@ -99,7 +99,7 @@ option:: # export BRO_PLUGIN_PATH=/path/to/rot13-plugin/build # bro -N [...] - Demo::Rot13 - (dynamic, version 0.1) + Demo::Rot13 - (dynamic, version 0.1.0) [...] That looks quite good, except for the dummy description that we should @@ -115,6 +115,7 @@ is about. We do this by editing the ``config.description`` line in config.description = "Caesar cipher rotating a string's characters by 13 places."; config.version.major = 0; config.version.minor = 1; + config.version.patch = 0; return config; } [...] @@ -124,14 +125,14 @@ Now rebuild and verify that the description is visible:: # make [...] # bro -N | grep Rot13 - Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1) + Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1.0) Bro can also show us what exactly the plugin provides with the more verbose option ``-NN``:: # bro -NN [...] - Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1) + Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1.0) [Function] Demo::rot13 [...] @@ -166,7 +167,7 @@ unpacking. To distribute the plugin in binary form, the build process conveniently creates a corresponding tarball in ``build/dist/``. In -this case, it's called ``Demo_Rot13-0.1.tar.gz``, with the version +this case, it's called ``Demo_Rot13-0.1.0.tar.gz``, with the version number coming out of the ``VERSION`` file that ``init-plugin`` put into place. The binary tarball has everything needed to run the plugin, but no further source files. Optionally, one can include @@ -395,7 +396,7 @@ let's get that in place:: % 'btest-diff output' failed unexpectedly (exit code 100) % cat .diag == File =============================== - Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1) + Demo::Rot13 - Caesar cipher rotating a string's characters by 13 places. (dynamic, version 0.1.0) [Function] Demo::rot13 == Error =============================== diff --git a/src/plugin/Plugin.cc b/src/plugin/Plugin.cc index 1264759d02..92bfcae8dc 100644 --- a/src/plugin/Plugin.cc +++ b/src/plugin/Plugin.cc @@ -445,6 +445,8 @@ void Plugin::Describe(ODesc* d) const d->Add(config.version.major); d->Add("."); d->Add(config.version.minor); + d->Add("."); + d->Add(config.version.patch); d->Add(")"); } else diff --git a/src/plugin/Plugin.h b/src/plugin/Plugin.h index 9c5416230b..d6d2ef9d94 100644 --- a/src/plugin/Plugin.h +++ b/src/plugin/Plugin.h @@ -69,16 +69,26 @@ extern const char* hook_name(HookType h); struct VersionNumber { int major; //< Major version number; int minor; //< Minor version number; + int patch; //< Patch version number; /** * Constructor. */ - VersionNumber() { major = minor = -1; } + VersionNumber() { + /** + * Major and minor versions are required. + */ + major = minor = -1; + /** + * Patch version is optional, and set to 0 if not manually set. + */ + patch = 0; + } /** * Returns true if the version is set to a non-negative value. */ - explicit operator bool() const { return major >= 0 && minor >= 0; } + explicit operator bool() const { return major >= 0 && minor >= 0 && patch >= 0; } }; /** diff --git a/testing/btest/Baseline/plugins.bifs-and-scripts-install/output b/testing/btest/Baseline/plugins.bifs-and-scripts-install/output index 093ab763f6..2ce5abfcc4 100644 --- a/testing/btest/Baseline/plugins.bifs-and-scripts-install/output +++ b/testing/btest/Baseline/plugins.bifs-and-scripts-install/output @@ -1,4 +1,4 @@ -Demo::Foo - (dynamic, version 0.1) +Demo::Foo - (dynamic, version 0.1.0) [Function] hello_plugin_world [Event] plugin_event diff --git a/testing/btest/Baseline/plugins.bifs-and-scripts/output b/testing/btest/Baseline/plugins.bifs-and-scripts/output index db9e4cbc49..139937d4cb 100644 --- a/testing/btest/Baseline/plugins.bifs-and-scripts/output +++ b/testing/btest/Baseline/plugins.bifs-and-scripts/output @@ -1,4 +1,4 @@ -Demo::Foo - (dynamic, version 0.1) +Demo::Foo - (dynamic, version 0.1.0) [Function] hello_plugin_world [Event] plugin_event diff --git a/testing/btest/Baseline/plugins.file/output b/testing/btest/Baseline/plugins.file/output index 487fa811c3..5b0ee4919f 100644 --- a/testing/btest/Baseline/plugins.file/output +++ b/testing/btest/Baseline/plugins.file/output @@ -1,4 +1,4 @@ -Demo::Foo - A Foo test analyzer (dynamic, version 1.0) +Demo::Foo - A Foo test analyzer (dynamic, version 1.0.0) [File Analyzer] Foo (ANALYZER_FOO) [Event] foo_piece diff --git a/testing/btest/Baseline/plugins.init-plugin/output b/testing/btest/Baseline/plugins.init-plugin/output index 8869685118..7c85d7a281 100644 --- a/testing/btest/Baseline/plugins.init-plugin/output +++ b/testing/btest/Baseline/plugins.init-plugin/output @@ -1,3 +1,3 @@ -Demo::Foo - (dynamic, version 0.1) +Demo::Foo - (dynamic, version 0.1.0) === diff --git a/testing/btest/Baseline/plugins.pktdumper/output b/testing/btest/Baseline/plugins.pktdumper/output index 42b51e8051..1e46e199aa 100644 --- a/testing/btest/Baseline/plugins.pktdumper/output +++ b/testing/btest/Baseline/plugins.pktdumper/output @@ -1,4 +1,4 @@ -Demo::Foo - A Foo packet dumper (dynamic, version 1.0) +Demo::Foo - A Foo packet dumper (dynamic, version 1.0.0) [Packet Dumper] FooPktDumper (dumper prefix: "foo") === diff --git a/testing/btest/Baseline/plugins.plugin-nopatchversion/output b/testing/btest/Baseline/plugins.plugin-nopatchversion/output new file mode 100644 index 0000000000..03f1437035 --- /dev/null +++ b/testing/btest/Baseline/plugins.plugin-nopatchversion/output @@ -0,0 +1 @@ +Testing::NoPatchVersion - Testing a plugin without a specified patch version (dynamic, version 0.1.0) diff --git a/testing/btest/Baseline/plugins.plugin-withpatchversion/output b/testing/btest/Baseline/plugins.plugin-withpatchversion/output new file mode 100644 index 0000000000..afb9fa61c3 --- /dev/null +++ b/testing/btest/Baseline/plugins.plugin-withpatchversion/output @@ -0,0 +1 @@ +Testing::WithPatchVersion - Testing a plugin with a specified patch version (dynamic, version 0.1.4) diff --git a/testing/btest/Baseline/plugins.protocol/output b/testing/btest/Baseline/plugins.protocol/output index 1c8dccc973..675a884b16 100644 --- a/testing/btest/Baseline/plugins.protocol/output +++ b/testing/btest/Baseline/plugins.protocol/output @@ -1,4 +1,4 @@ -Demo::Foo - A Foo test analyzer (dynamic, version 1.0) +Demo::Foo - A Foo test analyzer (dynamic, version 1.0.0) [Analyzer] Foo (ANALYZER_FOO, enabled) [Event] foo_message diff --git a/testing/btest/Baseline/plugins.reader/output b/testing/btest/Baseline/plugins.reader/output index 0f8980d0e7..1727ea77bc 100644 --- a/testing/btest/Baseline/plugins.reader/output +++ b/testing/btest/Baseline/plugins.reader/output @@ -1,4 +1,4 @@ -Demo::Foo - A Foo test input reader (dynamic, version 1.0) +Demo::Foo - A Foo test input reader (dynamic, version 1.0.0) [Reader] Foo (Input::READER_FOO) === diff --git a/testing/btest/Baseline/plugins.writer/output b/testing/btest/Baseline/plugins.writer/output index bbd11b8484..90cf6f42bf 100644 --- a/testing/btest/Baseline/plugins.writer/output +++ b/testing/btest/Baseline/plugins.writer/output @@ -1,4 +1,4 @@ -Demo::Foo - A Foo test logging writer (dynamic, version 1.0) +Demo::Foo - A Foo test logging writer (dynamic, version 1.0.0) [Writer] Foo (Log::WRITER_FOO) === diff --git a/testing/btest/README b/testing/btest/README index a635251939..04f2a626c1 100644 --- a/testing/btest/README +++ b/testing/btest/README @@ -20,17 +20,17 @@ Significant Subdirectories Packet captures utilized by the various BTest tests. * scripts/ - This hierarchy of tests emulates the hierarchy of the Bro scripts/ - directory. + This hierarchy of tests emulates the hierarchy of the Bro scripts/ + directory. * coverage/ - This collection of tests relates to checking whether we're covering - everything we want to in terms of tests, documentation, and which - scripts get loaded in different Bro configurations. These tests are - more prone to fail as new Bro scripts are developed and added to the - distribution -- checking the individual test's comments is the best - place to check for more details on what exactly the test is checking - and hints on how to fix it when it fails. + This collection of tests relates to checking whether we're covering + everything we want to in terms of tests, documentation, and which + scripts get loaded in different Bro configurations. These tests are + more prone to fail as new Bro scripts are developed and added to the + distribution -- checking the individual test's comments is the best + place to check for more details on what exactly the test is checking + and hints on how to fix it when it fails. Running Tests ============= diff --git a/testing/btest/plugins/file-plugin/src/Plugin.cc b/testing/btest/plugins/file-plugin/src/Plugin.cc index 4607a0549f..5c61d28e28 100644 --- a/testing/btest/plugins/file-plugin/src/Plugin.cc +++ b/testing/btest/plugins/file-plugin/src/Plugin.cc @@ -16,5 +16,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo test analyzer"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/hooks-plugin/src/Plugin.cc b/testing/btest/plugins/hooks-plugin/src/Plugin.cc index c5b8f4e981..52aea76bda 100644 --- a/testing/btest/plugins/hooks-plugin/src/Plugin.cc +++ b/testing/btest/plugins/hooks-plugin/src/Plugin.cc @@ -29,6 +29,7 @@ plugin::Configuration Plugin::Configure() config.description = "Exercises all plugin hooks"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/logging-hooks-plugin/src/Plugin.cc b/testing/btest/plugins/logging-hooks-plugin/src/Plugin.cc index 32dd2b17b3..eb06d5a27d 100644 --- a/testing/btest/plugins/logging-hooks-plugin/src/Plugin.cc +++ b/testing/btest/plugins/logging-hooks-plugin/src/Plugin.cc @@ -21,6 +21,7 @@ plugin::Configuration Plugin::Configure() config.description = "Exercises Log hooks"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/pktdumper-plugin/src/Plugin.cc b/testing/btest/plugins/pktdumper-plugin/src/Plugin.cc index 81ef8c79f4..f4417ff6a2 100644 --- a/testing/btest/plugins/pktdumper-plugin/src/Plugin.cc +++ b/testing/btest/plugins/pktdumper-plugin/src/Plugin.cc @@ -16,5 +16,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo packet dumper"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/pktsrc-plugin/src/Plugin.cc b/testing/btest/plugins/pktsrc-plugin/src/Plugin.cc index ecc94866a6..088a4dd36d 100644 --- a/testing/btest/plugins/pktsrc-plugin/src/Plugin.cc +++ b/testing/btest/plugins/pktsrc-plugin/src/Plugin.cc @@ -16,5 +16,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo packet source"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/plugin-nopatchversion-plugin/.btest-ignore b/testing/btest/plugins/plugin-nopatchversion-plugin/.btest-ignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testing/btest/plugins/plugin-nopatchversion-plugin/src/Plugin.cc b/testing/btest/plugins/plugin-nopatchversion-plugin/src/Plugin.cc new file mode 100644 index 0000000000..292f2c90de --- /dev/null +++ b/testing/btest/plugins/plugin-nopatchversion-plugin/src/Plugin.cc @@ -0,0 +1,16 @@ + +#include "Plugin.h" + +namespace plugin { namespace Testing_NoPatchVersion { Plugin plugin; } } + +using namespace plugin::Testing_NoPatchVersion; + +plugin::Configuration Plugin::Configure() + { + plugin::Configuration config; + config.name = "Testing::NoPatchVersion"; + config.description = "Testing a plugin without a specified patch version"; + config.version.major = 0; + config.version.minor = 1; + return config; + } diff --git a/testing/btest/plugins/plugin-nopatchversion.bro b/testing/btest/plugins/plugin-nopatchversion.bro new file mode 100644 index 0000000000..2279efde6a --- /dev/null +++ b/testing/btest/plugins/plugin-nopatchversion.bro @@ -0,0 +1,5 @@ +# @TEST-EXEC: ${DIST}/aux/bro-aux/plugin-support/init-plugin -u . Testing NoPatchVersion +# @TEST-EXEC: cp -r %DIR/plugin-nopatchversion-plugin/* . +# @TEST-EXEC: ./configure --bro-dist=${DIST} && make +# @TEST-EXEC: BRO_PLUGIN_PATH=$(pwd) bro -N Testing::NoPatchVersion >> output +# @TEST-EXEC: btest-diff output diff --git a/testing/btest/plugins/plugin-withpatchversion-plugin/.btest-ignore b/testing/btest/plugins/plugin-withpatchversion-plugin/.btest-ignore new file mode 100644 index 0000000000..e69de29bb2 diff --git a/testing/btest/plugins/plugin-withpatchversion-plugin/src/Plugin.cc b/testing/btest/plugins/plugin-withpatchversion-plugin/src/Plugin.cc new file mode 100644 index 0000000000..95221b7118 --- /dev/null +++ b/testing/btest/plugins/plugin-withpatchversion-plugin/src/Plugin.cc @@ -0,0 +1,17 @@ + +#include "Plugin.h" + +namespace plugin { namespace Testing_WithPatchVersion { Plugin plugin; } } + +using namespace plugin::Testing_WithPatchVersion; + +plugin::Configuration Plugin::Configure() + { + plugin::Configuration config; + config.name = "Testing::WithPatchVersion"; + config.description = "Testing a plugin with a specified patch version"; + config.version.major = 0; + config.version.minor = 1; + config.version.patch = 4; + return config; + } diff --git a/testing/btest/plugins/plugin-withpatchversion.bro b/testing/btest/plugins/plugin-withpatchversion.bro new file mode 100644 index 0000000000..4d86f09719 --- /dev/null +++ b/testing/btest/plugins/plugin-withpatchversion.bro @@ -0,0 +1,5 @@ +# @TEST-EXEC: ${DIST}/aux/bro-aux/plugin-support/init-plugin -u . Testing WithPatchVersion +# @TEST-EXEC: cp -r %DIR/plugin-withpatchversion-plugin/* . +# @TEST-EXEC: ./configure --bro-dist=${DIST} && make +# @TEST-EXEC: BRO_PLUGIN_PATH=$(pwd) bro -N Testing::WithPatchVersion >> output +# @TEST-EXEC: btest-diff output diff --git a/testing/btest/plugins/protocol-plugin/src/Plugin.cc b/testing/btest/plugins/protocol-plugin/src/Plugin.cc index e6966bf538..bd2662d67c 100644 --- a/testing/btest/plugins/protocol-plugin/src/Plugin.cc +++ b/testing/btest/plugins/protocol-plugin/src/Plugin.cc @@ -16,5 +16,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo test analyzer"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/reader-plugin/src/Plugin.cc b/testing/btest/plugins/reader-plugin/src/Plugin.cc index acc715511a..fdf16c412b 100644 --- a/testing/btest/plugins/reader-plugin/src/Plugin.cc +++ b/testing/btest/plugins/reader-plugin/src/Plugin.cc @@ -15,5 +15,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo test input reader"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/reporter-hook-plugin/src/Plugin.cc b/testing/btest/plugins/reporter-hook-plugin/src/Plugin.cc index 9c8eee6ca8..d9c856966a 100644 --- a/testing/btest/plugins/reporter-hook-plugin/src/Plugin.cc +++ b/testing/btest/plugins/reporter-hook-plugin/src/Plugin.cc @@ -19,6 +19,7 @@ plugin::Configuration Plugin::Configure() config.description = "Exercise Reporter Hook"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; } diff --git a/testing/btest/plugins/writer-plugin/src/Plugin.cc b/testing/btest/plugins/writer-plugin/src/Plugin.cc index e07e071204..e22a2cd645 100644 --- a/testing/btest/plugins/writer-plugin/src/Plugin.cc +++ b/testing/btest/plugins/writer-plugin/src/Plugin.cc @@ -15,5 +15,6 @@ plugin::Configuration Plugin::Configure() config.description = "A Foo test logging writer"; config.version.major = 1; config.version.minor = 0; + config.version.patch = 0; return config; }