Skip to content

Commit

Permalink
lib: use a generic record separator to split data fields
Browse files Browse the repository at this point in the history
- QualifiedResourceNameTypeConverter uses constexpr variable record_separator_ = 0x1e
  to separate data fields from each other
  • Loading branch information
franku committed Sep 20, 2018
1 parent 13b4aa6 commit 28d8d2d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 12 deletions.
6 changes: 3 additions & 3 deletions core/src/lib/qualified_resource_name_type_converter.cc
Expand Up @@ -61,7 +61,7 @@ bool QualifiedResourceNameTypeConverter::ResourceToString(const std::string &nam
{
std::string r_name = ResourceTypeToString(r_type);
if (r_name.empty()) { return false; }
str_out = r_name + std::string(":") + name_of_resource;
str_out = r_name + record_separator_ + name_of_resource;
return true;
}

Expand All @@ -72,7 +72,7 @@ bool QualifiedResourceNameTypeConverter::ResourceToString(const std::string &nam
{
std::string r_name = ResourceTypeToString(r_type);
if (r_name.empty()) { return false; }
str_out = r_name + std::string(":") + name_of_resource + std::string(":") + std::to_string(job_id);
str_out = r_name + record_separator_ + name_of_resource + record_separator_ + std::to_string(job_id);
return true;
}

Expand All @@ -94,7 +94,7 @@ bool QualifiedResourceNameTypeConverter::StringToResource(std::string &name_of_r
const std::string &str_in) const
{
std::vector<std::string> string_list;
SplitStringIntoList(str_in, string_list, ':', 3);
SplitStringIntoList(str_in, string_list, record_separator_, 3);
if (string_list.size() < 2) { /* minimum of parameters are name_of_resource and r_type */
return false;
}
Expand Down
3 changes: 2 additions & 1 deletion core/src/lib/qualified_resource_name_type_converter.h
Expand Up @@ -34,7 +34,8 @@ class QualifiedResourceNameTypeConverter {
std::string &out) const;
bool StringToResource(std::string &name_of_resource, int &r_type, int &job_id, const std::string &in) const;

private:
private:
static constexpr char record_separator_ = 0x1e;
const std::map<int, std::string> type_name_relation_map_;
const std::map<std::string, int> name_type_relation_map_;

Expand Down
Expand Up @@ -25,6 +25,8 @@
#undef private
#include "include/bareos.h"

static constexpr char record_separator_ = 0x1e;

enum
{
kOne = 1,
Expand Down Expand Up @@ -55,12 +57,16 @@ TEST(QualifiedResourceNameTypeConverter, StringToType)
EXPECT_EQ(c.StringToResourceType("kNotInsertedIntoMap"), -1);

job_id = -1; /* job_id should be unchanged */
ok = c.StringToResource(name, r_type, job_id, "kOne:Developer");
std::string tmp;
tmp = std::string("kOne") + record_separator_ + std::string("Developer");
ok = c.StringToResource(name, r_type, job_id, tmp);
EXPECT_EQ(ok, true);
EXPECT_EQ(job_id, -1);

job_id = -1; /* job_id should will be changed */
ok = c.StringToResource(name, r_type, job_id, "kOne:Developer:123");
job_id = -1; /* job_id will be changed in this test */
std::string test1 = std::string("kOne") + record_separator_ + std::string("Developer") + record_separator_ +
std::string("123");
ok = c.StringToResource(name, r_type, job_id, test1.c_str());
EXPECT_EQ(ok, true);
EXPECT_EQ(r_type, kOne);
EXPECT_EQ(job_id, 123);
Expand All @@ -71,8 +77,10 @@ TEST(QualifiedResourceNameTypeConverter, StringToType)
EXPECT_EQ(ok, false);

/* try invalid job_id (not a number) */
job_id = -2; /* job_id should be unchanged */
ok = c.StringToResource(name, r_type, job_id, "kOne:Developer:foo");
job_id = -2; /* job_id should be unchanged in this test */
std::string test2 = std::string("kOne") + record_separator_ + std::string("Developer") + record_separator_ +
std::string("foo");
ok = c.StringToResource(name, r_type, job_id, test2.c_str());
EXPECT_EQ(ok, false);
EXPECT_EQ(job_id, -2);
}
Expand All @@ -94,13 +102,16 @@ TEST(QualifiedResourceNameTypeConverter, TypeToString)
/* resource without job_id */
ok = c.ResourceToString("ResourceName", kTwo, result_str);
EXPECT_EQ(ok, true);
EXPECT_STREQ(result_str.c_str(), "kTwo:ResourceName");
std::string test1 = std::string("kTwo") + record_separator_ + std::string("ResourceName");
EXPECT_STREQ(result_str.c_str(), test1.c_str());

/* resource with job_id */
job_id = 456;
ok = c.ResourceToString("ResourceName2", kTwo, job_id, result_str);
ok = c.ResourceToString("ResourceName2", kThree, job_id, result_str);
EXPECT_EQ(ok, true);
EXPECT_STREQ(result_str.c_str(), "kTwo:ResourceName2:456");
std::string test2 = std::string("kThree") + record_separator_ + std::string("ResourceName2") + record_separator_ +
std::string("456");
EXPECT_STREQ(result_str.c_str(), test2.c_str());

/* try invalid resource type */
ok = c.ResourceToString("ResourceName", kNotInsertedIntoMap, result_str);
Expand Down

0 comments on commit 28d8d2d

Please sign in to comment.