@Test
    public void testCapabilities() {
      EnumSet<Service.ServiceOption> expected =
          EnumSet.of(
              Service.ServiceOption.OWNER_SELECTION,
              Service.ServiceOption.PERSISTENCE,
              Service.ServiceOption.REPLICATION);

      assertThat(createContainerSpecTaskService.getOptions(), is(expected));
    }
    @Test(
        dataProvider = "InvalidStageTransitions",
        expectedExceptions = IllegalStateException.class)
    public void testInvalidStageTransition(
        TaskState.TaskStage startStage, TaskState.TaskStage patchStage) throws Throwable {
      startService(startStage);
      CreateContainerSpecTaskService.State patchState =
          createContainerSpecTaskService.buildPatch(patchStage, null);

      Operation patchOperation =
          Operation.createPatch(UriUtils.buildUri(testHost, TestHost.SERVICE_URI, null))
              .setBody(patchState);

      testHost.sendRequestAndWait(patchOperation);
    }
    @Test(
        dataProvider = "InvalidPatchStateAttributes",
        expectedExceptions = IllegalStateException.class)
    public void testInvalidPatchStateInvalidAttributeSet(String attributeName, Object value)
        throws Throwable {
      startService(TaskState.TaskStage.CREATED);

      CreateContainerSpecTaskService.State patchState =
          createContainerSpecTaskService.buildPatch(TaskState.TaskStage.STARTED, null);

      patchState.getClass().getDeclaredField(attributeName).set(patchState, value);

      Operation patchOperation =
          Operation.createPatch(UriUtils.buildUri(testHost, TestHost.SERVICE_URI, null))
              .setBody(patchState);

      testHost.sendRequestAndWait(patchOperation);
    }
    @Test(dataProvider = "ValidStageTransitions")
    public void testValidStageTransition(
        TaskState.TaskStage startStage, TaskState.TaskStage patchStage) throws Throwable {
      startService(startStage);
      CreateContainerSpecTaskService.State patchState =
          createContainerSpecTaskService.buildPatch(patchStage, null);

      Operation patchOperation =
          Operation.createPatch(UriUtils.buildUri(testHost, TestHost.SERVICE_URI, null))
              .setBody(patchState);

      Operation result = testHost.sendRequestAndWait(patchOperation);
      assertThat(result.getStatusCode(), is(200));

      CreateContainerSpecTaskService.State savedState =
          testHost.getServiceState(CreateContainerSpecTaskService.State.class);

      assertThat(savedState.taskState.stage, is(patchStage));
    }