Skip to content
项目
群组
代码片段
帮助
正在加载...
登录
切换导航
F
freeswitch
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
张华
freeswitch
Commits
a33877aa
提交
a33877aa
authored
7月 14, 2019
作者:
Chris Rienzo
提交者:
Andrey Volk
7月 22, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
FS-11931 [mod_http_cache] convert tests to use switch_test
上级
9c2dc11d
隐藏空白字符变更
内嵌
并排
正在显示
13 个修改的文件
包含
170 行增加
和
280 行删除
+170
-280
.gitignore
.gitignore
+12
-0
configure.ac
configure.ac
+1
-0
Makefile.am
src/mod/applications/mod_http_cache/Makefile.am
+2
-0
aws.c
src/mod/applications/mod_http_cache/aws.c
+6
-6
aws.h
src/mod/applications/mod_http_cache/aws.h
+3
-10
common.c
src/mod/applications/mod_http_cache/common.c
+1
-1
common.h
src/mod/applications/mod_http_cache/common.h
+1
-1
Makefile.am
src/mod/applications/mod_http_cache/test/Makefile.am
+4
-0
test_aws.c
src/mod/applications/mod_http_cache/test/test_aws.c
+140
-0
Makefile
src/mod/applications/mod_http_cache/test_aws/Makefile
+0
-12
main.c
src/mod/applications/mod_http_cache/test_aws/main.c
+0
-131
test.h
src/mod/applications/mod_http_cache/test_aws/test.h
+0
-113
test_aws.c
src/mod/applications/mod_http_cache/test_aws/test_aws.c
+0
-6
没有找到文件。
.gitignore
浏览文件 @
a33877aa
...
...
@@ -260,3 +260,15 @@ libs/libsilk-*/
libs/rabbitmq-c-*/
libs/rabbitmq-c-*.zip
libs/ffmpeg-*/
src/mod/applications/mod_test/test/test_asr
src/mod/event_handlers/mod_rayo/test/test_iks
src/mod/event_handlers/mod_rayo/test/test_nlsml
src/mod/event_handlers/mod_rayo/test/test_srgs
src/mod/applications/mod_http_cache/test/Makefile
src/mod/applications/mod_http_cache/test/Makefile.in
src/mod/applications/mod_http_cache/test/test-suite.log
src/mod/applications/mod_http_cache/test/test_aws
src/mod/applications/mod_http_cache/test/test_aws.log
src/mod/applications/mod_http_cache/test/test_aws.trs
configure.ac
浏览文件 @
a33877aa
...
...
@@ -1865,6 +1865,7 @@ AC_CONFIG_FILES([Makefile
src/mod/applications/mod_hiredis/Makefile
src/mod/applications/mod_httapi/Makefile
src/mod/applications/mod_http_cache/Makefile
src/mod/applications/mod_http_cache/test/Makefile
src/mod/applications/mod_ladspa/Makefile
src/mod/applications/mod_lcr/Makefile
src/mod/applications/mod_limit/Makefile
...
...
src/mod/applications/mod_http_cache/Makefile.am
浏览文件 @
a33877aa
...
...
@@ -7,3 +7,5 @@ mod_http_cache_la_CFLAGS = $(AM_CFLAGS)
mod_http_cache_la_CPPFLAGS
=
$(CURL_CFLAGS)
$(AM_CPPFLAGS)
mod_http_cache_la_LIBADD
=
$(switch_builddir)
/libfreeswitch.la
mod_http_cache_la_LDFLAGS
=
$(CURL_LIBS)
-avoid-version
-module
-no-undefined
-shared
SUBDIRS
=
.
test
src/mod/applications/mod_http_cache/aws.c
浏览文件 @
a33877aa
...
...
@@ -47,7 +47,7 @@
* @param date header
* @return the string_to_sign (must be freed)
*/
char
*
aws_s3_string_to_sign
(
const
char
*
verb
,
const
char
*
bucket
,
const
char
*
object
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
date
)
static
char
*
aws_s3_string_to_sign
(
const
char
*
verb
,
const
char
*
bucket
,
const
char
*
object
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
date
)
{
/*
* String to sign has the following format:
...
...
@@ -66,7 +66,7 @@ char *aws_s3_string_to_sign(const char *verb, const char *bucket, const char *ob
* @param aws_secret_access_key secret access key
* @return the signature buffer or NULL if missing input
*/
char
*
aws_s3_signature
(
char
*
signature
,
int
signature_length
,
const
char
*
string_to_sign
,
const
char
*
aws_secret_access_key
)
static
char
*
aws_s3_signature
(
char
*
signature
,
int
signature_length
,
const
char
*
string_to_sign
,
const
char
*
aws_secret_access_key
)
{
#if defined(HAVE_OPENSSL)
unsigned
int
signature_raw_length
=
SHA1_LENGTH
;
...
...
@@ -107,7 +107,7 @@ char *aws_s3_signature(char *signature, int signature_length, const char *string
* @param expires seconds since the epoch
* @return presigned_url
*/
char
*
aws_s3_presigned_url_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
expires
)
SWITCH_DECLARE
(
char
*
)
aws_s3_presigned_url_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
expires
)
{
char
signature
[
S3_SIGNATURE_LENGTH_MAX
];
char
signature_url_encoded
[
S3_SIGNATURE_LENGTH_MAX
];
...
...
@@ -143,7 +143,7 @@ char *aws_s3_presigned_url_create(const char *verb, const char *url, const char
* @param date header
* @return signature for Authorization header
*/
char
*
aws_s3_authentication_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
date
)
static
char
*
aws_s3_authentication_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
date
)
{
char
signature
[
S3_SIGNATURE_LENGTH_MAX
];
char
*
string_to_sign
;
...
...
@@ -162,7 +162,7 @@ char *aws_s3_authentication_create(const char *verb, const char *url, const char
return
switch_mprintf
(
"AWS %s:%s"
,
aws_access_key_id
,
signature
);
}
switch_status_t
aws_s3_config_profile
(
switch_xml_t
xml
,
http_profile_t
*
profile
)
SWITCH_DECLARE
(
switch_status_t
)
aws_s3_config_profile
(
switch_xml_t
xml
,
http_profile_t
*
profile
)
{
switch_status_t
status
=
SWITCH_STATUS_SUCCESS
;
switch_xml_t
base_domain_xml
=
switch_xml_child
(
xml
,
"base-domain"
);
...
...
@@ -217,7 +217,7 @@ switch_status_t aws_s3_config_profile(switch_xml_t xml, http_profile_t *profile)
* @param url
* @return updated headers
*/
switch_curl_slist_t
*
aws_s3_append_headers
(
http_profile_t
*
profile
,
switch_curl_slist_t
*
headers
,
SWITCH_DECLARE
(
switch_curl_slist_t
)
*
aws_s3_append_headers
(
http_profile_t
*
profile
,
switch_curl_slist_t
*
headers
,
const
char
*
verb
,
unsigned
int
content_length
,
const
char
*
content_type
,
const
char
*
url
,
const
unsigned
int
block_num
,
char
**
query_string
)
{
char
date
[
256
];
...
...
src/mod/applications/mod_http_cache/aws.h
浏览文件 @
a33877aa
...
...
@@ -36,17 +36,10 @@
/* (SHA1_LENGTH * 1.37 base64 bytes per byte * 3 url-encoded bytes per byte) */
#define S3_SIGNATURE_LENGTH_MAX 83
switch_curl_slist_t
*
aws_s3_append_headers
(
http_profile_t
*
profile
,
switch_curl_slist_t
*
headers
,
SWITCH_DECLARE
(
switch_curl_slist_t
)
*
aws_s3_append_headers
(
http_profile_t
*
profile
,
switch_curl_slist_t
*
headers
,
const
char
*
verb
,
unsigned
int
content_length
,
const
char
*
content_type
,
const
char
*
url
,
const
unsigned
int
block_num
,
char
**
query_string
);
switch_status_t
aws_s3_config_profile
(
switch_xml_t
xml
,
http_profile_t
*
profile
);
// the following functions are exposed only so that the unit tests still work
char
*
aws_s3_string_to_sign
(
const
char
*
verb
,
const
char
*
bucket
,
const
char
*
object
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
date
);
char
*
aws_s3_signature
(
char
*
signature
,
int
signature_length
,
const
char
*
string_to_sign
,
const
char
*
aws_secret_access_key
);
void
aws_s3_parse_url
(
char
*
url
,
const
char
*
base_domain
,
char
**
bucket
,
char
**
object
);
char
*
aws_s3_presigned_url_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
expires
);
char
*
aws_s3_authentication_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
date
);
SWITCH_DECLARE
(
switch_status_t
)
aws_s3_config_profile
(
switch_xml_t
xml
,
http_profile_t
*
profile
);
SWITCH_DECLARE
(
char
*
)
aws_s3_presigned_url_create
(
const
char
*
verb
,
const
char
*
url
,
const
char
*
base_domain
,
const
char
*
content_type
,
const
char
*
content_md5
,
const
char
*
aws_access_key_id
,
const
char
*
aws_secret_access_key
,
const
char
*
expires
);
#endif
...
...
src/mod/applications/mod_http_cache/common.c
浏览文件 @
a33877aa
...
...
@@ -63,7 +63,7 @@ static char *my_strrstr(const char *haystack, const char *needle)
return
NULL
;
}
void
parse_url
(
char
*
url
,
const
char
*
base_domain
,
const
char
*
default_base_domain
,
char
**
bucket
,
char
**
object
)
SWITCH_DECLARE
(
void
)
parse_url
(
char
*
url
,
const
char
*
base_domain
,
const
char
*
default_base_domain
,
char
**
bucket
,
char
**
object
)
{
char
*
bucket_start
=
NULL
;
char
*
bucket_end
;
...
...
src/mod/applications/mod_http_cache/common.h
浏览文件 @
a33877aa
...
...
@@ -23,7 +23,7 @@ struct http_profile {
typedef
struct
http_profile
http_profile_t
;
void
parse_url
(
char
*
url
,
const
char
*
base_domain
,
const
char
*
default_base_domain
,
char
**
bucket
,
char
**
object
);
SWITCH_DECLARE
(
void
)
parse_url
(
char
*
url
,
const
char
*
base_domain
,
const
char
*
default_base_domain
,
char
**
bucket
,
char
**
object
);
#endif
...
...
src/mod/applications/mod_http_cache/test/Makefile.am
0 → 100644
浏览文件 @
a33877aa
bin_PROGRAMS
=
test_aws
AM_CFLAGS
=
$(SWITCH_AM_CFLAGS)
AM_LDFLAGS
=
$(switch_builddir)
/libfreeswitch.la
-avoid-version
-no-undefined
$(SWITCH_AM_LDFLAGS)
../mod_http_cache.la
TESTS
=
$(bin_PROGRAMS)
src/mod/applications/mod_http_cache/test/test_aws.c
0 → 100644
浏览文件 @
a33877aa
#include <switch.h>
#include <test/switch_test.h>
#include "../aws.c"
FST_BEGIN
()
{
FST_SUITE_BEGIN
(
aws
)
{
FST_SETUP_BEGIN
()
{
}
FST_SETUP_END
()
FST_TEARDOWN_BEGIN
()
{
}
FST_TEARDOWN_END
()
FST_TEST_BEGIN
(
test_string_to_sign
)
{
fst_check_string_equals
(
"GET
\n\n\n
Fri, 17 May 2013 19:35:26 GMT
\n
/rienzo-vault/troporocks.mp3"
,
aws_s3_string_to_sign
(
"GET"
,
"rienzo-vault"
,
"troporocks.mp3"
,
""
,
""
,
"Fri, 17 May 2013 19:35:26 GMT"
));
fst_check_string_equals
(
"GET
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
audio/mpeg
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
/foo/man.chu"
,
aws_s3_string_to_sign
(
"GET"
,
"foo"
,
"man.chu"
,
"audio/mpeg"
,
"c8fdb181845a4ca6b8fec737b3581d76"
,
"Thu, 17 Nov 2005 18:49:58 GMT"
));
fst_check_string_equals
(
"
\n\n\n\n
//"
,
aws_s3_string_to_sign
(
""
,
""
,
""
,
""
,
""
,
""
));
fst_check_string_equals
(
"
\n\n\n\n
//"
,
aws_s3_string_to_sign
(
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
));
fst_check_string_equals
(
"PUT
\n\n
audio/wav
\n
Wed, 12 Jun 2013 13:16:58 GMT
\n
/bucket/voicemails/recording.wav"
,
aws_s3_string_to_sign
(
"PUT"
,
"bucket"
,
"voicemails/recording.wav"
,
"audio/wav"
,
""
,
"Wed, 12 Jun 2013 13:16:58 GMT"
));
}
FST_TEST_END
()
FST_TEST_BEGIN
(
test_signature
)
{
char
signature
[
S3_SIGNATURE_LENGTH_MAX
];
signature
[
0
]
=
'\0'
;
fst_check_string_equals
(
"weGrLrc9HDlkYPTepVl0A9VYNlw="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n
Fri, 17 May 2013 19:35:26 GMT
\n
/rienzo-vault/troporocks.mp3"
,
"hOIZt1oeTX1JzINOMBoKf0BxONRZNQT1J8gIznLx"
));
fst_check_string_equals
(
"jZNOcbfWmD/A/f3hSvVzXZjM2HU="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
fst_check_string_equals
(
"5m+HAmc5JsrgyDelh9+a2dNrzN8="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n\n
x-amz-date:Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
fst_check_string_equals
(
"OKA87rVp3c4kd59t8D3diFmTfuo="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
""
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
fst_check_string_equals
(
"OKA87rVp3c4kd59t8D3diFmTfuo="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
NULL
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
fst_check
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n\n
x-amz-date:Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
/quotes/nelson"
,
""
)
==
NULL
);
fst_check
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
""
,
""
)
==
NULL
);
fst_check
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
NULL
,
NULL
)
==
NULL
);
fst_check
(
aws_s3_signature
(
NULL
,
S3_SIGNATURE_LENGTH_MAX
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
)
==
NULL
);
fst_check
(
aws_s3_signature
(
signature
,
0
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
)
==
NULL
);
fst_check_string_equals
(
"jZNO"
,
aws_s3_signature
(
signature
,
5
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
}
FST_TEST_END
()
FST_TEST_BEGIN
(
test_parse_url
)
{
char
*
bucket
;
char
*
object
;
char
url
[
512
]
=
{
0
};
snprintf
(
url
,
sizeof
(
url
),
"http://quotes.s3.amazonaws.com/nelson"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"quotes"
,
bucket
);
fst_check_string_equals
(
"nelson"
,
object
);
snprintf
(
url
,
sizeof
(
url
),
"https://quotes.s3.amazonaws.com/nelson.mp3"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"quotes"
,
bucket
);
fst_check_string_equals
(
"nelson.mp3"
,
object
);
snprintf
(
url
,
sizeof
(
url
),
"http://s3.amazonaws.com/quotes/nelson"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes/quotes/nelson"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes.s3.amazonaws.com/"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes.s3.amazonaws.com"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
""
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
parse_url
(
NULL
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check
(
bucket
==
NULL
);
fst_check
(
object
==
NULL
);
snprintf
(
url
,
sizeof
(
url
),
"http://bucket.s3.amazonaws.com/voicemails/recording.wav"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"bucket"
,
bucket
);
fst_check_string_equals
(
"voicemails/recording.wav"
,
object
);
snprintf
(
url
,
sizeof
(
url
),
"https://my-bucket-with-dash.s3-us-west-2.amazonaws.com/greeting/file/1002/Lumino.mp3"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"my-bucket-with-dash"
,
bucket
);
fst_check_string_equals
(
"greeting/file/1002/Lumino.mp3"
,
object
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes.s3.foo.bar.s3.amazonaws.com/greeting/file/1002/Lumino.mp3"
);
parse_url
(
url
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"quotes.s3.foo.bar"
,
bucket
);
fst_check_string_equals
(
"greeting/file/1002/Lumino.mp3"
,
object
);
snprintf
(
url
,
sizeof
(
url
),
"http://quotes.s3.foo.bar.example.com/greeting/file/1002/Lumino.mp3"
);
parse_url
(
url
,
"example.com"
,
"s3"
,
&
bucket
,
&
object
);
fst_check_string_equals
(
"quotes.s3.foo.bar"
,
bucket
);
fst_check_string_equals
(
"greeting/file/1002/Lumino.mp3"
,
object
);
}
FST_TEST_END
()
FST_TEST_BEGIN
(
test_authorization_header
)
{
fst_check_string_equals
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
NULL
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
fst_check_string_equals
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
"s3.amazonaws.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
fst_check_string_equals
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.example.com/awesome.mp3"
,
"example.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
}
FST_TEST_END
()
FST_TEST_BEGIN
(
test_presigned_url
)
{
fst_check_string_equals
(
"https://vault.s3.amazonaws.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
NULL
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
fst_check_string_equals
(
"https://vault.s3.amazonaws.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
"s3.amazonaws.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
fst_check_string_equals
(
"https://vault.example.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.example.com/awesome.mp3"
,
"example.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
}
FST_TEST_END
()
}
FST_SUITE_END
()
}
FST_END
()
src/mod/applications/mod_http_cache/test_aws/Makefile
deleted
100644 → 0
浏览文件 @
9c2dc11d
BASE
=
../../../../..
LOCAL_CFLAGS
+=
-I
../
-I
./
LOCAL_OBJS
=
main.o ../aws.o ../common.o
LOCAL_SOURCES
=
main.c
include
$(BASE)/build/modmake.rules
local_all
:
libtool
--mode
=
link
gcc main.o ../aws.o
-o
test
test_aws.la
local_clean
:
-
rm test
src/mod/applications/mod_http_cache/test_aws/main.c
deleted
100644 → 0
浏览文件 @
9c2dc11d
#include <switch.h>
#include "test.h"
#include "aws.h"
/**
* Test string to sign generation
*/
static
void
test_string_to_sign
(
void
)
{
ASSERT_STRING_EQUALS
(
"GET
\n\n\n
Fri, 17 May 2013 19:35:26 GMT
\n
/rienzo-vault/troporocks.mp3"
,
aws_s3_string_to_sign
(
"GET"
,
"rienzo-vault"
,
"troporocks.mp3"
,
""
,
""
,
"Fri, 17 May 2013 19:35:26 GMT"
));
ASSERT_STRING_EQUALS
(
"GET
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
audio/mpeg
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
/foo/man.chu"
,
aws_s3_string_to_sign
(
"GET"
,
"foo"
,
"man.chu"
,
"audio/mpeg"
,
"c8fdb181845a4ca6b8fec737b3581d76"
,
"Thu, 17 Nov 2005 18:49:58 GMT"
));
ASSERT_STRING_EQUALS
(
"
\n\n\n\n
//"
,
aws_s3_string_to_sign
(
""
,
""
,
""
,
""
,
""
,
""
));
ASSERT_STRING_EQUALS
(
"
\n\n\n\n
//"
,
aws_s3_string_to_sign
(
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
));
ASSERT_STRING_EQUALS
(
"PUT
\n\n
audio/wav
\n
Wed, 12 Jun 2013 13:16:58 GMT
\n
/bucket/voicemails/recording.wav"
,
aws_s3_string_to_sign
(
"PUT"
,
"bucket"
,
"voicemails/recording.wav"
,
"audio/wav"
,
""
,
"Wed, 12 Jun 2013 13:16:58 GMT"
));
}
/**
* Test signature generation
*/
static
void
test_signature
(
void
)
{
char
signature
[
S3_SIGNATURE_LENGTH_MAX
];
signature
[
0
]
=
'\0'
;
ASSERT_STRING_EQUALS
(
"weGrLrc9HDlkYPTepVl0A9VYNlw="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n
Fri, 17 May 2013 19:35:26 GMT
\n
/rienzo-vault/troporocks.mp3"
,
"hOIZt1oeTX1JzINOMBoKf0BxONRZNQT1J8gIznLx"
));
ASSERT_STRING_EQUALS
(
"jZNOcbfWmD/A/f3hSvVzXZjM2HU="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_STRING_EQUALS
(
"5m+HAmc5JsrgyDelh9+a2dNrzN8="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n\n
x-amz-date:Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_STRING_EQUALS
(
"OKA87rVp3c4kd59t8D3diFmTfuo="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
""
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_STRING_EQUALS
(
"OKA87rVp3c4kd59t8D3diFmTfuo="
,
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
NULL
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_NULL
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
"GET
\n\n\n\n
x-amz-date:Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
/quotes/nelson"
,
""
));
ASSERT_NULL
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
""
,
""
));
ASSERT_NULL
(
aws_s3_signature
(
signature
,
S3_SIGNATURE_LENGTH_MAX
,
NULL
,
NULL
));
ASSERT_NULL
(
aws_s3_signature
(
NULL
,
S3_SIGNATURE_LENGTH_MAX
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_NULL
(
aws_s3_signature
(
signature
,
0
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
ASSERT_STRING_EQUALS
(
"jZNO"
,
aws_s3_signature
(
signature
,
5
,
"PUT
\n
c8fdb181845a4ca6b8fec737b3581d76
\n
text/html
\n
Thu, 17 Nov 2005 18:49:58 GMT
\n
x-amz-magic:abracadabra
\n
x-amz-meta-author:foo@bar.com
\n
/quotes/nelson"
,
"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV"
));
}
/**
* Test bucket/object extraction from URL
*/
static
void
test_parse_url
(
void
)
{
char
*
bucket
;
char
*
object
;
parse_url
(
strdup
(
"http://quotes.s3.amazonaws.com/nelson"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"quotes"
,
bucket
);
ASSERT_STRING_EQUALS
(
"nelson"
,
object
);
parse_url
(
strdup
(
"https://quotes.s3.amazonaws.com/nelson.mp3"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"quotes"
,
bucket
);
ASSERT_STRING_EQUALS
(
"nelson.mp3"
,
object
);
parse_url
(
strdup
(
"http://s3.amazonaws.com/quotes/nelson"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
"http://quotes/quotes/nelson"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
"http://quotes.s3.amazonaws.com/"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
"http://quotes.s3.amazonaws.com"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
"http://quotes"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
""
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
NULL
,
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_NULL
(
bucket
);
ASSERT_NULL
(
object
);
parse_url
(
strdup
(
"http://bucket.s3.amazonaws.com/voicemails/recording.wav"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"bucket"
,
bucket
);
ASSERT_STRING_EQUALS
(
"voicemails/recording.wav"
,
object
);
parse_url
(
strdup
(
"https://my-bucket-with-dash.s3-us-west-2.amazonaws.com/greeting/file/1002/Lumino.mp3"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"my-bucket-with-dash"
,
bucket
);
ASSERT_STRING_EQUALS
(
"greeting/file/1002/Lumino.mp3"
,
object
);
parse_url
(
strdup
(
"http://quotes.s3.foo.bar.s3.amazonaws.com/greeting/file/1002/Lumino.mp3"
),
NULL
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"quotes.s3.foo.bar"
,
bucket
);
ASSERT_STRING_EQUALS
(
"greeting/file/1002/Lumino.mp3"
,
object
);
parse_url
(
strdup
(
"http://quotes.s3.foo.bar.example.com/greeting/file/1002/Lumino.mp3"
),
"example.com"
,
"s3"
,
&
bucket
,
&
object
);
ASSERT_STRING_EQUALS
(
"quotes.s3.foo.bar"
,
bucket
);
ASSERT_STRING_EQUALS
(
"greeting/file/1002/Lumino.mp3"
,
object
);
}
/**
* Test Authorization header creation
*/
static
void
test_authorization_header
(
void
)
{
ASSERT_STRING_EQUALS
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
NULL
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
ASSERT_STRING_EQUALS
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
"s3.amazonaws.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
ASSERT_STRING_EQUALS
(
"AWS AKIAIOSFODNN7EXAMPLE:YJkomOaqUJlvEluDq4fpusID38Y="
,
aws_s3_authentication_create
(
"GET"
,
"https://vault.example.com/awesome.mp3"
,
"example.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
}
/**
* Test pre-signed URL creation
*/
static
void
test_presigned_url
(
void
)
{
ASSERT_STRING_EQUALS
(
"https://vault.s3.amazonaws.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
NULL
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
ASSERT_STRING_EQUALS
(
"https://vault.s3.amazonaws.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.s3.amazonaws.com/awesome.mp3"
,
"s3.amazonaws.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
ASSERT_STRING_EQUALS
(
"https://vault.example.com/awesome.mp3?Signature=YJkomOaqUJlvEluDq4fpusID38Y%3D&Expires=1234567890&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE"
,
aws_s3_presigned_url_create
(
"GET"
,
"https://vault.example.com/awesome.mp3"
,
"example.com"
,
"audio/mpeg"
,
""
,
"AKIAIOSFODNN7EXAMPLE"
,
"0123456789012345678901234567890123456789"
,
"1234567890"
));
}
/**
* main program
*/
int
main
(
int
argc
,
char
**
argv
)
{
TEST_INIT
TEST
(
test_string_to_sign
);
TEST
(
test_signature
);
TEST
(
test_parse_url
);
TEST
(
test_authorization_header
);
TEST
(
test_presigned_url
);
return
0
;
}
src/mod/applications/mod_http_cache/test_aws/test.h
deleted
100644 → 0
浏览文件 @
9c2dc11d
/*
* test.h for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
* Copyright (C) 2013, Grasshopper
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
* for the specific language governing rights and limitations under the
* License.
*
* The Original Code is test.h for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
*
* The Initial Developer of the Original Code is Grasshopper
* Portions created by the Initial Developer are Copyright (C)
* the Initial Developer. All Rights Reserved.
*
* Contributor(s):
* Chris Rienzo <chris.rienzo@grasshopper.com>
*
* test.h -- simple unit testing macros
*
*/
#ifndef TEST_H
#define TEST_H
#define assert_equals(test, expected_str, expected, actual, file, line) \
{ \
int actual_val = actual; \
if (expected != actual_val) { \
printf("TEST\t%s\tFAIL\t%s\t%i\t!=\t%i\t%s:%i\n", test, expected_str, expected, actual_val, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define assert_string_equals(test, expected, actual, file, line) \
{ \
const char *actual_str = actual; \
if (!actual_str || strcmp(expected, actual_str)) { \
printf("TEST\t%s\tFAIL\t\t%s\t!=\t%s\t%s:%i\n", test, expected, actual_str, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define assert_not_null(test, actual, file, line) \
{ \
const void *actual_val = actual; \
if (!actual_val) { \
printf("TEST\t%s\tFAIL\t\t\t\t\t%s:%i\n", test, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define assert_null(test, actual, file, line) \
{ \
const void *actual_val = actual; \
if (actual_val) { \
printf("TEST\t%s\tFAIL\t\t\t\t\t%s:%i\n", test, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define assert_true(test, actual, file, line) \
{ \
int actual_val = actual; \
if (!actual_val) { \
printf("TEST\t%s\tFAIL\t\t\t\t\t%s:%i\n", test, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define assert_false(test, actual, file, line) \
{ \
int actual_val = actual; \
if (actual_val) { \
printf("TEST\t%s\tFAIL\t\t\t\t\t%s:%i\n", test, file, line); \
exit(1); \
} else { \
printf("TEST\t%s\tPASS\n", test); \
} \
}
#define ASSERT_EQUALS(expected, actual) assert_equals(#actual, #expected, expected, actual, __FILE__, __LINE__)
#define ASSERT_STRING_EQUALS(expected, actual) assert_string_equals(#actual, expected, actual, __FILE__, __LINE__)
#define ASSERT_NOT_NULL(actual) assert_not_null(#actual " not null", actual, __FILE__, __LINE__)
#define ASSERT_NULL(actual) assert_null(#actual " is null", actual, __FILE__, __LINE__)
#define ASSERT_TRUE(actual) assert_true(#actual " is true", actual, __FILE__, __LINE__)
#define ASSERT_FALSE(actual) assert_false(#actual " is false", actual, __FILE__, __LINE__)
#define SKIP_ASSERT_EQUALS(expected, actual) if (0) { ASSERT_EQUALS(expected, actual); }
#define TEST(name) printf("TEST BEGIN\t" #name "\n"); name(); printf("TEST END\t"#name "\tPASS\n");
#define SKIP_TEST(name) if (0) { TEST(name) };
#define TEST_INIT const char *err; switch_core_init(0, SWITCH_TRUE, &err);
#endif
src/mod/applications/mod_http_cache/test_aws/test_aws.c
deleted
100644 → 0
浏览文件 @
9c2dc11d
int
dummy
(
int
i
)
{
return
0
;
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论