From 01936bf6d6e6bfa004b0ed998d33bf5f97bcb5f3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rados=C5=82aw=20Korzeniewski?= Date: Thu, 10 Jun 2021 12:38:06 +0200 Subject: [PATCH] metaplugin: Add error messages handling regression tests. --- .../src/plugins/fd/pluginlib/metaplugin.cpp | 22 ++++----- .../fd/pluginlib/test_metaplugin_backend.c | 46 +++++++++++++++++++ .../kubernetes-plugin-test-bacula-dir.conf.in | 28 +++++++++++ regress/tests/kubernetes-plugin-protocol-test | 2 + 4 files changed, 84 insertions(+), 14 deletions(-) diff --git a/bacula/src/plugins/fd/pluginlib/metaplugin.cpp b/bacula/src/plugins/fd/pluginlib/metaplugin.cpp index 59c963e36..b043f9d7f 100644 --- a/bacula/src/plugins/fd/pluginlib/metaplugin.cpp +++ b/bacula/src/plugins/fd/pluginlib/metaplugin.cpp @@ -776,6 +776,7 @@ bRC METAPLUGIN::send_parameters(bpContext *ctx, char *command) "regress_backup_other_file", "regress_error_backup_abort", "regress_metadata_support", + "regress_standard_error_backup", NULL, }; #endif @@ -1126,19 +1127,6 @@ bRC METAPLUGIN::prepare_backend(bpContext *ctx, char type, char *command) return bRC_Error; } } - // if (listing != ListingNone){ - // DMSG0(ctx, DINFO, "Start Listing (4) ...\n"); - // if (send_startlisting(ctx) != bRC_OK){ - // backend.ctx->terminate(ctx); - // return bRC_Error; - // } - // } else { - // DMSG0(ctx, DINFO, "Start Estimate (4) ...\n"); - // if (send_startestimate(ctx) != bRC_OK){ - // backend.ctx->terminate(ctx); - // return bRC_Error; - // } - // } break; case BACKEND_JOB_INFO_RESTORE: /* Start Restore (4) */ @@ -1338,7 +1326,7 @@ bRC METAPLUGIN::perform_read_data(bpContext *ctx, struct io_pkt *io) rc = backend.ctx->read_data_fixed(ctx, io->buf, io->count); if (rc < 0){ io->status = rc; - io->io_errno = rc; + io->io_errno = EIO; return bRC_Error; } io->status = rc; @@ -1831,6 +1819,12 @@ bRC METAPLUGIN::perform_read_pluginobject(bpContext *ctx, struct save_pkt *sp) sp->plugin_obj.object_size = plugin_obj_size; continue; } + if (scan_parameter_str(cmd, "PLUGINOBJ_COUNT:", param)){ + uint32_t count = str_to_int64(param.c_str()); + DMSG1(ctx, DDEBUG, "count: %lu\n", count); + sp->plugin_obj.count = count; + continue; + } /* error in protocol */ DMSG(ctx, DERROR, "Protocol error, got unknown command: %s\n", cmd.c_str()); JMSG(ctx, M_FATAL, "Protocol error, got unknown command: %s\n", cmd.c_str()); diff --git a/bacula/src/plugins/fd/pluginlib/test_metaplugin_backend.c b/bacula/src/plugins/fd/pluginlib/test_metaplugin_backend.c index 88ed8765f..e62e061ab 100644 --- a/bacula/src/plugins/fd/pluginlib/test_metaplugin_backend.c +++ b/bacula/src/plugins/fd/pluginlib/test_metaplugin_backend.c @@ -59,6 +59,7 @@ bool regress_error_listing_stderr = false; bool regress_error_restore_stderr = false; bool regress_backup_other_file = false; bool regress_metadata_support = false; +bool regress_standard_error_backup = false; #define BUFLEN 4096 @@ -379,6 +380,26 @@ void perform_backup() write_plugin('C', "DATA\n"); write_plugin('I', "TEST8Data"); + if (regress_standard_error_backup) + { + // next file + snprintf(buf, BIGBUFLEN, "FNAME:%s/bucket/%d/standard-error-file\n", PLUGINPREFIX, mypid); + write_plugin('C', buf); + write_plugin('C', "STAT:F 1048576 200 200 100640 1\n"); + write_plugin('C', "TSTAMP:1504271937 1504271937 1504271937\n"); + signal_eod(); + write_plugin('I', "TEST8-Error-Start"); + /* here comes a file data contents */ + write_plugin('E', "TEST8-Error: Standard IO Error goes Here"); + // write_plugin('C', "DATA\n"); + // write_plugin('D', "/* here comes a file data contents */"); + // write_plugin('D', "/* here comes another file line */"); + // write_plugin('D', "/* here comes another file line */"); + // write_plugin('D', "/* here comes another file line */"); + write_plugin('I', "TEST8-Error-End"); + // signal_eod(); + } + if (regress_backup_plugin_objects) { // test Plugin Objects interface @@ -435,6 +456,26 @@ void perform_backup() write_plugin('D', "/* here comes another file line */"); signal_eod(); + if (regress_standard_error_backup) + { + // next file + snprintf(buf, BIGBUFLEN, "FNAME:%s/bucket/%d/standard-error-file2\n", PLUGINPREFIX, mypid); + write_plugin('C', buf); + write_plugin('C', "STAT:F 1048576 200 200 100640 1\n"); + write_plugin('C', "TSTAMP:1504271937 1504271937 1504271937\n"); + signal_eod(); + write_plugin('I', "TEST8-Error-Start"); + /* here comes a file data contents */ + write_plugin('C', "DATA\n"); + write_plugin('D', "/* here comes a file data contents */"); + write_plugin('D', "/* here comes another file line */"); + write_plugin('D', "/* here comes another file line */"); + write_plugin('D', "/* here comes another file line */"); + write_plugin('E', "TEST8-Error: Standard IO Error goes Here"); + write_plugin('I', "TEST8-Error-End"); + // signal_eod(); + } + const int bigfileblock = 100000; const int bigfilesize = bigfileblock * 5; snprintf(buf, BIGBUFLEN, "FNAME:%s/bucket/%d/bigfile.raw\n", PLUGINPREFIX, mypid); @@ -947,6 +988,7 @@ int main(int argc, char** argv) { // "regress_error_restore_stderr", // "regress_backup_plugin_objects", // "regress_error_backup_abort", + // "regress_standard_error_backup", if (strcmp(buf, "regress_error_plugin_params=1\n") == 0){ regress_error_plugin_params = true; continue; @@ -991,6 +1033,10 @@ int main(int argc, char** argv) { regress_metadata_support = true; continue; } + if (strcmp(buf, "regress_standard_error_backup=1\n") == 0){ + regress_standard_error_backup = true; + continue; + } if (sscanf(buf, "listing=%s\n", buf) == 1){ strcpy(listing, buf); continue; diff --git a/regress/scripts/kubernetes-plugin-test-bacula-dir.conf.in b/regress/scripts/kubernetes-plugin-test-bacula-dir.conf.in index 8fc6944c8..357d243b5 100644 --- a/regress/scripts/kubernetes-plugin-test-bacula-dir.conf.in +++ b/regress/scripts/kubernetes-plugin-test-bacula-dir.conf.in @@ -95,6 +95,34 @@ FileSet { } } +Job { + Name = "PluginK8STestProtocol5" + JobDefs = "BackupJob" + FileSet="TestPluginK8SSetProtocol5" +} + +FileSet { + Name = "TestPluginK8SSetProtocol5" + Include { + Options { signature=MD5 } + Plugin = "kubernetes: regress_metadata_support" + } +} + +Job { + Name = "PluginK8STestProtocol6" + JobDefs = "BackupJob" + FileSet="TestPluginK8SSetProtocol6" +} + +FileSet { + Name = "TestPluginK8SSetProtocol6" + Include { + Options { signature=MD5 } + Plugin = "kubernetes: regress_standard_error_backup" + } +} + FileSet { Name = "TestPluginKubernetesSet" Include { Options { signature=SHA1 } diff --git a/regress/tests/kubernetes-plugin-protocol-test b/regress/tests/kubernetes-plugin-protocol-test index 6f6574f89..d42b4d576 100755 --- a/regress/tests/kubernetes-plugin-protocol-test +++ b/regress/tests/kubernetes-plugin-protocol-test @@ -10,6 +10,8 @@ FilesetBackup1="TestPluginK8SSetProtocol1" JobBackup2="PluginK8STestProtocol2" JobBackup3="PluginK8STestProtocol3" JobBackup4="PluginK8STestProtocol4" +JobBackup5="PluginK8STestProtocol5" +JobBackup6="PluginK8STestProtocol6" Plugin="kubernetes:" . scripts/functions -- 2.47.3