aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2013-06-15 00:16:32 +1000
committerAlexey Shchepin <alexey@process-one.net>2013-06-17 16:03:52 +0300
commit167dd59941cdcfc6926b21f95ce3b366347ded2f (patch)
treee44931d1f208c0db56b3de66d0fa0c3516bd2de3 /test
parentAdd mod_register checks (diff)
Add STARTTLS test case
Diffstat (limited to 'test')
-rw-r--r--test/ejabberd_SUITE.erl65
-rw-r--r--test/ejabberd_SUITE_data/cert.pem51
-rw-r--r--test/ejabberd_SUITE_data/ejabberd.cfg3
3 files changed, 100 insertions, 19 deletions
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index f387007b2..ccc4310b1 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -36,6 +36,7 @@ init_per_suite(Config) ->
LogPath = filename:join([PrivDir, "ejabberd.log"]),
SASLPath = filename:join([PrivDir, "sasl.log"]),
MnesiaDir = filename:join([PrivDir, "mnesia"]),
+ CertFile = filename:join([DataDir, "cert.pem"]),
application:set_env(ejabberd, config, ConfigPath),
application:set_env(ejabberd, log_path, LogPath),
application:set_env(sasl, sasl_error_logger, {file, SASLPath}),
@@ -43,7 +44,8 @@ init_per_suite(Config) ->
[{server, <<"localhost">>},
{port, 5222},
{user, <<"test_suite">>},
- {password, <<"pass">>}
+ {password, <<"pass">>},
+ {certfile, CertFile}
|Config].
end_per_suite(_Config) ->
@@ -65,7 +67,9 @@ init_per_testcase(TestCase, OrigConfig) ->
Config;
test_auth ->
connect(Config);
- register ->
+ test_starttls ->
+ connect(Config);
+ test_register ->
connect(Config);
auth_md5 ->
connect(Config);
@@ -85,12 +89,13 @@ end_per_testcase(_TestCase, _Config) ->
groups() ->
[].
-%%all() -> [start_ejabberd, register].
+%%all() -> [start_ejabberd, test_starttls].
all() ->
[start_ejabberd,
test_connect,
- register,
+ test_starttls,
+ test_register,
auth_plain,
auth_md5,
test_auth,
@@ -129,9 +134,11 @@ connect(Config) ->
binary_to_list(?config(server, Config)),
?config(port, Config),
[binary, {packet, 0}, {active, false}]),
- Config1 = [{socket, Sock}|Config],
- ok = send_text(Config1, io_lib:format(?STREAM_HEADER,
- [?config(server, Config1)])),
+ init_stream([{socket, Sock}|Config]).
+
+init_stream(Config) ->
+ ok = send_text(Config, io_lib:format(?STREAM_HEADER,
+ [?config(server, Config)])),
{xmlstreamstart, <<"stream:stream">>, Attrs} = recv(),
<<"jabber:client">> = xml:get_attr_s(<<"xmlns">>, Attrs),
<<"1.0">> = xml:get_attr_s(<<"version">>, Attrs),
@@ -142,13 +149,15 @@ connect(Config) ->
(_) ->
[]
end, Fs),
- Feats = lists:flatmap(
- fun(#feature_register{}) ->
- [{register, true}];
- (_) ->
- []
- end, Fs),
- [{mechs, Mechs}|Feats ++ Config1].
+ Feats = lists:foldl(
+ fun(#feature_register{}, Acc) ->
+ [{register, true}|Acc];
+ (#starttls{}, Acc) ->
+ [{starttls, true}|Acc];
+ (_, Acc) ->
+ Acc
+ end, [], Fs),
+ [{mechs, Mechs}|Feats ++ Config].
disconnect(Config) ->
Socket = ?config(socket, Config),
@@ -157,15 +166,33 @@ disconnect(Config) ->
ejabberd_socket:close(Socket),
Config.
-register(Config) ->
+test_starttls(Config) ->
+ case ?config(starttls, Config) of
+ true ->
+ starttls(Config);
+ _ ->
+ {skipped, 'starttls_not_available'}
+ end.
+
+starttls(Config) ->
+ _ = send(Config, #starttls{}),
+ #starttls_proceed{} = recv(),
+ TLSSocket = ejabberd_socket:starttls(
+ ?config(socket, Config),
+ [{certfile, ?config(certfile, Config)},
+ connect]),
+ NewConfig = [{socket, TLSSocket}|lists:keydelete(socket, 1, Config)],
+ disconnect(init_stream(NewConfig)).
+
+test_register(Config) ->
case ?config(register, Config) of
- false ->
- {skipped, 'registration_not_available'};
true ->
- try_register(Config)
+ register(Config);
+ _ ->
+ {skipped, 'registration_not_available'}
end.
-try_register(Config) ->
+register(Config) ->
I1 = send(Config,
#iq{type = get, to = server_jid(Config),
sub_els = [#register{}]}),
diff --git a/test/ejabberd_SUITE_data/cert.pem b/test/ejabberd_SUITE_data/cert.pem
new file mode 100644
index 000000000..d6429dd68
--- /dev/null
+++ b/test/ejabberd_SUITE_data/cert.pem
@@ -0,0 +1,51 @@
+-----BEGIN CERTIFICATE-----
+MIIDETCCAcmgAwIBAgIEUbsa1zANBgkqhkiG9w0BAQsFADAAMCIYDzIwMTMwNjE0
+MTMzMDAwWhgPMjAyMzA2MTIxMzMwMDhaMAAwggFSMA0GCSqGSIb3DQEBAQUAA4IB
+PwAwggE6AoIBMQCXdtt12OFu2j8tlF4x2Da/kbxyMxFnovJXHNzpx7CE/cGthAR5
+w7Cl92pECog2/d6ryIcjqzzCyCeOVQxIaE3Qz8z6+5UjKh3V/j6CKxcK5g1ER7Qe
+UgpE00ahHzvOpVANtrkYPGC0SFuTFL+PaylH4HW1xBSc1HD5/w7S1k1pDTz9x8ZC
+Z7JOb6NoYsz+rnmWYY2HOG6pyAyQBapIjgzCamgTStA6jTSgoXmCri/dZnJpqjZc
+V6AW7feNmMElhPvL30Cb3QB+9ODjN3pDXRR+Jqilu8ZSrpcvcFHOyKt943id1oC+
+Qu8orA0/kVInX7IuV//TciKzcH5FWz75Kb7hORPzH8M2DQcIKqKKVIwNVeJLKmcG
+RcUGsgTaz2j0JTa6YLJoczuasDWgRMT0goQpAgMBAAGjLzAtMAwGA1UdEwEB/wQC
+MAAwHQYDVR0OBBYEFBW6Si5OY8NPLagdth/JD8R18WMnMA0GCSqGSIb3DQEBCwUA
+A4IBMQAPiHxamUumu203pSVwvpWkpgKKOC2EswyFWQbNC6DWQ3LUkiR7MCiFViYt
+yiIyEh9wtfymWNF9uwaR2nVrJD5mK9Rt7xDiaT5ZOgNjLzmLeYqSlG41mCU1bmqg
+VbxmI1hvPvv3gQ/+WM0lBC6gPGJbVbzlWAIQ1cmevtL1KqOMveZl3VBPxDJD/K9c
+Rbrtx2nBKFDEl6hBljz6gsn4o8pxH3CO7qWpgY/MLwqQzEtTKYnaS9ecywNvj+/F
+ZE4SMoekw6AGRyE14/3i2xW6EmIpxVU4O6ahEFq6r6ZFbdtWnog5vT0y+/tRMgXp
+kCw8puxT2VsYNeJNOybW1IcyN5yluS/FY8iJokdL1JwvhVBVIWaim+T6iwrva7wC
+q1E9Nj30F8UbEkbkNqOdC3UlHQW4
+-----END CERTIFICATE-----
+-----BEGIN RSA PRIVATE KEY-----
+MIIFegIBAAKCATEAl3bbddjhbto/LZReMdg2v5G8cjMRZ6LyVxzc6cewhP3BrYQE
+ecOwpfdqRAqINv3eq8iHI6s8wsgnjlUMSGhN0M/M+vuVIyod1f4+gisXCuYNREe0
+HlIKRNNGoR87zqVQDba5GDxgtEhbkxS/j2spR+B1tcQUnNRw+f8O0tZNaQ08/cfG
+QmeyTm+jaGLM/q55lmGNhzhuqcgMkAWqSI4MwmpoE0rQOo00oKF5gq4v3WZyaao2
+XFegFu33jZjBJYT7y99Am90AfvTg4zd6Q10UfiaopbvGUq6XL3BRzsirfeN4ndaA
+vkLvKKwNP5FSJ1+yLlf/03Iis3B+RVs++Sm+4TkT8x/DNg0HCCqiilSMDVXiSypn
+BkXFBrIE2s9o9CU2umCyaHM7mrA1oETE9IKEKQIDAQABAoIBMG8X8a4FbowFLhO7
+YD+FC9sFBMhqZpiyLrfwZqReID3bdeRUEYhSHU4OI/ZWF0Tmfh1Xjq992Koxbrn5
+7XFqd7DxybJJN0E8kfe0bJrDCjqnNBHh2d3nZLrIkGR7aT2PiSEV5bs+BdwVun0t
+2bdS7UtX+l5gvJGvTFJBXtkL8GleGV822Vc5gdIAFkXpOdyPkoTXdpw4qwqBnL8/
+TXMYBIgCrXMhEawcNbgPu4iFev2idoU9vXc7ZYD7+8jWB5LJ34cNngguGrnOjLoE
+9c3nZy6uYhhMWtcrSsQlrbN5MtY8w2fPH8nhfA651IxXXVxEajd24t2Csttnl7Vz
+WS5c+oPaWwt67naMrYCWG3q1zWhDqZUAulZR4DzWzGP+idLS/ojCRdTZO9D1O+XP
+fPi0wJECgZkAxh0rTSMCyrJ3VJqEgSPw3yAa1R9cdrTRvV4vRf13Dh8REaHtWt8W
+JeT5WLXL7dOii1St1Fgjo82+4iMqx3PQ2eR/1I6dA7Uy71PaSQTCQnupca2Xx8nT
+5KcrASBkDAudiKog01eC+zYrW+CbUb9AogMZLJzZinlWQ36pJVkWd9SOv25Eqcv6
+zJEmzYKpnow/m8WKNogVGpUCgZkAw7hQxs5VYVLp2XtDqRSmxfJsfsbUVo7tZnSU
+wmejgeNRs7415ZuT142k7qBImrFdYzFcfh2OZnf6D/VIz4Rl7u5YRYRCha/HOGIy
+wTe1huDckJ6lH/BkZ/6f9WSzXnNSNeXQY14WymU5V5qYCAdwECSf+xNuBYNwzA7o
+vOxPE690w3Ox2qghzRjzsBqAMgvqSyKlBpoMckUCgZhyKgD39IL5V5qYcGqHGLUH
+fzK3OdlItq5e19WaGZPv2Us2w/9JbGEQ+UAPNMQNivWSIPwC77+p9zhWjDlssnrZ
+9WkMjhpBNrvhWorhpRJkyWo9jfF3OgEXNJX9kjLVFiRzysYbw8RBC1g1G9ulYfbW
+5b4uDTz3JTDmuCi00v+1khGoktySlG80TzjzGKayLNPC6jTZc9XleQKBmA0STUrJ
+0wf5+qZMxjsPpwfHZhmde+cACrjyBlFpjJELNpSzmnPoTRpzWlWZnN/AAsWyMUQ3
+AyCy2J+iOSeq5wfrITgbWjoFgF+yp0MiTlxgvjpmbg7RBlOvvM0t2ZDwUMhKvf00
+9n6z/f1s1MSMgp6BY7HoHUv++FSYllCv06Qz7q9zFajN29wP046qZm9xPkegW7cy
+KKylAoGYTg94GOWlUTz7Pe9PDrDSFVEAi0LcDmul0ntorvEFDvU2pCRK14gyvl9O
+IJKVyYcDAqA3uvT+zMAniuf8KXNUCcYeEpfzpT+e2eznhczO8hI14M5U0X0LA8P2
+vn0Y+yUWb9Ppu/dcjvaUA+qR/UTHqjAlAr3hFTKRxXFoGwwzTXCXvZGKOnzJRTpj
+LpjI1RG7Weeoyx/8qDs=
+-----END RSA PRIVATE KEY-----
diff --git a/test/ejabberd_SUITE_data/ejabberd.cfg b/test/ejabberd_SUITE_data/ejabberd.cfg
index bcb0a0093..5520e4c3b 100644
--- a/test/ejabberd_SUITE_data/ejabberd.cfg
+++ b/test/ejabberd_SUITE_data/ejabberd.cfg
@@ -1,10 +1,13 @@
{loglevel, 4}.
{hosts, ["localhost"]}.
+{define_macro, 'CERTFILE', "../../test/ejabberd_SUITE_data/cert.pem"}.
{listen,
[
{5222, ejabberd_c2s, [
{access, c2s},
{shaper, c2s_shaper},
+ starttls,
+ {certfile, 'CERTFILE'},
{max_stanza_size, 65536}
]},
{5269, ejabberd_s2s_in, [