ad7a70b9de93732697d9b8bb33d603a5812e7d13
[aquarium] / logic / 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 DSL with TestMethods {
44
45   var creditpolicy : DSLPolicy = _
46
47   def before = {
48     creditpolicy = parse(
49       getClass.getClassLoader.getResourceAsStream("policy.yaml")
50     )
51     assertNotNull(creditpolicy)
52   }
53
54   @Test
55   def testParsePolicies = {
56     before
57     assertEquals(creditpolicy.algorithms.size, 2)
58     assertEquals(creditpolicy.algorithms(0).algorithms.size,
59       creditpolicy.resources.size)
60     assertEquals(creditpolicy.algorithms(1).algorithms.size,
61       creditpolicy.resources.size)
62
63     val d = creditpolicy.findResource("diskspace").get
64     assertNotNone(d)
65
66     assertNotSame(creditpolicy.algorithms(0).algorithms(d),
67       creditpolicy.algorithms(1).algorithms(d))
68   }
69
70   @Test
71   def testParsePricelists = {
72     before
73     assertEquals(3, creditpolicy.pricelists.size)
74     assertNotNone(creditpolicy.findPriceList("everyTue2"))
75     val res = creditpolicy.findResource("diskspace")
76     assertNotNone(res)
77     assertEquals(0.05F,
78       creditpolicy.findPriceList("everyTue2").get.prices.get(res.get).get, 0.01F)
79   }
80
81   @Test
82   def testCronParse = {
83     var input = "12 12 * * *"
84     var output = parseCronString(input)
85     assertEquals(output, List(DSLTimeSpec(12, 12, -1, -1, -1)))
86
87     input = "12 4 3 jaN-ApR *"
88     output = parseCronString(input)
89     assertEquals(4, output.size)
90     assertEquals(output(2), DSLTimeSpec(12, 4, 3, 3, -1))
91
92     input = "12 4 3 jaN-ApR MOn-FRi"
93     output = parseCronString(input)
94     assertEquals(20, output.size)
95
96     input = "12 4 foo jaN-ApR *"
97     assertThrows[DSLParseException](parseCronString(input))
98
99     input = "12 4 * jaN,Mar,ApR 6"
100     output = parseCronString(input)
101     assertEquals(3, output.size)
102     assertEquals(DSLTimeSpec(12, 4, -1, 4, 6), output(2))
103
104     input = "@midnight"
105     assertThrows[DSLParseException](parseCronString(input))
106   }
107
108   @Test
109   def testSerialization = {
110     before
111   }
112 }