@Test(expectedExceptions = ConcurrentTaskException.class)
  public void testDeletingAnUploadingImage() throws Throwable {
    TaskEntity task =
        imageBackend.prepareImageUpload(inputStream, "image-name", ImageReplicationType.ON_DEMAND);
    StepEntity step = task.getSteps().get(0);
    ImageEntity image = (ImageEntity) step.getTransientResourceEntities().get(0);

    imageBackend.prepareImageDelete(image.getId());
  }
  @Test(expectedExceptions = InvalidImageStateException.class)
  public void testPrepareImageDeleteInPendingDelete() throws Throwable {
    ImageEntity imageInDb = new ImageEntity();
    imageInDb.setName("image-0");
    imageInDb.setState(ImageState.PENDING_DELETE);
    imageInDb.setSize(1000L);

    imageDao.create(imageInDb);
    imageBackend.prepareImageDelete(imageInDb.getId());
  }
  @Test
  public void testPrepareImageDelete() throws Throwable {
    ImageEntity imageInDb = new ImageEntity();
    imageInDb.setName("image-0");
    imageInDb.setState(ImageState.READY);
    imageInDb.setSize(1000L);

    imageDao.create(imageInDb);
    TaskEntity taskDelete = imageBackend.prepareImageDelete(imageInDb.getId());
    assertThat(taskDelete.getSteps().size(), is(2));
    assertThat(taskDelete.getSteps().get(0).getOperation(), is(Operation.DELETE_IMAGE));
    assertThat(taskDelete.getSteps().get(1).getOperation(), is(Operation.DELETE_IMAGE_REPLICAS));
  }
  @Test
  public void testGetTasksWithGivenState() throws Exception {
    ImageEntity imageInDb = new ImageEntity();
    imageInDb.setName("image-0");
    imageInDb.setState(ImageState.READY);
    imageInDb.setSize(1000L);

    imageDao.create(imageInDb);
    TaskEntity taskDelete = imageBackend.prepareImageDelete(imageInDb.getId());

    List<Task> tasks = imageBackend.getTasks(imageInDb.getId(), Optional.of("FINISHED"));

    assertThat(tasks.size(), is(0));
  }
  @Test
  public void testGetTasks() throws Exception {
    ImageEntity imageInDb = new ImageEntity();
    imageInDb.setName("image-0");
    imageInDb.setState(ImageState.READY);
    imageInDb.setSize(1000L);

    imageDao.create(imageInDb);
    TaskEntity taskDelete = imageBackend.prepareImageDelete(imageInDb.getId());

    List<Task> tasks = imageBackend.getTasks(imageInDb.getId(), Optional.<String>absent());

    assertThat(tasks.size(), is(1));
    assertThat(tasks.get(0).getState(), is("QUEUED"));
  }
 @Test(expectedExceptions = ImageNotFoundException.class)
 public void testDeletingAnNonExistingImage() throws Throwable {
   imageBackend.prepareImageDelete("non-existing-id");
 }