anchor.diff:          filename:join([ProjectRoot, "bamboos", "docker", "cleanup.py"]),
       utils:cmd([CleanupScript | DockersStr]),
       ok.
  +
  +%%--------------------------------------------------------------------
  +%% @doc
  +%% Starts cover server if needed (if apropriate env is set).
  +%% @end
  +%%--------------------------------------------------------------------
  +-spec start_cover() -> ok.
  +start_cover() ->
  +    case application:get_env(cover_enabled) of
  +        {ok, Dirs} when is_list(Dirs) ->
  +            cover:start(),
  +            lists:foreach(fun(D) ->
  +                cover:compile_beam_directory(atom_to_list(D))
  +            end, Dirs),
  +            ok;
  +        _ ->
  +            ok
  +    end.
  +
  +%%--------------------------------------------------------------------
  +%% @doc
  +%% Stops cover server if it is running.
  +%% @end
  +%%--------------------------------------------------------------------
  +stop_cover() ->
  +    case application:get_env(cover_enabled) of
  +        {ok, Dirs} when is_list(Dirs) ->
  +            CoverFile = "cv.coverdata",
  +            cover:export(CoverFile),
  +            {ok, FileData} = file:read_file(CoverFile),
  +            ok = file:delete(CoverFile),
  +            true = is_pid(global:send(?CLEANING_PROC_NAME, {app_ended, FileData})),
  +            cover:stop(),
  +            ok;
  +        _ ->
  +            ok
  +    end.
   
   %%%===================================================================
   %%% Internal functions
  
positive.code: %%--------------------------------------------------------------------
  %% @doc
  %% Starts deps and dockers with needed applications and mocks.
  %% Adds started nodes to ct_cover analysis if needed (test is not performance).
  %% @end
  %%--------------------------------------------------------------------
  -spec prepare_test_environment(Config :: list(), DescriptionFile :: string(),
  
negative.code: 
  %%--------------------------------------------------------------------
  %% @doc
  %% Gathers cover analysis reports if cover is started.
  %% Afterwards, cleans environment by running 'cleanup.py' script.
  %% @end
  %%--------------------------------------------------------------------
  -spec clean_environment(Config :: list()) -> ok.
  clean_environment(Config) ->
      case cover:modules() of
          [] ->
              ok;
          _ ->
              GrNodes = ?config(gr_nodes, Config),
              Workers = ?config(op_worker_nodes, Config),
              CCMs = ?config(op_ccm_nodes, Config),
              AllNodes = GrNodes ++ Workers ++ CCMs,
  
              global:register_name(?CLEANING_PROC_NAME, self()),
              global:sync(),
  
              lists:foreach(fun(N) ->
                  ok = rpc:call(N, application, stop, [op_worker])
              end, Workers),
  
              lists:foreach(fun(N) ->
                  ok = rpc:call(N, application, stop, [op_ccm])
              end, CCMs),
  
              lists:foreach(fun(N) ->
                  ok = rpc:call(N, application, stop, [globalregistry])
              end, GrNodes),
  
              lists:foreach(fun(_N) ->
                  receive
                      {app_ended, FileData} ->
                          CoverFile = "cv.coverdata",
                          ok = file:write_file(CoverFile, FileData),
                          cover:import(CoverFile),
                          file:delete(CoverFile)
                      after
                          timer:minutes(1) ->
                              throw(cover_not_received)
  
                  end
              end, AllNodes)
      end,
  
      Dockers = proplists:get_value(docker_ids, Config, []),
  