Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
胡斌
/
srs
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
winlin
2014-07-20 15:53:19 +0800
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
86ad39f00101abfa0a4dd7f1a1b846d746dd992d
86ad39f0
1 parent
9b6c2264
finish basic utest for config
隐藏空白字符变更
内嵌
并排对比
正在显示
4 个修改的文件
包含
280 行增加
和
4 行删除
trunk/src/app/srs_app_config.cpp
trunk/src/app/srs_app_config.hpp
trunk/src/core/srs_core.hpp
trunk/src/utest/srs_utest_config.cpp
trunk/src/app/srs_app_config.cpp
查看文件 @
86ad39f
...
...
@@ -170,21 +170,22 @@ int SrsConfDirective::parse_conf(_srs_internal::SrsConfigBuffer* buffer, SrsDire
}
if
(
ret
==
ERROR_SYSTEM_CONFIG_BLOCK_END
)
{
if
(
type
!=
parse_block
)
{
srs_error
(
"line %d: unexpected
\"
}
\"
"
,
buffer
->
line
+
1
);
srs_error
(
"line %d: unexpected
\"
}
\"
, ret=%d"
,
buffer
->
line
+
1
,
ret
);
return
ret
;
}
return
ERROR_SUCCESS
;
}
if
(
ret
==
ERROR_SYSTEM_CONFIG_EOF
)
{
if
(
type
==
parse_block
)
{
srs_error
(
"line %d: unexpected end of file, expecting
\"
}
\"
"
,
conf_line
+
1
);
srs_error
(
"line %d: unexpected end of file, expecting
\"
}
\"
, ret=%d"
,
conf_line
+
1
,
ret
);
return
ret
;
}
return
ERROR_SUCCESS
;
}
if
(
args
.
empty
())
{
srs_error
(
"line %d: empty directive."
,
conf_line
+
1
);
ret
=
ERROR_SYSTEM_CONFIG_INVALID
;
srs_error
(
"line %d: empty directive. ret=%d"
,
conf_line
+
1
,
ret
);
return
ret
;
}
...
...
trunk/src/app/srs_app_config.hpp
查看文件 @
86ad39f
...
...
@@ -116,6 +116,8 @@ namespace _srs_internal
* SrsConfDirective: name="ffmpeg", arg0="/bin/ffmpeg", child-directives=[]
* ]
* ]
* @remark, allow empty directive, for example: "dir0 {}"
* @remark, don't allow empty name, for example: ";" or "{dir0 arg0;}
*/
class
SrsConfDirective
{
...
...
trunk/src/core/srs_core.hpp
查看文件 @
86ad39f
...
...
@@ -31,7 +31,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// current release version
#define VERSION_MAJOR "0"
#define VERSION_MINOR "9"
#define VERSION_REVISION "16
3
"
#define VERSION_REVISION "16
4
"
#define RTMP_SIG_SRS_VERSION VERSION_MAJOR"."VERSION_MINOR"."VERSION_REVISION
// server info.
#define RTMP_SIG_SRS_KEY "SRS"
...
...
trunk/src/utest/srs_utest_config.cpp
查看文件 @
86ad39f
...
...
@@ -390,3 +390,276 @@ VOID TEST(ConfigDirectiveTest, ParseNameArg2_Dir0Arg0_Dir0Arg0)
EXPECT_STREQ
(
"ddir_arg0"
,
ddir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
ddir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
Parse2SingleDirs
)
{
MockSrsConfigBuffer
buf
(
"dir0 arg0;dir1 arg1;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
2
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
SrsConfDirective
&
dir1
=
*
conf
.
directives
.
at
(
1
);
EXPECT_STREQ
(
"dir1"
,
dir1
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir1
.
args
.
size
());
EXPECT_STREQ
(
"arg1"
,
dir1
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir1
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseSingleComplexDirs
)
{
MockSrsConfigBuffer
buf
(
"dir0 arg0;dir1 {dir2 arg2;}"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
2
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
SrsConfDirective
&
dir1
=
*
conf
.
directives
.
at
(
1
);
EXPECT_STREQ
(
"dir1"
,
dir1
.
name
.
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir1
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
dir1
.
directives
.
size
());
SrsConfDirective
&
dir2
=
*
dir1
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir2"
,
dir2
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir2
.
args
.
size
());
EXPECT_STREQ
(
"arg2"
,
dir2
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir2
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseStringArgs
)
{
MockSrsConfigBuffer
buf
(
"dir0 arg0
\"
str_arg
\"
100;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
3
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_STREQ
(
"str_arg"
,
dir0
.
arg1
().
c_str
());
EXPECT_STREQ
(
"100"
,
dir0
.
arg2
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseStringArgsWithSpace
)
{
MockSrsConfigBuffer
buf
(
"dir0 arg0
\"
str_arg space
\"
100;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
3
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_STREQ
(
"str_arg space"
,
dir0
.
arg1
().
c_str
());
EXPECT_STREQ
(
"100"
,
dir0
.
arg2
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseNumberArgs
)
{
MockSrsConfigBuffer
buf
(
"dir0 100 101 102;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
3
,
(
int
)
dir0
.
args
.
size
());
EXPECT_EQ
(
100
,
::
atoi
(
dir0
.
arg0
().
c_str
()));
EXPECT_EQ
(
101
,
::
atoi
(
dir0
.
arg1
().
c_str
()));
EXPECT_EQ
(
102
,
::
atoi
(
dir0
.
arg2
().
c_str
()));
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseFloatArgs
)
{
MockSrsConfigBuffer
buf
(
"dir0 100.01 101.02 102.03;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
3
,
(
int
)
dir0
.
args
.
size
());
EXPECT_FLOAT_EQ
(
100.01
,
::
atof
(
dir0
.
arg0
().
c_str
()));
EXPECT_FLOAT_EQ
(
101.02
,
::
atof
(
dir0
.
arg1
().
c_str
()));
EXPECT_FLOAT_EQ
(
102.03
,
::
atof
(
dir0
.
arg2
().
c_str
()));
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseComments
)
{
MockSrsConfigBuffer
buf
(
"#commnets
\n
dir0 arg0;
\n
#end-comments"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseCommentsInline
)
{
MockSrsConfigBuffer
buf
(
"#commnets
\n
dir0 arg0;#inline comments
\n
#end-comments"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseCommentsInlineWithSpace
)
{
MockSrsConfigBuffer
buf
(
" #commnets
\n
dir0 arg0; #inline comments
\n
#end-comments"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseCommentsInlinemixed
)
{
MockSrsConfigBuffer
buf
(
"#commnets
\n
dir0 arg0;#inline comments
\n
#end-comments
\n
dir1 arg1;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
2
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"arg0"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
SrsConfDirective
&
dir1
=
*
conf
.
directives
.
at
(
1
);
EXPECT_STREQ
(
"dir1"
,
dir1
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir1
.
args
.
size
());
EXPECT_STREQ
(
"arg1"
,
dir1
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir1
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseSpecialChars
)
{
MockSrsConfigBuffer
buf
(
"dir0 http://www.ossrs.net/api/v1/versions?level=major;"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"http://www.ossrs.net/api/v1/versions?level=major"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseSpecialChars2
)
{
MockSrsConfigBuffer
buf
(
"dir0 rtmp://[server]:[port]/[app]/[stream]_[engine];"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
1
,
(
int
)
dir0
.
args
.
size
());
EXPECT_STREQ
(
"rtmp://[server]:[port]/[app]/[stream]_[engine]"
,
dir0
.
arg0
().
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidNoEndOfDirective
)
{
MockSrsConfigBuffer
buf
(
"dir0"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
!=
conf
.
parse
(
&
buf
));
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidNoEndOfSubDirective
)
{
MockSrsConfigBuffer
buf
(
"dir0 {"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
!=
conf
.
parse
(
&
buf
));
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidNoStartOfSubDirective
)
{
MockSrsConfigBuffer
buf
(
"dir0 }"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
!=
conf
.
parse
(
&
buf
));
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidEmptyName
)
{
MockSrsConfigBuffer
buf
(
";"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
!=
conf
.
parse
(
&
buf
));
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidEmptyName2
)
{
MockSrsConfigBuffer
buf
(
"{}"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
!=
conf
.
parse
(
&
buf
));
}
VOID
TEST
(
ConfigDirectiveTest
,
ParseInvalidEmptyDirective
)
{
MockSrsConfigBuffer
buf
(
"dir0 {}"
);
SrsConfDirective
conf
;
EXPECT_TRUE
(
ERROR_SUCCESS
==
conf
.
parse
(
&
buf
));
EXPECT_EQ
(
0
,
(
int
)
conf
.
name
.
length
());
EXPECT_EQ
(
0
,
(
int
)
conf
.
args
.
size
());
EXPECT_EQ
(
1
,
(
int
)
conf
.
directives
.
size
());
SrsConfDirective
&
dir0
=
*
conf
.
directives
.
at
(
0
);
EXPECT_STREQ
(
"dir0"
,
dir0
.
name
.
c_str
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
args
.
size
());
EXPECT_EQ
(
0
,
(
int
)
dir0
.
directives
.
size
());
}
...
...
请
注册
或
登录
后发表评论