/*******************************************************************************
* Copyright (c) 2012-2015 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.vfs.server.impl.memory;
import org.eclipse.che.api.vfs.server.VirtualFile;
import org.everrest.core.impl.ContainerResponse;
import org.everrest.core.tools.ByteArrayContainerResponseWriter;
import java.io.ByteArrayInputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
/** @author andrew00x */
public class ExportTest extends MemoryFileSystemTest {
private String exportFolderId;
private Set<String> expectedExportTestRootZipItems = new HashSet<>();
private Set<String> expectedExportFolderZipItems = new HashSet<>();
@Override
protected void setUp() throws Exception {
super.setUp();
String name = getClass().getName();
VirtualFile exportTestFolder = mountPoint.getRoot().createFolder(name);
// Create in exportTestFolder folder next files and folders:
// ----------------------------
// folder1/
// folder2/
// folder3/
// folder1/file1.txt
// folder1/folder12/
// folder2/file2.txt
// folder2/folder22/
// folder3/file3.txt
// folder3/folder32/
// folder1/folder12/file12.txt
// folder2/folder22/file22.txt
// folder3/folder32/file32.txt
// ----------------------------
VirtualFile folder1 = exportTestFolder.createFolder("folder1");
VirtualFile folder2 = exportTestFolder.createFolder("folder2");
VirtualFile folder3 = exportTestFolder.createFolder("folder3");
VirtualFile file1 = folder1.createFile("file1.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
VirtualFile file2 = folder2.createFile("file2.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
VirtualFile file3 = folder3.createFile("file3.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
VirtualFile folder12 = folder1.createFolder("folder12");
VirtualFile folder22 = folder2.createFolder("folder22");
VirtualFile folder32 = folder3.createFolder("folder32");
VirtualFile file12 = folder12.createFile("file12.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
VirtualFile file22 = folder22.createFile("file22.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
VirtualFile file32 = folder32.createFile("file32.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
expectedExportFolderZipItems.add("folder1/");
expectedExportFolderZipItems.add("folder2/");
expectedExportFolderZipItems.add("folder3/");
expectedExportFolderZipItems.add("folder1/file1.txt");
expectedExportFolderZipItems.add("folder1/folder12/");
expectedExportFolderZipItems.add("folder2/file2.txt");
expectedExportFolderZipItems.add("folder2/folder22/");
expectedExportFolderZipItems.add("folder3/file3.txt");
expectedExportFolderZipItems.add("folder3/folder32/");
expectedExportFolderZipItems.add("folder1/folder12/file12.txt");
expectedExportFolderZipItems.add("folder2/folder22/file22.txt");
expectedExportFolderZipItems.add("folder3/folder32/file32.txt");
exportFolderId = exportTestFolder.getId();
expectedExportTestRootZipItems.add(exportTestFolder.getName() + '/');
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder1/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder2/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder3/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder1/file1.txt");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder1/folder12/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder2/file2.txt");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder2/folder22/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder3/file3.txt");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder3/folder32/");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder1/folder12/file12.txt");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder2/folder22/file22.txt");
expectedExportTestRootZipItems.add(exportTestFolder.getName() + "/folder3/folder32/file32.txt");
}
public void testExportRootFolder() throws Exception {
ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter();
String path = SERVICE_URI + "export/" + mountPoint.getRoot().getId();
ContainerResponse response = launcher.service("GET", path, BASE_URI, null, null, writer, null);
assertEquals(200, response.getStatus());
assertEquals("application/zip", writer.getHeaders().getFirst("Content-Type"));
checkZipItems(expectedExportTestRootZipItems, new ZipInputStream(new ByteArrayInputStream(writer.getBody())));
}
public void testExportFile() throws Exception {
VirtualFile file = mountPoint.getVirtualFileById(exportFolderId)
.createFile("export_test_file.txt", "text/plain", new ByteArrayInputStream(DEFAULT_CONTENT_BYTES));
ByteArrayContainerResponseWriter writer = new ByteArrayContainerResponseWriter();
String path = SERVICE_URI + "export/" + file.getId();
ContainerResponse response = launcher.service("GET", path, BASE_URI, null, null, writer, null);
assertEquals(403, response.getStatus());
}
private void checkZipItems(Set<String> expected, ZipInputStream zip) throws Exception {
ZipEntry zipEntry;
while ((zipEntry = zip.getNextEntry()) != null) {
String name = zipEntry.getName();
/*if (!zipEntry.isDirectory())
{
byte[] buf = new byte[1024];
int i = zip.read(buf);
System.out.println(new String(buf, 0, i));
}*/
zip.closeEntry();
assertTrue("Not found " + name + " entry in zip. ", expected.remove(name));
}
zip.close();
assertTrue(expected.isEmpty());
}
}