@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);
  }