1: %%============================================================================== 2: %% Copyright 2012 Erlang Solutions Ltd. 3: %% 4: %% Licensed under the Apache License, Version 2.0 (the "License"); 5: %% you may not use this file except in compliance with the License. 6: %% You may obtain a copy of the License at 7: %% 8: %% http://www.apache.org/licenses/LICENSE-2.0 9: %% 10: %% Unless required by applicable law or agreed to in writing, software 11: %% distributed under the License is distributed on an "AS IS" BASIS, 12: %% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13: %% See the License for the specific language governing permissions and 14: %% limitations under the License. 15: %%============================================================================== 16: 17: -module(websockets_SUITE). 18: -compile([export_all, nowarn_export_all]). 19: 20: -include_lib("escalus/include/escalus.hrl"). 21: -include_lib("common_test/include/ct.hrl"). 22: 23: %%-------------------------------------------------------------------- 24: %% Suite configuration 25: %%-------------------------------------------------------------------- 26: 27: -define(REGISTRATION_TIMEOUT, 2). %% seconds 28: 29: all() -> 30: [metrics_test, 31: {group, ws_chat}, 32: {group, wss_chat}]. 33: 34: groups() -> 35: [{ws_chat, [sequence], test_cases()}, 36: {wss_chat, [sequence], test_cases()}]. 37: 38: test_cases() -> 39: [chat_msg, 40: escape_chat_msg, 41: escape_attrs]. 42: 43: suite() -> 44: escalus:suite(). 45: 46: %%-------------------------------------------------------------------- 47: %% Init & teardown 48: %%-------------------------------------------------------------------- 49: 50: init_per_suite(Config) -> 51: Config1 = escalus:init_per_suite(Config), 52: escalus:create_users(Config1, escalus:get_users([alice, geralt, geralt_s, carol])). 53: 54: end_per_suite(Config) -> 55: Config1 = escalus:delete_users(Config, escalus:get_users([alice, geralt, geralt_s, carol])), 56: escalus:end_per_suite(Config1). 57: 58: init_per_group(GroupName, Config) -> 59: case GroupName of 60: wss_chat -> 61: [{user, geralt_s} | Config]; 62: _ -> 63: [{user, geralt} | Config] 64: end. 65: 66: 67: end_per_group(_GroupName, _Config) -> 68: ok. 69: 70: init_per_testcase(CaseName, Config) -> 71: escalus:init_per_testcase(CaseName, Config). 72: 73: end_per_testcase(CaseName, Config) -> 74: escalus:end_per_testcase(CaseName, Config). 75: 76: %%-------------------------------------------------------------------- 77: %% Message tests 78: %%-------------------------------------------------------------------- 79: 80: metrics_test(Config) -> 81: MongooseMetrics = [{[global, data, xmpp, received, xml_stanza_size], changed}, 82: {[global, data, xmpp, sent, xml_stanza_size], changed}, 83: {[global, data, xmpp, received, c2s, websocket], changed}, 84: {[global, data, xmpp, sent, c2s, websocket], changed}, 85: {[global, data, xmpp, received, c2s, tcp], 0}, 86: {[global, data, xmpp, sent, c2s, tcp], 0}], 87: escalus:story([{mongoose_metrics, MongooseMetrics} | Config], 88: [{geralt, 1}, {geralt_s, 1}], 89: fun(Geralt, GeraltS) -> 90: 91: escalus_client:send(GeraltS, escalus_stanza:chat_to(Geralt, <<"Hi!">>)), 92: escalus:assert(is_chat_message, [<<"Hi!">>], escalus_client:wait_for_stanza(Geralt)), 93: 94: escalus_client:send(Geralt, escalus_stanza:chat_to(GeraltS, <<"Hello!">>)), 95: escalus:assert(is_chat_message, [<<"Hello!">>], escalus_client:wait_for_stanza(GeraltS)) 96: 97: end). 98: 99: chat_msg(Config) -> 100: escalus:story(Config, [{alice, 1}, {?config(user, Config), 1}, {carol, 1}], 101: fun(Alice, Geralt, Carol) -> 102: 103: escalus_client:send(Alice, escalus_stanza:chat_to(Geralt, <<"Hi!">>)), 104: FromAlice = escalus_client:wait_for_stanza(Geralt), 105: escalus:assert(is_chat_message, [<<"Hi!">>], FromAlice), 106: escalus:assert(has_ns, [<<"jabber:client">>], FromAlice), 107: 108: escalus_client:send(Geralt, escalus_stanza:chat_to(Alice, <<"Hello!">>)), 109: escalus:assert(is_chat_message, [<<"Hello!">>], escalus_client:wait_for_stanza(Alice)), 110: 111: escalus_client:send(Geralt, escalus_stanza:chat_to(Carol, <<"Hey!">>)), 112: escalus_assert:is_chat_message(<<"Hey!">>, escalus_client:wait_for_stanza(Carol)) 113: 114: end). 115: 116: escape_chat_msg(Config) -> 117: escalus:story(Config, [{alice, 1}, {?config(user, Config), 1}, {carol, 1}], 118: fun(Alice, Geralt, Carol) -> 119: special_chars_helper:check_cdata_from_to(Alice, Geralt, <<"Hi! & < >">>), 120: special_chars_helper:check_cdata_from_to(Geralt, Alice, <<"Hello! & < >">>), 121: special_chars_helper:check_cdata_from_to(Geralt, Carol, <<"Hey! & < >">>) 122: 123: end). 124: 125: escape_attrs(Config) -> 126: escalus:story(Config, [{alice, 1}, {?config(user, Config), 1}, {carol, 1}], 127: fun(Alice, Geralt, Carol) -> 128: special_chars_helper:check_attr_from_to(Alice, Geralt), 129: special_chars_helper:check_attr_from_to(Geralt, Alice), 130: special_chars_helper:check_attr_from_to(Geralt, Carol) 131: 132: end).