@Test
public void testExtractViewArchive() throws Exception {

  ResourceTypeEntity resourceTypeEntity = new ResourceTypeEntity();
  resourceTypeEntity.setId(10);
  resourceTypeEntity.setName("MY_VIEW{1.0.0}");
  ViewEntity viewDefinition = ViewEntityTest.getViewEntity();
  viewDefinition.setResourceType(resourceTypeEntity);
  // set expectations
  expect(configuration.getViewExtractionThreadPoolCoreSize()).andReturn(2).anyTimes();
  expect(configuration.getViewExtractionThreadPoolMaxSize()).andReturn(3).anyTimes();
  expect(configuration.getViewExtractionThreadPoolTimeout()).andReturn(10000L).anyTimes();
  if (System.getProperty("os.name").contains("Windows")) {
    expect(viewArchive.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
  }
  else {
    expect(viewArchive.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
  }
  expect(archiveDir.exists()).andReturn(false);
  if (System.getProperty("os.name").contains("Windows")) {
    expect(archiveDir.getAbsolutePath()).andReturn("\\var\\lib\\ambari-server\\resources\\views\\work\\MY_VIEW{1.0.0}").anyTimes();
  }
  else {
    expect(archiveDir.getAbsolutePath()).andReturn("/var/lib/ambari-server/resources/views/work/MY_VIEW{1.0.0}").anyTimes();
  }
  expect(archiveDir.mkdir()).andReturn(true);
  expect(archiveDir.toURI()).andReturn(new URI("file:./"));
  expect(metaInfDir.mkdir()).andReturn(true);
  expect(viewJarFile.getNextJarEntry()).andReturn(jarEntry);
  expect(viewJarFile.getNextJarEntry()).andReturn(null);
  expect(jarEntry.getName()).andReturn("view.xml");
  expect(viewJarFile.read(anyObject(byte[].class))).andReturn(10);
  expect(viewJarFile.read(anyObject(byte[].class))).andReturn(-1);
  fos.write(anyObject(byte[].class), eq(0), eq(10));
  fos.flush();
  fos.close();
  viewJarFile.closeEntry();
  viewJarFile.close();
  expect(classesDir.exists()).andReturn(true);
  expect(classesDir.toURI()).andReturn(new URI("file:./"));
  expect(libDir.exists()).andReturn(true);
  expect(libDir.listFiles()).andReturn(new File[]{fileEntry});
  expect(fileEntry.toURI()).andReturn(new URI("file:./"));
  replay(extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir, libDir, metaInfDir, viewJarFile,
      jarEntry, fos, configuration, viewDir, fileEntry, viewDAO);
  ViewExtractor viewExtractor = getViewExtractor(viewDefinition);
  viewExtractor.extractViewArchive(viewDefinition, viewArchive, archiveDir);
  verify(extractedArchiveDir, viewArchive, archiveDir, entryFile, classesDir, libDir, metaInfDir, viewJarFile,
      jarEntry, fos, configuration, viewDir, fileEntry, viewDAO);
}