Renamed content_manager_tester + improved header parsing + new tests

This commit is contained in:
Sylvain Berfini 2018-03-27 16:10:17 +02:00
parent af2a607014
commit ee88045383
9 changed files with 73 additions and 19 deletions

View file

@ -82,7 +82,6 @@ ContentType::ContentType (const string &contentType) : Header(*new ContentTypePr
params.erase(0, posParam + 1);
} while (posParam != std::string::npos);
}
setValue(d->type + "/" + d->subType);
}
ContentType::ContentType (const string &type, const string &subType) : Header(*new ContentTypePrivate) {

View file

@ -213,6 +213,15 @@ const list<Header> &Content::getHeaders () const {
return d->headers;
}
const Header &Content::getHeader (const string &headerName) const {
L_D();
list<Header>::const_iterator it = findHeader(headerName);
if (it != d->headers.cend()) {
return *it;
}
return Utils::getEmptyConstRefObject<Header>();
}
void Content::removeHeader (const string &headerName) {
L_D();
auto it = findHeader(headerName);

View file

@ -78,6 +78,7 @@ public:
virtual bool isFileTransfer () const;
const std::list<Header> &getHeaders () const;
const Header &getHeader (const std::string &headerName) const;
void addHeader (const std::string &headerName, const std::string &headerValue);
void addHeader (const Header &header);
void removeHeader (const std::string &headerName);

View file

@ -33,13 +33,34 @@ LINPHONE_BEGIN_NAMESPACE
// -----------------------------------------------------------------------------
Header::Header(HeaderPrivate &p) : ClonableObject(p) {
Header::Header(HeaderPrivate &p) : ClonableObject(p) {}
}
Header::Header() : ClonableObject(*new HeaderPrivate) {}
Header::Header (const string &name, const string &value) : ClonableObject(*new HeaderPrivate) {
setName(name);
setValue(value);
size_t posParam = value.find(";");
if (posParam == string::npos) {
setValue(value);
return;
}
string parsedValue = value.substr(0, posParam);
string params = value.substr(posParam + 1);
string token;
do {
posParam = params.find(";");
if (posParam == string::npos) {
token = params;
} else {
token = params.substr(0, posParam);
}
addParameter(HeaderParam(token));
params.erase(0, posParam + 1);
} while (posParam != std::string::npos);
setValue(parsedValue);
}
Header::Header (const string &name, const string &value, const list<HeaderParam> &params) : Header(name, value) {
@ -93,12 +114,12 @@ void Header::cleanParameters () {
d->parameters.clear();
}
const std::list<HeaderParam> &Header::getParameters () const {
const list<HeaderParam> &Header::getParameters () const {
L_D();
return d->parameters;
}
void Header::addParameter (const std::string &paramName, const std::string &paramValue) {
void Header::addParameter (const string &paramName, const string &paramValue) {
addParameter(HeaderParam(paramName, paramValue));
}
@ -108,14 +129,14 @@ void Header::addParameter (const HeaderParam &param) {
d->parameters.push_back(param);
}
void Header::addParameters(const std::list<HeaderParam> &params) {
void Header::addParameters(const list<HeaderParam> &params) {
for (auto it = std::begin(params); it!=std::end(params); ++it) {
HeaderParam param = *it;
addParameter(param.getName(), param.getValue());
}
}
void Header::removeParameter (const std::string &paramName) {
void Header::removeParameter (const string &paramName) {
L_D();
auto it = findParameter(paramName);
if (it != d->parameters.cend())
@ -126,16 +147,16 @@ void Header::removeParameter (const HeaderParam &param) {
removeParameter(param.getName());
}
std::list<HeaderParam>::const_iterator Header::findParameter (const std::string &paramName) const {
list<HeaderParam>::const_iterator Header::findParameter (const string &paramName) const {
L_D();
return findIf(d->parameters, [&paramName](const HeaderParam &param) {
return param.getName() == paramName;
});
}
const HeaderParam &Header::getParameter (const std::string &paramName) const {
const HeaderParam &Header::getParameter (const string &paramName) const {
L_D();
std::list<HeaderParam>::const_iterator it = findParameter(paramName);
list<HeaderParam>::const_iterator it = findParameter(paramName);
if (it != d->parameters.cend()) {
return *it;
}

View file

@ -33,6 +33,7 @@ class HeaderParam;
class LINPHONE_PUBLIC Header : public ClonableObject {
public:
Header ();
Header (const std::string &name, const std::string &value);
Header (const std::string &name, const std::string &value, const std::list<HeaderParam> &params);
Header (const Header &other);

View file

@ -199,7 +199,7 @@ set(SOURCE_FILES_C
set(SOURCE_FILES_CXX
clonable-object-tester.cpp
conference-event-tester.cpp
content-manager-tester.cpp
contents-tester.cpp
cpim-tester.cpp
main-db-tester.cpp
multipart-tester.cpp

View file

@ -298,6 +298,7 @@ void multipart_to_list () {
ms_message("\n\n----- Original part 3 -----");
ms_message("%s", originalStr3.c_str());
BC_ASSERT_TRUE(originalStr3 == generatedStr3);
BC_ASSERT_TRUE(content3.getHeader("Content-Encoding").getValue() == "b64");
Content content4 = contents.front();
contents.pop_front();
@ -316,6 +317,10 @@ void multipart_to_list () {
ms_message("\n\n----- Original part 4 -----");
ms_message("%s", originalStr4.c_str());
BC_ASSERT_TRUE(originalStr4 == generatedStr4);
BC_ASSERT_TRUE(content4.getHeader("Content-Id").getValue() == "toto");
BC_ASSERT_TRUE(content4.getHeader("Content-Id").getParameter("param1").getValue() == "value1");
BC_ASSERT_TRUE(content4.getHeader("Content-Id").getParameter("param2").getValue().empty());
BC_ASSERT_TRUE(content4.getHeader("Content-Id").getParameter("param3").getValue() == "value3");
}
void list_to_multipart () {
@ -396,17 +401,35 @@ static void content_type_parsing(void) {
BC_ASSERT_TRUE(type == contentType.asString());
}
test_t content_manager_tests[] = {
static void content_header_parsing(void) {
string value = "toto;param1=value1;param2;param3=value3";
Header header = Header("Content-Id", value);
BC_ASSERT_TRUE(header.getValue() == "toto");
BC_ASSERT_TRUE(header.getParameter("param1").getValue() == "value1");
BC_ASSERT_TRUE(header.getParameter("param2").getValue().empty());
BC_ASSERT_TRUE(header.getParameter("param3").getValue() == "value3");
BC_ASSERT_EQUAL(3, header.getParameters().size(), int, "%d");
BC_ASSERT_STRING_EQUAL("", header.getParameter("encoding").getValue().c_str());
value = "b64";
header = Header("Content-Encoding", value);
BC_ASSERT_TRUE(header.getValue() == value);
BC_ASSERT_EQUAL(0, header.getParameters().size(), int, "%d");
BC_ASSERT_STRING_EQUAL("", header.getParameter("access-type").getValue().c_str());
}
test_t contents_tests[] = {
TEST_NO_TAG("Multipart to list", multipart_to_list),
TEST_NO_TAG("List to multipart", list_to_multipart),
TEST_NO_TAG("Content type parsing", content_type_parsing)
TEST_NO_TAG("Content type parsing", content_type_parsing),
TEST_NO_TAG("Content header parsing", content_header_parsing)
};
test_suite_t content_manager_test_suite = {
"Content manager",
test_suite_t contents_test_suite = {
"Contents",
nullptr,
nullptr,
liblinphone_tester_before_each,
liblinphone_tester_after_each,
sizeof(content_manager_tests) / sizeof(content_manager_tests[0]), content_manager_tests
sizeof(contents_tests) / sizeof(contents_tests[0]), contents_tests
};

View file

@ -45,7 +45,7 @@ extern test_suite_t call_video_test_suite;
extern test_suite_t clonable_object_test_suite;
extern test_suite_t conference_event_test_suite;
extern test_suite_t conference_test_suite;
extern test_suite_t content_manager_test_suite;
extern test_suite_t contents_test_suite;
extern test_suite_t cpim_test_suite;
extern test_suite_t dtmf_test_suite;
extern test_suite_t event_test_suite;

View file

@ -604,7 +604,7 @@ void liblinphone_tester_add_suites() {
bc_tester_add_suite(&stun_test_suite);
bc_tester_add_suite(&event_test_suite);
bc_tester_add_suite(&conference_event_test_suite);
bc_tester_add_suite(&content_manager_test_suite);
bc_tester_add_suite(&contents_test_suite);
bc_tester_add_suite(&flexisip_test_suite);
bc_tester_add_suite(&remote_provisioning_test_suite);
bc_tester_add_suite(&quality_reporting_test_suite);