From e2c2681d54a76208bba077888239d969a08198b5 Mon Sep 17 00:00:00 2001 From: Mikhail Uvarov Date: Tue, 30 Jul 2024 14:55:36 +0200 Subject: [PATCH 1/3] Adapt circleci config to run on Erlang 26.2.5.2 and 27.0.1 --- .circleci/template.yml | 242 +++++++++++++++++++++-------------------- 1 file changed, 123 insertions(+), 119 deletions(-) diff --git a/.circleci/template.yml b/.circleci/template.yml index ddb22a91f0d..5d0ce1e37ac 100644 --- a/.circleci/template.yml +++ b/.circleci/template.yml @@ -1,8 +1,12 @@ version: 2.1 references: - - &OTP25 mongooseim/cimg-erlang:25.3.2.9 - - &OTP26 mongooseim/cimg-erlang:26.2.2 + # Latest OTP release version number (on the right): https://www.erlang.org/downloads + # Available cimg-erlang images: https://hub.docker.com/r/mongooseim/cimg-erlang/tags + # You could need to trigger a pipeline to create a Docker image: + # https://github.com/esl/cimg-erlang#trigger-build-using-trigger-pipeline-on-circleci + - &OTP26 mongooseim/cimg-erlang:26.2.5.2 + - &OTP27 mongooseim/cimg-erlang:27.0.1 - &ENTRYPOINT ["/bin/sh", "-c", "eval ${INSTALL_DEPS_CMD:-echo} && echo __INJECT_FILES__ | eval ${BASE32DEC:-base32 --decode} | bash"] # Caches created via the save_cache step are stored for up to 15 days - &CERT_KEY certs-cache-{{ checksum "certs_cache_key" }}-v3 @@ -143,73 +147,73 @@ containers: entrypoint: *ENTRYPOINT executors: - otp_25: - docker: - - image: *OTP25 - resource_class: medium+ otp_26: docker: - image: *OTP26 resource_class: medium+ - otp_25_redis: + otp_27: docker: - - image: *OTP25 - - *redis_container + - image: *OTP27 + resource_class: medium+ otp_26_redis: docker: - image: *OTP26 - *redis_container - otp_26_redis_minio_rmq: + otp_27_redis: docker: - - image: *OTP26 + - image: *OTP27 + - *redis_container + otp_27_redis_minio_rmq: + docker: + - image: *OTP27 - *redis_container - *minio_container - *rabbit_container - otp_26_mysql_redis: + otp_27_mysql_redis: docker: - - image: *OTP26 + - image: *OTP27 - *redis_container - *mysql_container - *rabbit_container - otp_25_pgsql_redis: - docker: - - image: *OTP25 - - *redis_container - - *pgsql_container otp_26_pgsql_redis: docker: - image: *OTP26 - *redis_container - *pgsql_container - otp_25_ldap_redis: + otp_27_pgsql_redis: docker: - - image: *OTP25 + - image: *OTP27 - *redis_container - - *ldap_container + - *pgsql_container otp_26_ldap_redis: docker: - image: *OTP26 - *redis_container - *ldap_container - otp_26_mssql_redis: + otp_27_ldap_redis: docker: - - image: *OTP26 + - image: *OTP27 + - *redis_container + - *ldap_container + otp_27_mssql_redis: + docker: + - image: *OTP27 - *redis_container - *mssql_container - otp_26_elasticsearch_cassandra: + otp_27_elasticsearch_cassandra: docker: - - image: *OTP26 + - image: *OTP27 - *redis_container - *elasticsearch_container - *cassandra_container - *cassandra_proxy_container - otp_26_arm64: + otp_27_arm64: docker: - - image: *OTP26 + - image: *OTP27 resource_class: arm.medium - otp_26_redis_arm64: + otp_27_redis_arm64: docker: - - image: *OTP26 + - image: *OTP27 - *redis_container resource_class: arm.medium commands: @@ -701,277 +705,277 @@ workflows: name: build_and_deploy_docs context: mongooseim-org requires: - - otp_26_docker + - otp_27_docker filters: &release_tags tags: only: /^\d+\.\d+\.\d+/ # ============= PACKAGES ============= - package: name: rockylinux_8 - executor: otp_26 + executor: otp_27 platform: rockylinux_8 context: mongooseim-org otp_package: "26.2.4" filters: *all_tags - package: name: almalinux_8 - executor: otp_26 + executor: otp_27 platform: almalinux_8 context: mongooseim-org otp_package: "26.2.4" filters: *all_tags - package: name: debian_bullseye - executor: otp_26 + executor: otp_27 platform: debian_bullseye context: mongooseim-org otp_package: "26.2.1" filters: *all_tags - package: name: debian_buster - executor: otp_26 + executor: otp_27 platform: debian_buster context: mongooseim-org otp_package: "26.2.3" filters: *all_tags - package: name: ubuntu_jammy - executor: otp_26 + executor: otp_27 platform: ubuntu_jammy context: mongooseim-org otp_package: "26.2.3" filters: *all_tags - package: name: ubuntu_focal - executor: otp_26 + executor: otp_27 platform: ubuntu_focal context: mongooseim-org otp_package: "26.2.1" filters: *all_tags - package: name: ubuntu_bionic - executor: otp_26 + executor: otp_27 platform: ubuntu_bionic context: mongooseim-org otp_package: "26.2.3" filters: *all_tags # ======== BASE DOCKER BUILDS ======== - build_in_docker: - name: otp_26_docker - executor: otp_26 + name: otp_27_docker + executor: otp_27 context: mongooseim-org build_prod: true filters: *all_tags - build_in_docker: - name: otp_25_docker - executor: otp_25 + name: otp_26_docker + executor: otp_26 context: mongooseim-org build_prod: false filters: *all_tags - build_in_docker: - name: otp_26_docker_arm64 - executor: otp_26_arm64 + name: otp_27_docker_arm64 + executor: otp_27_arm64 context: mongooseim-org build_prod: true arch: arm64 filters: *all_tags # ============= DIALYZER ============= - dialyzer: - name: dialyzer_25 - executor: otp_25 + name: dialyzer_26 + executor: otp_26 context: mongooseim-org requires: - - otp_25_docker + - otp_26_docker filters: *all_tags - dialyzer: - name: dialyzer_26 - executor: otp_26 + name: dialyzer_27 + executor: otp_27 context: mongooseim-org requires: - - otp_26_docker + - otp_27_docker filters: *all_tags # ============= XREF ============= - xref: name: xref - executor: otp_26 + executor: otp_27 context: mongooseim-org requires: - - otp_26_docker + - otp_27_docker filters: *all_tags # ============= EDOC ============= - edoc: name: edoc - executor: otp_26 + executor: otp_27 context: mongooseim-org requires: - - otp_26_docker + - otp_27_docker filters: *all_tags # ============= SMALL TESTS ============= - small_tests_in_docker: - name: small_tests_25 - executor: otp_25_redis + name: small_tests_26 + executor: otp_26_redis context: mongooseim-org requires: - - otp_25_docker + - otp_26_docker filters: *all_tags - small_tests_in_docker: - name: small_tests_26 - executor: otp_26_redis + name: small_tests_27 + executor: otp_27_redis context: mongooseim-org requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - small_tests_in_docker: - name: small_tests_26_arm64 - executor: otp_26_redis_arm64 + name: small_tests_27_arm64 + executor: otp_27_redis_arm64 context: mongooseim-org requires: - - otp_26_docker_arm64 + - otp_27_docker_arm64 filters: *all_tags # ============= BIG TESTS ============= - big_tests_in_docker: - name: internal_mnesia_26 - executor: otp_26_redis_minio_rmq + name: internal_mnesia_27 + executor: otp_27_redis_minio_rmq context: mongooseim-org preset: internal_mnesia db: "mnesia minio" tls_dist: true requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: pgsql_cets_26 - executor: otp_26_pgsql_redis + name: pgsql_cets_27 + executor: otp_27_pgsql_redis context: mongooseim-org preset: pgsql_cets db: "mnesia postgres cets" requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: mysql_redis_26 - executor: otp_26_mysql_redis + name: mysql_redis_27 + executor: otp_27_mysql_redis context: mongooseim-org preset: mysql_redis requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: dynamic_domains_mysql_redis_26 + name: dynamic_domains_mysql_redis_27 spec: dynamic_domains.spec - executor: otp_26_mysql_redis + executor: otp_27_mysql_redis context: mongooseim-org preset: mysql_redis requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: pgsql_mnesia_25 - executor: otp_25_pgsql_redis + name: pgsql_mnesia_26 + executor: otp_26_pgsql_redis context: mongooseim-org preset: pgsql_mnesia requires: - - otp_25_docker + - otp_26_docker filters: *all_tags - big_tests_in_docker: - name: pgsql_mnesia_26 - executor: otp_26_pgsql_redis + name: pgsql_mnesia_27 + executor: otp_27_pgsql_redis context: mongooseim-org preset: pgsql_mnesia requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: dynamic_domains_pgsql_mnesia_26 + name: dynamic_domains_pgsql_mnesia_27 spec: dynamic_domains.spec - executor: otp_26_pgsql_redis + executor: otp_27_pgsql_redis context: mongooseim-org preset: pgsql_mnesia requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: dynamic_domains_pgsql_mnesia_25 + name: dynamic_domains_pgsql_mnesia_26 spec: dynamic_domains.spec - executor: otp_25_pgsql_redis + executor: otp_26_pgsql_redis context: mongooseim-org preset: pgsql_mnesia requires: - - otp_25_docker + - otp_26_docker filters: *all_tags - big_tests_in_docker: - name: mssql_mnesia_26 - executor: otp_26_mssql_redis + name: mssql_mnesia_27 + executor: otp_27_mssql_redis context: mongooseim-org preset: odbc_mssql_mnesia db: "mssql redis" requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: dynamic_domains_mssql_mnesia_26 + name: dynamic_domains_mssql_mnesia_27 spec: dynamic_domains.spec - executor: otp_26_mssql_redis + executor: otp_27_mssql_redis context: mongooseim-org preset: odbc_mssql_mnesia db: "mssql redis" requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: ldap_mnesia_25 - executor: otp_25_ldap_redis + name: ldap_mnesia_26 + executor: otp_26_ldap_redis context: mongooseim-org preset: ldap_mnesia db: "ldap redis" requires: - - otp_25_docker + - otp_26_docker filters: *all_tags - big_tests_in_docker: - name: ldap_mnesia_26 - executor: otp_26_ldap_redis + name: ldap_mnesia_27 + executor: otp_27_ldap_redis context: mongooseim-org preset: ldap_mnesia db: "ldap redis" requires: - - otp_26_docker + - otp_27_docker filters: *all_tags - big_tests_in_docker: - name: elasticsearch_and_cassandra_26 + name: elasticsearch_and_cassandra_27 spec: mam.spec - executor: otp_26_elasticsearch_cassandra + executor: otp_27_elasticsearch_cassandra context: mongooseim-org preset: elasticsearch_and_cassandra_mnesia db: "elasticsearch cassandra" requires: - - otp_26_docker + - otp_27_docker filters: *all_tags # ============= DOCKER IMAGE BUILD & UPLOAD ============= - docker_image: name: docker_build_and_ship - executor: otp_26 + executor: otp_27 context: mongooseim-org requires: - - small_tests_25 - - ldap_mnesia_25 - - pgsql_mnesia_25 - - dynamic_domains_pgsql_mnesia_25 - - dialyzer_25 - - small_tests_26 - - internal_mnesia_26 - - pgsql_cets_26 - - pgsql_mnesia_26 - - mysql_redis_26 - - mssql_mnesia_26 - ldap_mnesia_26 - - elasticsearch_and_cassandra_26 + - pgsql_mnesia_26 - dynamic_domains_pgsql_mnesia_26 - - dynamic_domains_mysql_redis_26 - - dynamic_domains_mssql_mnesia_26 - dialyzer_26 - - small_tests_26_arm64 + + - small_tests_27 + - internal_mnesia_27 + - pgsql_cets_27 + - pgsql_mnesia_27 + - mysql_redis_27 + - mssql_mnesia_27 + - ldap_mnesia_27 + - elasticsearch_and_cassandra_27 + - dynamic_domains_pgsql_mnesia_27 + - dynamic_domains_mysql_redis_27 + - dynamic_domains_mssql_mnesia_27 + - dialyzer_27 + - small_tests_27_arm64 - xref - edoc @@ -979,14 +983,14 @@ workflows: filters: *all_tags - docker_smoke_test: name: docker_smoke_test - executor: otp_26 + executor: otp_27 context: mongooseim-org requires: - docker_build_and_ship filters: *all_tags - docker_smoke_test: name: docker_smoke_test_arm64 - executor: otp_26_arm64 + executor: otp_27_arm64 context: mongooseim-org requires: - docker_build_and_ship From 709bc4f9b6fe69b1e4b9fd07f13dc34d4fc8f6f0 Mon Sep 17 00:00:00 2001 From: Mikhail Uvarov Date: Tue, 30 Jul 2024 16:30:26 +0200 Subject: [PATCH 2/3] Update escalus Update worker_pool dep of escalus to 6.2.1 --- big_tests/rebar.config | 2 +- big_tests/rebar.lock | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/big_tests/rebar.config b/big_tests/rebar.config index e6cb72fc8d8..f6312df9155 100644 --- a/big_tests/rebar.config +++ b/big_tests/rebar.config @@ -16,7 +16,7 @@ {proper, "1.4.0"}, {gun, "2.1.0"}, {fusco, "0.1.1"}, - {escalus, "4.2.14"}, + {escalus, "4.2.15"}, {cowboy, "2.12.0"}, {csv, "3.0.3", {pkg, csve}}, {amqp_client, "3.13.0-rc.2"}, diff --git a/big_tests/rebar.lock b/big_tests/rebar.lock index d733a20e6a3..c3e61babfd1 100644 --- a/big_tests/rebar.lock +++ b/big_tests/rebar.lock @@ -8,7 +8,7 @@ {pkg,<<"credentials_obfuscation">>,<<"3.4.0">>}, 1}, {<<"csv">>,{pkg,<<"csve">>,<<"3.0.3">>},0}, - {<<"escalus">>,{pkg,<<"escalus">>,<<"4.2.14">>},0}, + {<<"escalus">>,{pkg,<<"escalus">>,<<"4.2.15">>},0}, {<<"esip">>,{pkg,<<"esip">>,<<"1.0.52">>},0}, {<<"exml">>,{pkg,<<"hexml">>,<<"3.4.1">>},0}, {<<"fast_pbkdf2">>,{pkg,<<"fast_pbkdf2">>,<<"1.0.5">>},2}, @@ -31,7 +31,7 @@ {<<"stun">>,{pkg,<<"stun">>,<<"1.2.12">>},1}, {<<"thoas">>,{pkg,<<"thoas">>,<<"1.0.0">>},1}, {<<"uuid">>,{pkg,<<"uuid_erl">>,<<"2.0.7">>},1}, - {<<"worker_pool">>,{pkg,<<"worker_pool">>,<<"6.2.0">>},1}]}. + {<<"worker_pool">>,{pkg,<<"worker_pool">>,<<"6.2.1">>},1}]}. [ {pkg_hash,[ {<<"amqp_client">>, <<"2C9975DA52319D8E613B5DBD3E931374B41AF6F571BD7A3F96CE50AD6C27441B">>}, @@ -41,7 +41,7 @@ {<<"cowlib">>, <<"DB8F7505D8332D98EF50A3EF34B34C1AFDDEC7506E4EE4DD4A3A266285D282CA">>}, {<<"credentials_obfuscation">>, <<"34E18B126B3AEFD6E8143776FBE1CECEEA6792307C99AC5EE8687911F048CFD7">>}, {<<"csv">>, <<"69E7D9B3FDC72016644368762C6A3E6CBFEB85BCCADBF1BD99AB6C827E360E04">>}, - {<<"escalus">>, <<"6C210C7518ACAE1280063C250539AC7AFE00AC77A5F16B31BA5A033F9257C513">>}, + {<<"escalus">>, <<"1F153CFBEAA67B012F7A34D0AD61A8CD68ED7C0BF9F02B94606B339FBCDCD617">>}, {<<"esip">>, <<"A2840287C493A4280E6FBA57A257706843B025C315875E38B03FD07190E22DBA">>}, {<<"exml">>, <<"9581FE6512D9772C61BBE611CD4A8E5BB90B4D4481275325EC520F7A931A9393">>}, {<<"fast_pbkdf2">>, <<"6045138C4C209FC8222A0B18B2CB1D7BD7407EF4ADAD0F14C5E0F7F4726E3E41">>}, @@ -64,7 +64,7 @@ {<<"stun">>, <<"A65DF67A8AAAECB6A94D687977B2E9F161820819910CB97BBE26A3525356525B">>}, {<<"thoas">>, <<"567C03902920827A18A89F05B79A37B5BF93553154B883E0131801600CF02CE0">>}, {<<"uuid">>, <<"B2078D2CC814F53AFA52D36C91E08962C7E7373585C623F4C0EA6DFB04B2AF94">>}, - {<<"worker_pool">>, <<"506DE38C528A81ED2C6A80A419B83DDE6DA5E295BD320BDF4D35A69AFEB0247A">>}]}, + {<<"worker_pool">>, <<"BD98A0BE1D20057AE9967CBE73D263AEA5BE14BBE4C73CAFEB1378572FF14561">>}]}, {pkg_hash_ext,[ {<<"amqp_client">>, <<"E86FD4B95291799BDE1571AF81077B5A5DB9653824FBE429F5BADAD831C52642">>}, {<<"base16">>, <<"06EA2D48343282E712160BA89F692B471DB8B36ABE8394F3445FF9032251D772">>}, @@ -73,7 +73,7 @@ {<<"cowlib">>, <<"E1E1284DC3FC030A64B1AD0D8382AE7E99DA46C3246B815318A4B848873800A4">>}, {<<"credentials_obfuscation">>, <<"738ACE0ED5545D2710D3F7383906FC6F6B582D019036E5269C4DBD85DBCED566">>}, {<<"csv">>, <<"741D1A55AABADAA3E0FE13051050101A73E90C4570B9F9403A939D9546813521">>}, - {<<"escalus">>, <<"A1182704305DB722A30B7D5588B53858B5988E15FCE858F322D56DD0A344F55D">>}, + {<<"escalus">>, <<"048CEB922E64F23DD05890A60256EDC28B86969E48B0BE5FDE202F62315C9E4F">>}, {<<"esip">>, <<"6F00165395900500AA262CE0297162D93931C78C1464D89FD0EDC6E3D6BC011F">>}, {<<"exml">>, <<"D8E7894E2544402B4986EEB2443C15B51B14F686266F091DBF2777D1D99A2FA2">>}, {<<"fast_pbkdf2">>, <<"BC3B5A3CAB47AD114FF8BB815FEDE62A6187ACD14D8B37412F2AF8236A089CEF">>}, @@ -96,5 +96,5 @@ {<<"stun">>, <<"A2055032B6D338D0454142004BCB12FAFB0C64AB1F273F1D0C6923EBBC8EDE40">>}, {<<"thoas">>, <<"FC763185B932ECB32A554FB735EE03C3B6B1B31366077A2427D2A97F3BD26735">>}, {<<"uuid">>, <<"4E4C5CA3461DC47C5E157ED42AA3981A053B7A186792AF972A27B14A9489324E">>}, - {<<"worker_pool">>, <<"E1DED160797FBE656AD683109DBD741B520097DF17BDF7B51E3E4697073A6E62">>}]} + {<<"worker_pool">>, <<"64E560DE08CA5E7DB8BD4CDCC7B744B0659696194E3BC9E56239BA4A0F7E24F9">>}]} ]. From 6b022bf005d19c1c79985beb238f9a7d98e89016 Mon Sep 17 00:00:00 2001 From: Mikhail Uvarov Date: Tue, 30 Jul 2024 19:25:12 +0200 Subject: [PATCH 3/3] Meck inet instead of mod_global_distrib_utils --- big_tests/tests/mod_global_distrib_SUITE.erl | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/big_tests/tests/mod_global_distrib_SUITE.erl b/big_tests/tests/mod_global_distrib_SUITE.erl index fc2f776c942..c790401293e 100644 --- a/big_tests/tests/mod_global_distrib_SUITE.erl +++ b/big_tests/tests/mod_global_distrib_SUITE.erl @@ -1171,13 +1171,14 @@ execute_on_each_node(M, F, A) -> lists:map(fun({NodeName, _, _}) -> rpc(NodeName, M, F, A) end, get_hosts()). mock_inet() -> - %% We don't want to mock inet module itself to avoid strange networking issues - meck:new(mod_global_distrib_utils, [non_strict, passthrough, unstick]), - meck:expect(mod_global_distrib_utils, getaddrs, fun(_, inet) -> {ok, [{127, 0, 0, 1}]}; - (_, inet6) -> {error, "No ipv6 address"} end). + %% We can only mock MongooseIM modules on mim1. + %% Otherwise meck will freeze calling cover_server process. + meck:new(inet, [non_strict, passthrough, unstick]), + meck:expect(inet, getaddrs, fun(_, inet) -> {ok, [{127, 0, 0, 1}]}; + (_, inet6) -> {error, "No ipv6 address"} end). unmock_inet(_Pids) -> - execute_on_each_node(meck, unload, [mod_global_distrib_utils]). + execute_on_each_node(meck, unload, [inet]). out_connection_sups(Node) -> Children = rpc(Node, supervisor, which_children, [mod_global_distrib_outgoing_conns_sup]),