From 167dd59941cdcfc6926b21f95ce3b366347ded2f Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Sat, 15 Jun 2013 00:16:32 +1000 Subject: [PATCH] Add STARTTLS test case --- test/ejabberd_SUITE.erl | 65 +++++++++++++++++++-------- test/ejabberd_SUITE_data/cert.pem | 51 +++++++++++++++++++++ test/ejabberd_SUITE_data/ejabberd.cfg | 3 ++ 3 files changed, 100 insertions(+), 19 deletions(-) create mode 100644 test/ejabberd_SUITE_data/cert.pem 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, [ -- 2.40.0