package org.peerbox.app.manager.file; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.util.List; import org.apache.commons.io.FileUtils; import org.hive2hive.core.H2HJUnitTest; import org.hive2hive.core.api.interfaces.IH2HNode; import org.hive2hive.core.exceptions.NoPeerConnectionException; import org.hive2hive.core.exceptions.NoSessionException; import org.hive2hive.core.security.UserCredentials; import org.hive2hive.core.utils.FileTestUtil; import org.hive2hive.core.utils.NetworkTestUtil; import org.hive2hive.core.utils.helper.TestFileAgent; import org.hive2hive.processframework.exceptions.InvalidProcessStateException; import org.hive2hive.processframework.exceptions.ProcessExecutionException; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.peerbox.BaseJUnitTest; import org.peerbox.app.config.UserConfig; import org.peerbox.app.manager.node.INodeManager; public class FileManagerNetworkTest extends BaseJUnitTest { private final static int NETWORK_SIZE = 5; private static List<IH2HNode> network; private static UserCredentials userCredentials; private static File uploaderRoot; private static IH2HNode uploader; private static IH2HNode downloader; private INodeManager nodeManager; private IFileManager fileManager; @Before public void setup() throws NoPeerConnectionException, InvalidProcessStateException, ProcessExecutionException { // setup network network = NetworkTestUtil.createH2HNetwork(NETWORK_SIZE); // create some random user credentials userCredentials = H2HJUnitTest.generateRandomCredentials(); // register and login a user (peer 0) uploaderRoot = FileTestUtil.getTempDirectory(); uploader = network.get(0); uploader.getUserManager() .createRegisterProcess(userCredentials).execute(); uploader.getUserManager() .createLoginProcess(userCredentials, new TestFileAgent(uploaderRoot)).execute(); // other client to verify this File downloaderRoot = FileTestUtil.getTempDirectory(); downloader = network.get(1); downloader.getUserManager() .createLoginProcess(userCredentials, new TestFileAgent(downloaderRoot)).execute(); nodeManager = Mockito.mock(INodeManager.class); Mockito.stub(nodeManager.getNode()).toReturn(uploader); UserConfig userConfig = Mockito.mock(UserConfig.class); Mockito.stub(userConfig.getRootPath()).toReturn(uploaderRoot.toPath()); fileManager = new FileManager(nodeManager, userConfig); } @After public void teardown() { if (uploaderRoot != null) { FileUtils.deleteQuietly(uploaderRoot); } NetworkTestUtil.shutdownH2HNetwork(network); } @Test public void testExistsRemote() throws IOException, InvalidProcessStateException, ProcessExecutionException, NoPeerConnectionException, NoSessionException, IllegalArgumentException { Path toUpload = new File(uploaderRoot, "file.txt").toPath(); Files.write(toUpload, "testData".getBytes()); assertFalse(fileManager.existsRemote(toUpload)); fileManager.add(toUpload).execute(); assertTrue(fileManager.existsRemote(toUpload)); fileManager.delete(toUpload).execute(); assertFalse(fileManager.existsRemote(toUpload)); } }