/******************************************************************************* * 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.core.notification.EventSubscriber; import org.eclipse.che.api.vfs.server.VirtualFile; import org.eclipse.che.api.vfs.server.observation.CreateEvent; import org.eclipse.che.api.vfs.server.observation.VirtualFileEvent; import org.everrest.core.impl.ContainerResponse; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** @author andrew00x */ public class ImportTest extends MemoryFileSystemTest { private String importTestRootId; private byte[] zipFolder; private List<VirtualFileEvent> events; private EventSubscriber<CreateEvent> eventSubscriber = new EventSubscriber<CreateEvent>() { @Override public void onEvent(CreateEvent event) { events.add(event); } }; @Override protected void setUp() throws Exception { super.setUp(); String name = getClass().getName(); VirtualFile importTestRoot = mountPoint.getRoot().createFolder(name); importTestRootId = importTestRoot.getId(); ByteArrayOutputStream bout = new ByteArrayOutputStream(); ZipOutputStream zipOut = new ZipOutputStream(bout); zipOut.putNextEntry(new ZipEntry("folder1/")); zipOut.putNextEntry(new ZipEntry("folder2/")); zipOut.putNextEntry(new ZipEntry("folder3/")); zipOut.putNextEntry(new ZipEntry("folder1/file1.txt")); zipOut.write(DEFAULT_CONTENT_BYTES); zipOut.putNextEntry(new ZipEntry("folder2/file2.txt")); zipOut.write(DEFAULT_CONTENT_BYTES); zipOut.putNextEntry(new ZipEntry("folder3/file3.txt")); zipOut.write(DEFAULT_CONTENT_BYTES); zipOut.close(); zipFolder = bout.toByteArray(); events = new ArrayList<>(); mountPoint.getEventService().subscribe(eventSubscriber); } @Override public void tearDown() throws Exception { events.clear(); mountPoint.getEventService().unsubscribe(eventSubscriber); super.tearDown(); } public void testImportFolder() throws Exception { String path = SERVICE_URI + "import/" + importTestRootId; ContainerResponse response = launcher.service("POST", path, BASE_URI, null, zipFolder, null); assertEquals(204, response.getStatus()); VirtualFile parent = mountPoint.getVirtualFileById(importTestRootId); VirtualFile folder1 = parent.getChild("folder1"); assertNotNull(folder1); VirtualFile folder2 = parent.getChild("folder2"); assertNotNull(folder2); VirtualFile folder3 = parent.getChild("folder3"); assertNotNull(folder3); VirtualFile file1 = folder1.getChild("file1.txt"); assertNotNull(file1); checkFileContext(DEFAULT_CONTENT, "text/plain", file1); VirtualFile file2 = folder2.getChild("file2.txt"); assertNotNull(file2); checkFileContext(DEFAULT_CONTENT, "text/plain", file2); VirtualFile file3 = folder3.getChild("file3.txt"); assertNotNull(file3); checkFileContext(DEFAULT_CONTENT, "text/plain", file3); assertEquals(6, events.size()); List<VirtualFileEvent> _events = new ArrayList<>(events); for (Iterator<VirtualFileEvent> iterator = _events.iterator(); iterator.hasNext(); ) { VirtualFileEvent event = iterator.next(); if (event.getPath().equals(folder1.getPath()) || event.getPath().equals(folder2.getPath()) || event.getPath().equals(folder3.getPath()) || event.getPath().equals(file1.getPath()) || event.getPath().equals(file2.getPath()) || event.getPath().equals(file3.getPath())) { iterator.remove(); } else { fail("Unexpected event " + event.getType() + " : " + event.getPath()); } } assertEquals(0, _events.size()); } }