Flat project hierarchy
[aquarium] / src / test / scala / gr / grnet / aquarium / logic / test / DSLTest.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.logic.test
37
38 import org.junit.Assert._
39 import org.junit.{Test}
40 import gr.grnet.aquarium.logic.accounting.dsl._
41 import gr.grnet.aquarium.util.TestMethods
42
43 class DSLTest extends DSLTestBase with TestMethods {
44
45   @Test
46   def testParsePolicies = {
47     before
48     assertEquals(creditpolicy.algorithms.size, 2)
49     assertEquals(creditpolicy.algorithms(0).algorithms.size,
50       creditpolicy.resources.size)
51     assertEquals(creditpolicy.algorithms(1).algorithms.size,
52       creditpolicy.resources.size)
53
54     val d = creditpolicy.findResource("diskspace").get
55     assertNotNone(d)
56
57     assertNotSame(creditpolicy.algorithms(0).algorithms(d),
58       creditpolicy.algorithms(1).algorithms(d))
59   }
60
61   @Test
62   def testParsePricelists = {
63     before
64     assertEquals(3, creditpolicy.pricelists.size)
65     assertNotNone(creditpolicy.findPriceList("everyTue2"))
66     val res = creditpolicy.findResource("diskspace")
67     assertNotNone(res)
68     assertEquals(0.05F,
69       creditpolicy.findPriceList("everyTue2").get.prices.get(res.get).get, 0.01F)
70   }
71
72   @Test
73   def testParseCreditPlans = {
74     before
75     assertEquals(2, creditpolicy.creditplans.size)
76     val plan = creditpolicy.findCreditPlan("every10days")
77     assertNotNone(plan)
78     assertEquals(20, plan.get.credits, 0.1F)
79     assertEquals(4, plan.get.at.size)
80   }
81
82   @Test
83   def testCronParse = {
84     var input = "12 12 * * *"
85     var output = parseCronString(input)
86     assertEquals(output, List(DSLTimeSpec(12, 12, -1, -1, -1)))
87
88     input = "12 4 3 jaN-ApR *"
89     output = parseCronString(input)
90     assertEquals(4, output.size)
91     assertEquals(output(2), DSLTimeSpec(12, 4, 3, 3, -1))
92
93     input = "12 4 3 jaN-ApR MOn-FRi"
94     output = parseCronString(input)
95     assertEquals(20, output.size)
96
97     input = "12 4 foo jaN-ApR *"
98     assertThrows[DSLParseException](parseCronString(input))
99
100     input = "12 4 * jaN,Mar,ApR 6"
101     output = parseCronString(input)
102     assertEquals(3, output.size)
103     assertEquals(DSLTimeSpec(12, 4, -1, 4, 6), output(2))
104
105     input = "@midnight"
106     assertThrows[DSLParseException](parseCronString(input))
107   }
108
109   @Test
110   def testSerialization = {
111     before
112   }
113 }