anchor.diff:  init_per_suite(Config) ->
       S = vmq_test_utils:get_suite_rand_seed(),
       cover:start(),
  +    vmq_test_utils:setup(),
  +    vmq_server_cmd:listener_start(1888, []),
       [S|Config].
   
   end_per_suite(_Config) ->
  +    vmq_server_cmd:listener_stop(1888, "127.0.0.1", false),
  +    vmq_test_utils:teardown(),
       _Config.
  +
  +init_per_group(_Group, _Config) ->
  +    ok.
  +
  +end_per_group(_Group, _Config) ->
  +    ok.
   
   init_per_testcase(_Case, Config) ->
       vmq_test_utils:seed_rand(Config),
  -    vmq_test_utils:setup(),
       vmq_server_cmd:set_config(allow_anonymous, true),
  -    vmq_server_cmd:set_config(retry_interval, 10),
  +    vmq_server_cmd:set_config(retry_interval, 2),
       vmq_server_cmd:set_config(max_client_id_size, 25),
  -    vmq_server_cmd:listener_start(1888, []),
       Config.
   
   end_per_testcase(_, Config) ->
  -    vmq_test_utils:teardown(),
       Config.
   
   all() ->
  -    [publish_qos1_test,
  -     publish_qos2_test,
  -     publish_b2c_disconnect_qos1_test,
  -     publish_b2c_disconnect_qos2_test,
  -     publish_b2c_timeout_qos1_test,
  -     publish_b2c_timeout_qos2_test,
  -     publish_c2b_disconnect_qos2_test,
  -     publish_c2b_timeout_qos2_test,
  -     pattern_matching_test,
  -     not_allowed_publish_close_qos0_mqtt_3_1,
  -     not_allowed_publish_close_qos1_mqtt_3_1,
  -     not_allowed_publish_close_qos2_mqtt_3_1,
  -     not_allowed_publish_close_qos0_mqtt_3_1_1,
  -     not_allowed_publish_close_qos1_mqtt_3_1_1,
  -     not_allowed_publish_close_qos2_mqtt_3_1_1,
  -     message_size_exceeded_close
  +    [
  +     {group, mqtt}
  +    ].
  +
  +groups() ->
  +    Tests =
  +        [publish_qos1_test,
  +         publish_qos2_test,
  +         publish_b2c_disconnect_qos1_test,
  +         publish_b2c_disconnect_qos2_test,
  +         publish_b2c_timeout_qos1_test,
  +         publish_b2c_timeout_qos2_test,
  +         publish_c2b_disconnect_qos2_test,
  +         publish_c2b_timeout_qos2_test,
  +         pattern_matching_test,
  +         not_allowed_publish_close_qos0_mqtt_3_1,
  +         not_allowed_publish_close_qos1_mqtt_3_1,
  +         not_allowed_publish_close_qos2_mqtt_3_1,
  +         not_allowed_publish_close_qos0_mqtt_3_1_1,
  +         not_allowed_publish_close_qos1_mqtt_3_1_1,
  +         not_allowed_publish_close_qos2_mqtt_3_1_1,
  +         message_size_exceeded_close
  +        ],
  +    [
  +     {mqtt, [shuffle,sequence], Tests}
       ].
   
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  
positive.code:     ok = gen_tcp:send(Socket, Publish),
      {error, closed} = gen_tcp:recv(Socket, 0, 1000),
      true = lists:member({counter, mqtt_invalid_msg_size_error, 1}, vmq_metrics:metrics()),
      vmq_config:set_env(max_message_size, OldLimit, false).
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%% Hooks
  
negative.code: -module(vmq_publish_SUITE).
  
  -compile(export_all).
  -compile(nowarn_export_all).
  
  %% ===================================================================
  %% common_test callbacks
  