@Test
  public void testRemoveCookbook() throws IOException {
    Long testAccountId = Long.valueOf(2);
    Long testAppId = Long.valueOf(2);

    File accountDirectory = new File(cookbookDestinationRoot + "/" + testAccountId);
    ensureFileNotExists(accountDirectory);

    File cookbookInput = new File("src/test/resources/test-xlc-fds");
    File cookbookTarget =
        new File(
            cookbookDestinationRoot + "/" + testAccountId + "/" + testAppId + "/" + "test-xlc-fds");

    ApplicationModel application =
        ApplicationModelBuilder.newInstance().accountId(testAccountId).appId(testAppId).build();
    CookbookModel cookbook =
        CookbookModelBuilder.newInstance().application(application).name("test-xlc-fds").build();

    givenCookbookExists(cookbook);
    givenCookbookFileExists(cookbookInput, cookbookTarget);

    assertTrue(cookbookTarget.exists());
    manager.removeCookbook(1L);
    assertFalse(cookbookTarget.exists());

    ensureFileNotExists(accountDirectory);
  }
  @Test
  public void testGetApplicationCookbooks() {
    Long testAppId = Long.valueOf(3);

    CookbookModel testCookbook = CookbookModelBuilder.newInstance().name("test-cookbook").build();
    Set<CookbookModel> testCookbooks = new HashSet<CookbookModel>(Arrays.asList(testCookbook));
    ApplicationModel application =
        ApplicationModelBuilder.newInstance().cookbooks(testCookbooks).build();
    givenApplicationExists(application);

    Cookbooks cookbooks = manager.getApplicationCookbooks(testAppId);
    assertNotNull(cookbooks);
    assertNotNull(cookbooks.getCookbook());
    assertFalse(cookbooks.getCookbook().isEmpty());
  }
  @Test
  public void testGenerateCookbooksArchive() throws IOException {
    Long testAccountId = Long.valueOf(4);
    Long testAppId = Long.valueOf(4);
    Long testVcId = Long.valueOf(4);

    File vcDirectory = new File(vcCookbookDestinationRoot + "/" + testVcId);
    ensureFileNotExists(vcDirectory);

    File accountDirectory = new File(cookbookDestinationRoot + "/" + testAccountId);
    ensureFileNotExists(accountDirectory);

    File cookbookInput = new File("src/test/resources/test-xlc-fds");
    File cookbookTarget =
        new File(
            cookbookDestinationRoot + "/" + testAccountId + "/" + testAppId + "/" + "test-xlc-fds");

    CookbookModel cookbookModel = CookbookModelBuilder.newInstance().name("test-xlc-fds").build();
    Set<CookbookModel> cookbooks = new HashSet<CookbookModel>(Arrays.asList(cookbookModel));
    ApplicationModel appModel =
        ApplicationModelBuilder.newInstance()
            .accountId(testAccountId)
            .appId(testAppId)
            .cookbooks(cookbooks)
            .build();
    cookbookModel.setApplication(appModel);
    VirtualClusterModel vcModel = VirtualClusterModelBuilder.newInstance().build();

    givenApplicationExists(appModel);
    givenCookbookExists(cookbookModel);
    givenCookbookFileExists(cookbookInput, cookbookTarget);
    givenVirtualClusterExists(vcModel);

    Application startingApplication = ApplicationBuilder.newInstance().id(testAppId).build();
    VirtualCluster startingVirtualCluster =
        VirtualClusterBuilder.newInstance().id(testVcId).build();
    String url =
        manager.generateCookbooksArchive(
            Arrays.asList(startingApplication), startingVirtualCluster);

    File outputFile =
        new File(vcCookbookDestinationRoot + "/" + testVcId + "/" + cookbooksArchiveName);
    assertTrue(outputFile.exists());
    assertEquals(vcCookbookUrlBase + testVcId + "/" + cookbooksArchiveName, url);

    ensureFileNotExists(vcDirectory);
  }
  @Test
  public void testCreateCookbook() throws Exception {
    Long testAccountId = Long.valueOf(1);
    Long testAppId = Long.valueOf(1);
    givenApplicationExists(
        ApplicationModelBuilder.newInstance().accountId(testAccountId).appId(testAppId).build());

    InputStream testInputStream = new FileInputStream("src/test/resources/cookbook.tar.gz");
    Cookbook cookbook = CookbookBuilder.newInstance().name("cookbook.tar.gz").build();

    File accountDirectory = new File(cookbookDestinationRoot + "/" + testAccountId);
    ensureFileNotExists(accountDirectory);

    manager.createCookbook(testAppId, cookbook, testInputStream);
    File outputFile =
        new File(cookbookDestinationRoot + "/" + testAccountId + "/" + testAppId + "/xlc-fds");
    assertTrue(outputFile.exists());

    ensureFileNotExists(accountDirectory);
  }