/** * Copyright (c) 2012, Thilo Planz. All rights reserved. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package v7db.files; import java.io.IOException; import java.util.Arrays; import java.util.List; import java.util.Random; import jmockmongo.MockMongoTestCaseSupport; import org.apache.commons.io.IOUtils; import org.bson.BasicBSONObject; import org.bson.types.ObjectId; import v7db.files.mongodb.V7File; import v7db.files.mongodb.V7GridFS; public class V7GridFSTest extends MockMongoTestCaseSupport { private V7GridFS gridFS; @Override protected void setUp() throws Exception { super.setUp(); // the root folder prepareMockData("test.v7files.files", new BasicBSONObject("_id", "root")); gridFS = new V7GridFS(getMongo().getDB("test")); } private void testSimpleScenario(byte[] fileData) throws IOException { // insert gridFS.addFile(fileData, "root", "test.dat", "text/plain"); V7File file = gridFS.getFile("root", "test.dat"); assertEquals("test.dat", file.getName()); assertEquals("text/plain", file.getContentType()); assertEquals(Arrays.toString(fileData), Arrays.toString(IOUtils .toByteArray(file.getInputStream()))); assertEquals(fileData.length, file.getLength().intValue()); assertEquals(1, file.getVersion()); assertEquals("root", file.getParentId()); V7File root = file.getParent(); assertEquals("root", root.getId()); List<V7File> files = root.getChildren(); assertEquals(1, files.size()); // update file.setContent("updated contents".getBytes(), "text/plain"); file = gridFS.getFile("root", "test.dat"); assertEquals("test.dat", file.getName()); assertEquals("text/plain", file.getContentType()); assertEquals("updated contents", IOUtils .toString(file.getInputStream())); // delete file.delete(); assertNull(gridFS.getFile("root", "test.dat")); } public void testSimpleScenario_ShortFile() throws IOException { testSimpleScenario("a short file".getBytes()); } public void testSimpleScenario_LongFile() throws IOException { byte[] bytes = new byte[1000000]; new Random(12345).nextBytes(bytes); testSimpleScenario(bytes); } public void testFolder() throws IOException { ObjectId folderId = gridFS.addFolder("root", "foolder"); V7File folder = gridFS.getFile("root", "foolder"); assertEquals("foolder", folder.getName()); assertEquals(folderId, folder.getId()); assertEquals(false, folder.hasContent()); V7File file = folder.createChild("a file in there".getBytes(), "file.txt", "text/plain"); assertEquals(folder.getId(), file.getParentId()); V7File checkFile = gridFS.getFile("root", "foolder", "file.txt"); assertEquals(file.getId(), checkFile.getId()); assertEquals(folder.getId(), checkFile.getParentId()); } }