anchor.diff:  init_per_testcase(Case, Config) when
       Case == post_should_configure_cluster_manager_service;
       Case == post_should_configure_database_service;
  -    Case == post_should_configure_cluster_worker_service
  +    Case == post_should_configure_op_worker_service
   ->
       % non-default init because the service must not already have hosts on which it is deployed
       Nodes = ?config(all_nodes, Config),
       Self = self(),
  +    test_utils:mock_new(Nodes, [service]),
       test_utils:mock_expect(Nodes, service, apply_sync, fun(Service, Action, Ctx) ->
           Self ! {service, Service, Action, Ctx},
           [#action_end{service = service, action = action, result = ok}]
  
positive.code:     end).
  
  
  post_should_configure_cluster_worker_service(Config) ->
      ?run(Config, fun({Host, {Prefix, Service}}) ->
          ?assertAsyncTask(?TASK_ID, onepanel_test_rest:auth_request(
              Host, <<Prefix/binary, "/workers">>, post,
              ?OZ_OR_ROOT_AUTHS(Host, [?CLUSTER_UPDATE]),
              #{hosts => [<<"host1">>, <<"host2">>, <<"host3">>]}
          )),
          ?assertReceivedMatch({service, Service, deploy, #{
              hosts := ["host1", "host2", "host3"], db_hosts := ["host1", "host2"],
              cm_hosts := ["host2", "host3"], main_cm_host := "host3"
          }}, ?TIMEOUT)
      end, [
          {oneprovider_hosts, {<<"/provider">>, op_worker}},
          {onezone_hosts, {<<"/zone">>, oz_worker}}
      ]).
  
  
  post_should_configure_onezone_service(Config) ->
  
negative.code:         patch_should_configure_dns_check,
          post_should_configure_database_service,
          post_should_configure_cluster_manager_service,
          post_should_configure_op_worker_service,
          post_should_configure_oz_worker_service,
          post_should_configure_oneprovider_service,
          post_should_configure_onezone_service,
          post_should_return_conflict_on_configured_onezone,
  