diff --git a/kernel/src/test/scala/MongoStorageSpec.scala b/kernel/src/test/scala/MongoStorageSpec.scala new file mode 100644 index 0000000000..921248620e --- /dev/null +++ b/kernel/src/test/scala/MongoStorageSpec.scala @@ -0,0 +1,122 @@ +package se.scalablesolutions.akka.kernel.state + +import junit.framework.TestCase + +import org.junit.{Test, Before} +import org.junit.Assert._ + +class MongoStorageSpec extends TestCase { + + val changeSet = new scala.collection.mutable.ArrayBuffer[AnyRef] + + override def setUp = { + MongoStorage.coll.drop + } + + @Test + def testVectorInsertForTransactionId = { + changeSet += "debasish" // string + changeSet += List(1, 2, 3) // Scala List + val l = new java.util.ArrayList[Int] // Java List + l.add(100) + l.add(200) + changeSet += l + MongoStorage.insertVectorStorageEntriesFor("U-A1", changeSet.toList) + assertEquals( + 3, + MongoStorage.getVectorStorageSizeFor("U-A1")) + changeSet.clear + + // changeSet should be reinitialized + changeSet += List(12, 23, 45) + changeSet += "maulindu" + MongoStorage.insertVectorStorageEntriesFor("U-A1", changeSet.toList) + assertEquals( + 5, + MongoStorage.getVectorStorageSizeFor("U-A1")) + + // add more to the same changeSet + changeSet += "ramanendu" + changeSet += Map(1 -> "dg", 2 -> "mc") + + // add for a diff transaction + MongoStorage.insertVectorStorageEntriesFor("U-A2", changeSet.toList) + assertEquals( + 4, + MongoStorage.getVectorStorageSizeFor("U-A2")) + + // previous transaction change set should remain same + assertEquals( + 5, + MongoStorage.getVectorStorageSizeFor("U-A1")) + + // test single element entry + MongoStorage.insertVectorStorageEntryFor("U-A1", Map(1->1, 2->4, 3->9)) + assertEquals( + 6, + MongoStorage.getVectorStorageSizeFor("U-A1")) + } + + @Test + def testVectorFetchForKeys = { + + // initially everything 0 + assertEquals( + 0, + MongoStorage.getVectorStorageSizeFor("U-A2")) + + assertEquals( + 0, + MongoStorage.getVectorStorageSizeFor("U-A1")) + + // get some stuff + changeSet += "debasish" + changeSet += List(12, 13, 14) + MongoStorage.insertVectorStorageEntriesFor("U-A1", changeSet.toList) + + assertEquals( + 2, + MongoStorage.getVectorStorageSizeFor("U-A1")) + + assertEquals( + "debasish", + MongoStorage.getVectorStorageEntryFor("U-A1", 0).asInstanceOf[String]) + + assertEquals( + List(12, 13, 14), + MongoStorage.getVectorStorageEntryFor("U-A1", 1).asInstanceOf[List[Int]]) + + changeSet.clear + changeSet += Map(1->1, 2->4, 3->9) + changeSet += BigInt(2310) + val l = new java.util.ArrayList[Int] + l.add(100) + l.add(200) + l.add(300) + changeSet += l + MongoStorage.insertVectorStorageEntriesFor("U-A1", changeSet.toList) + + assertEquals( + 5, + MongoStorage.getVectorStorageSizeFor("U-A1")) + + val r = + MongoStorage.getVectorStorageRangeFor("U-A1", Some(1), None, 3) + + assertEquals(3, r.size) + assertEquals(List(12, 13, 14), r(0).asInstanceOf[List[Int]]) + } + + @Test + def testVectorFetchForNonExistentKeys = { + try { + MongoStorage.getVectorStorageEntryFor("U-A1", 1) + fail("should throw an exception") + } catch {case e: Predef.NoSuchElementException => {}} + + try { + MongoStorage.getVectorStorageRangeFor("U-A1", Some(2), None, 12) + fail("should throw an exception") + } catch {case e: Predef.NoSuchElementException => {}} + } +}