9fe7030a12cfa2362759bb63d4fcb2698c479b7c
[aquarium] / src / test / scala / gr / grnet / aquarium / logic / test / DSLTimeFrameTest.scala
1 /*
2  * Copyright 2011-2012 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 package gr.grnet.aquarium.logic.test
36
37 import org.junit.Test
38 import gr.grnet.aquarium.logic.accounting.dsl.{Timeslot, DSLTimeFrameRepeat,DSLTimeFrame}
39 import gr.grnet.aquarium.util.TestMethods
40 import java.util.Date
41 import scala._
42 import scala.Some
43
44 /**
45 * Represents an effectivity timeframe.
46 *
47 * @author Prodromos Gerakios <pgerakios@grnet.gr>
48 /**/
49 class DSLTimeFrameTest extends DSLTestBase with TestMethods {
50
51   private def makeRepeat(startCron:String,endCron:String): DSLTimeFrameRepeat={
52     new DSLTimeFrameRepeat(List(),List(),startCron,endCron)
53   }
54
55   private def makeRepeats(l:List[(String,String)]):List[DSLTimeFrameRepeat]=
56     l.map {c=> val (a,b) = c ;  this.makeRepeat(a,b)}
57
58
59   private def makeFrame(from:Date,to:Date,l:List[(String,String)]): DSLTimeFrame = {
60     new DSLTimeFrame(from,Some(to),makeRepeats(l.toList))
61   }
62
63   private def intervals(from:Date,to:Date,l:List[(String,String)]):List[Timeslot]={
64     var f1 = makeFrame(from,to,l)
65     var i1 = f1.intervalsOf(Timeslot(from,to))
66     Console.err.println("Time slots: " + i1.size)
67     i1
68   }
69
70   @Test
71   def intervalsTest = {
72     val from1 =  new Date(1321621969000L) //Fri Nov 18 15:12:49 +0200 2011
73     val to1 =  new Date(1324214719000L)   //Sun Dec 18 15:25:19 +0200 2011
74     val specs1 = List(("33 12 * * *","33 13 * * *"))
75     assert(intervals(from1,to1,specs1).size == 30)
76
77
78     val from2 = new Date(1321621969000L) //Fri Nov 18 15:12:49 +0200 2011
79     val to2 =  new Date(1321795519000L) //Sun  Nov 20 15:25:19 +0200 2011
80     val specs2 =List(("33 12 * * *","33 13 * * *"))
81     assert(intervals(from2,to2,specs2).size == 2)
82
83     val from3 = new Date(1321621969000L) //Fri Nov 18 15:12:49 +0200 2011
84     val to3 =  new Date(1321795519000L) //Sun  Nov 20 15:25:19 +0200 2011
85     val specs3 = List(("33 12 * * *","33 13 * * *"),
86                      ("33 14 * * *","15 15 * * *"))
87     assert(intervals(from3,to3,specs3).size == 5)
88
89     //TODO: add timeslot contained in big timeslot
90   }
91 }  */