fantomongo / test /

//  Copyright 2010 Liam Staskawicz
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.

**  GridFSTest
class GridFSTest : MongoTest
  override Void setup()

  override Void teardown()
  Void testBasic()
    // TODO - GridFSFile.isValid requires computing the md5,
    // which requires the non-existent crpyto pod
    gfs := GridFS(db)
    verifyEq(0, gfs.fileList.count, "gridfs isn't empty starting test")
    f := gfs.createFile("tester1")
    data := "allo there"
    verifyEq(f.size, data.size)
    // verify(f.isValid) 
    bigfilepath := "/Users/liam/Documents/mtcode/fan/fantomongo/test/Ruckus.mp3"
    bigfile := File(Uri.fromStr(bigfilepath))
      throw Err("please update fantomongo/test/GridFSTest.testBasic() with a large file that exists on your machine")
    verify(bigfile.size > GridFS.DEFAULT_CHUNK_SIZE, "must be large enough to test multiple chunks")
    f2 := gfs.createFile("bigfiletest", bigfile.mimeType)
    verifyEq(bigfile.size, f2.size)
    // verify(f2.isValid)
    c := gfs.fileList
    verifyEq(2, c.count)
    c.each |o| {
      verify(o.keys.containsAll(["_id", "filename", "contentType", "length", "chunkSize", "uploadDate"]))
      // TODO - also check for md5 when implemented
    f3 := gfs.findOneByName("tester1")
    sb := Buf() // have to read to a Buf first since StrBuf won't allow writeBuf() on it
    sv := sb.readChars(sb.flip.size)
    path := bigfile.path.dup
    path[path.size - 1] = "ReadBack${}"
    leading := bigfile.uri.isPathAbs ? File.sep : "" // need to re-add the leading slash?
    readbackfile := File(Uri.fromStr("${leading}${path.join(File.sep)}"))
    verify(readbackfile.parent == bigfile.parent)
    fmp3 := gfs.findOneByName("bigfiletest")
    verifyEq(readbackfile.mimeType, bigfile.mimeType)
    verifyEq(readbackfile.size, bigfile.size)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.