Skip to content

Commit 35c8cdb

Browse files
Janosch MachowinskiJanosch Machowinski
Janosch Machowinski
authored and
Janosch Machowinski
committed
test: implemented test case for setting nice value
Signed-off-by: Janosch Machowinski <[email protected]>
1 parent 5227edf commit 35c8cdb

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed

rosbag2_compression/test/rosbag2_compression/test_sequential_compression_writer.cpp

+101
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@
3737

3838
#include "mock_compression_factory.hpp"
3939

40+
#ifdef _WIN32
41+
#include <windows.h>
42+
#else
43+
#include <unistd.h>
44+
#include <sys/resource.h>
45+
#endif
46+
4047
using namespace testing; // NOLINT
4148

4249
static constexpr const char * DefaultTestCompressor = "fake_comp";
@@ -394,6 +401,100 @@ TEST_P(SequentialCompressionWriterTest, writer_writes_with_compression_queue_siz
394401
EXPECT_EQ(fake_storage_size_, kNumMessagesToWrite);
395402
}
396403

404+
405+
TEST_P(SequentialCompressionWriterTest, writer_sets_nice_value)
406+
{
407+
const std::string test_topic_name = "test_topic";
408+
const std::string test_topic_type = "test_msgs/BasicTypes";
409+
const uint64_t kCompressionQueueSize = GetParam();
410+
const int wanted_nice_value = 10;
411+
412+
class TestCompressor : public rosbag2_compression::BaseCompressorInterface
413+
{
414+
int & detected_nice_value;
415+
416+
public:
417+
TestCompressor(int & detected_nice_value)
418+
: detected_nice_value(detected_nice_value) {}
419+
virtual std::string compress_uri(const std::string & uri)
420+
{
421+
return uri;
422+
}
423+
424+
virtual void compress_serialized_bag_message(
425+
const rosbag2_storage::SerializedBagMessage * bag_message,
426+
rosbag2_storage::SerializedBagMessage * compressed_message)
427+
{
428+
#ifdef _WIN32
429+
int cur_nice_value = getpriority(PRIO_PROCESS, 0);
430+
if (cur_nice_value != -1 && errno == 0) {
431+
432+
detected_nice_value = cur_nice_value;
433+
}
434+
#else
435+
//FIXME implement windows version
436+
#endif
437+
438+
*compressed_message = *bag_message;
439+
}
440+
441+
/**
442+
* Get the identifier of the compression algorithm.
443+
* This is appended to the extension of the compressed file.
444+
*/
445+
virtual std::string get_compression_identifier() const
446+
{
447+
return "niceTest";
448+
}
449+
};
450+
451+
class FakeFactory : public rosbag2_compression::CompressionFactory
452+
{
453+
int & detected_nice_value;
454+
455+
public:
456+
FakeFactory(int & detected_nice_value)
457+
: detected_nice_value(detected_nice_value) {}
458+
459+
virtual std::shared_ptr<rosbag2_compression::BaseCompressorInterface>
460+
create_compressor(const std::string & /*compression_format*/)
461+
{
462+
return std::make_shared<TestCompressor>(detected_nice_value);
463+
}
464+
};
465+
466+
// queue size should be 0 or at least the number of remaining messages to prevent message loss
467+
rosbag2_compression::CompressionOptions compression_options {
468+
DefaultTestCompressor,
469+
rosbag2_compression::CompressionMode::MESSAGE,
470+
kCompressionQueueSize,
471+
kDefaultCompressionQueueThreads,
472+
wanted_nice_value
473+
};
474+
475+
// nice values are in the range from -20 to +19, so this value will never be read
476+
int detected_nice_value = 100;
477+
478+
initializeFakeFileStorage();
479+
initializeWriter(compression_options, std::make_unique<FakeFactory>(detected_nice_value));
480+
481+
writer_->open(tmp_dir_storage_options_);
482+
writer_->create_topic({test_topic_name, test_topic_type, "", "", ""});
483+
484+
auto message = std::make_shared<rosbag2_storage::SerializedBagMessage>();
485+
message->topic_name = test_topic_name;
486+
487+
const size_t kNumMessagesToWrite = 5;
488+
for (size_t i = 0; i < kNumMessagesToWrite; i++) {
489+
writer_->write(message);
490+
}
491+
writer_.reset(); // reset will call writer destructor
492+
493+
EXPECT_EQ(detected_nice_value, *compression_options.thread_nice_value);
494+
495+
EXPECT_EQ(fake_storage_size_, kNumMessagesToWrite);
496+
}
497+
397498
INSTANTIATE_TEST_SUITE_P(
398499
SequentialCompressionWriterTestQueueSizes,
399500
SequentialCompressionWriterTest,

0 commit comments

Comments
 (0)