Remove dead code before migrating to single project setup
[aquarium] / logic / src / test / scala / gr / grnet / aquarium / store / mongodb / EventStoreTest.scala
1 /*
2  * Copyright 2011 GRNET S.A. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or
5  * without modification, are permitted provided that the following
6  * conditions are met:
7  *
8  *   1. Redistributions of source code must retain the above
9  *      copyright notice, this list of conditions and the following
10  *      disclaimer.
11  *
12  *   2. Redistributions in binary form must reproduce the above
13  *      copyright notice, this list of conditions and the following
14  *      disclaimer in the documentation and/or other materials
15  *      provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
18  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
24  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
25  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
27  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28  * POSSIBILITY OF SUCH DAMAGE.
29  *
30  * The views and conclusions contained in the software and
31  * documentation are those of the authors and should not be
32  * interpreted as representing official policies, either expressed
33  * or implied, of GRNET S.A.
34  */
35
36 package gr.grnet.aquarium.store.mongodb
37
38 import org.junit.Assert._
39 import org.junit.Assume._
40 import gr.grnet.aquarium.MasterConf._
41 import gr.grnet.aquarium.util.{RandomEventGenerator, TestMethods}
42 import gr.grnet.aquarium.LogicTestsAssumptions
43 import gr.grnet.aquarium.logic.events.ResourceEvent
44 import collection.mutable.ArrayBuffer
45 import org.junit.{After, Test, Before}
46
47
48
49 /**
50  * @author Georgios Gousios <gousiosg@gmail.com>
51  */
52 class EventStoreTest extends TestMethods with RandomEventGenerator {
53
54   @Before
55   def before() = {
56   }
57
58   @Test
59   def testStoreEvent() = {
60     assumeTrue(LogicTestsAssumptions.EnableStoreTests)
61
62     val event = nextResourceEvent()
63     val store = MasterConf.eventStore
64     val result = store.storeEvent(event)
65
66     assert(result.isJust)
67   }
68
69   @Test
70   def testFindEventById(): Unit = {
71     assumeTrue(LogicTestsAssumptions.EnableStoreTests)
72
73     val event = nextResourceEvent()
74     val store = MasterConf.eventStore
75
76     val result1 = store.storeEvent(event)
77     assert(result1.isJust)
78
79     val result2 = store.findEventById[ResourceEvent](event.id)
80     assertNotNone(result2)
81   }
82
83   @Test
84   def testfindEventsByUserId(): Unit = {
85     assumeTrue(LogicTestsAssumptions.EnableStoreTests)
86     val events = new ArrayBuffer[ResourceEvent]()
87     val store = MasterConf.eventStore
88
89     (1 to 100).foreach {
90       n =>
91         val e = nextResourceEvent
92         events += e
93         store.storeEvent(e)
94     }
95
96     val mostUsedId = events
97       .map{x => x.userId}
98       .groupBy(identity)
99       .mapValues(_.size)
100       .foldLeft((0L,0))((acc, kv) => if (kv._2 > acc._2) kv else acc)._1
101
102     val result = store.findEventsByUserId(mostUsedId)(None)
103     assertEquals(events.filter(p => p.userId.equals(mostUsedId)).size, result.size)
104   }
105
106   @Test
107   def testMultipleMongos = {
108     assumeTrue(LogicTestsAssumptions.EnableStoreTests)
109     val a = getMongo
110     val b = getMongo
111     //assertEquals(a.Connection.mongo.get.hashCode(), b.Connection.mongo.get.hashCode())
112   }
113
114   @After
115   def after() = {
116     assumeTrue(LogicTestsAssumptions.EnableStoreTests)
117     val a = getMongo
118
119     val col = a.mongo.getDB(
120       MasterConf.get(Keys.persistence_db)
121     ).getCollection(MongoDBStore.EVENTS_COLLECTION)
122
123     val res = col.find
124     while (res.hasNext)
125       col.remove(res.next)
126   }
127
128   private def getMongo = MasterConf.eventStore.asInstanceOf[MongoDBStore]
129 }