Project

General

Profile

root / branches / 1.1 / tests / test_slottable.py @ 847

1
from haizea.core.leases import Capacity
2
from haizea.core.scheduler.slottable import ResourceTuple, SlotTable, ResourceReservation
3
from sample_slottables import *
4
import haizea.common.constants as constants
5

    
6
def test_resource_tuple():
7
    multiinst = [(constants.RES_CPU,ResourceTuple.MULTI_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)]
8
    
9
    slottable = SlotTable(multiinst)
10
            
11
    c1_100 = Capacity([constants.RES_CPU,constants.RES_MEM])
12
    c1_100.set_quantity(constants.RES_CPU, 100)
13
    c1_100.set_quantity(constants.RES_MEM, 1024)
14
    c1_100 = slottable.create_resource_tuple_from_capacity(c1_100)
15

    
16
    c2_100 = Capacity([constants.RES_CPU,constants.RES_MEM])
17
    c2_100.set_ninstances(constants.RES_CPU, 2)
18
    c2_100.set_quantity_instance(constants.RES_CPU, 1, 100)
19
    c2_100.set_quantity_instance(constants.RES_CPU, 2, 100)
20
    c2_100.set_quantity(constants.RES_MEM, 1024)
21
    c2_100 = slottable.create_resource_tuple_from_capacity(c2_100)
22

    
23
    c1_50 = Capacity([constants.RES_CPU,constants.RES_MEM])
24
    c1_50.set_quantity(constants.RES_CPU, 50)
25
    c1_50.set_quantity(constants.RES_MEM, 1024)
26
    c1_50 = slottable.create_resource_tuple_from_capacity(c1_50)
27

    
28
    c2_50 = Capacity([constants.RES_CPU,constants.RES_MEM])
29
    c2_50.set_ninstances(constants.RES_CPU, 2)
30
    c2_50.set_quantity_instance(constants.RES_CPU, 1, 50)
31
    c2_50.set_quantity_instance(constants.RES_CPU, 2, 50)
32
    c2_50.set_quantity(constants.RES_MEM, 1024)
33
    c2_50 = slottable.create_resource_tuple_from_capacity(c2_50)
34

    
35
    assert c1_100.fits_in(c2_100)
36
    assert not c1_100.fits_in(c1_50)
37
    assert not c1_100.fits_in(c2_50)
38

    
39
    assert not c2_100.fits_in(c1_100)
40
    assert not c2_100.fits_in(c1_50)
41
    assert not c2_100.fits_in(c2_50)
42

    
43
    assert c1_50.fits_in(c1_100)
44
    assert c1_50.fits_in(c2_100)
45
    assert c1_50.fits_in(c2_50)
46

    
47
    assert c2_50.fits_in(c1_100)
48
    assert c2_50.fits_in(c2_100)
49
    assert not c2_50.fits_in(c1_50)
50

    
51
    empty = slottable.create_empty_resource_tuple()
52
    empty.incr(c2_100)
53
    assert empty._single_instance[0] == 1024
54
    assert empty._multi_instance[1] == [100,100]
55
    
56
    empty = slottable.create_empty_resource_tuple()
57
    empty.incr(c1_100)
58
    assert empty._single_instance[0] == 1024
59
    assert empty._multi_instance[1] == [100]
60
    empty.incr(c1_100)
61
    assert empty._single_instance[0] == 2048
62
    assert empty._multi_instance[1] == [100,100]
63

    
64
    empty = slottable.create_empty_resource_tuple()
65
    empty.incr(c1_100)
66
    assert empty._single_instance[0] == 1024
67
    assert empty._multi_instance[1] == [100]
68
    empty.incr(c1_50)
69
    assert empty._single_instance[0] == 2048
70
    assert empty._multi_instance[1] == [100,50]
71

    
72
    c1_100a = ResourceTuple.copy(c1_100)
73
    c1_100a.decr(c1_50)
74
    assert c1_100a._single_instance[0] == 0
75
    assert c1_100a._multi_instance[1] == [50]
76

    
77
    c2_100a = ResourceTuple.copy(c2_100)
78
    c2_100a._single_instance[0] = 2048
79
    c2_100a.decr(c1_50)
80
    
81
    assert c2_100a._single_instance[0] == 1024
82
    assert c2_100a._multi_instance[1] == [50,100]
83
    c2_100a.decr(c1_50)
84
    assert c2_100a._single_instance[0] == 0
85
    assert c2_100a._multi_instance[1] == [0,100]
86

    
87
    c2_100a = ResourceTuple.copy(c2_100)
88
    c2_100a._single_instance[0] = 2048
89
    c2_100a.decr(c2_50)
90
    assert c2_100a._single_instance[0] == 1024
91
    assert c2_100a._multi_instance[1] == [0,100]
92
    c2_100a.decr(c2_50)
93
    assert c2_100a._single_instance[0] == 0
94
    assert c2_100a._multi_instance[1] == [0,0]
95

    
96
def test_slottable():
97
    def assert_capacity(node, percent):
98
        assert node.capacity.get_by_type(constants.RES_CPU) == percent * 100
99
        assert node.capacity.get_by_type(constants.RES_MEM) == percent * 1024
100
        
101
    def reservations_1_assertions():
102
        assert not slottable.is_empty()
103
        nodes = slottable.get_availability(T1300)
104
        assert_capacity(nodes[1], 0.5)
105
        assert_capacity(nodes[2], 0.5)
106
        nodes = slottable.get_availability(T1330)
107
        assert_capacity(nodes[1], 1.0)
108
        assert_capacity(nodes[2], 1.0)
109
        
110
    def reservations_2_assertions():
111
        nodes = slottable.get_availability(T1300)
112
        assert_capacity(nodes[1], 0.5)
113
        assert_capacity(nodes[2], 0.5)
114
        rrs = slottable.get_reservations_at(T1300)
115
        assert len(rrs) == 1
116
        assert rrs[0] == rr1
117

    
118
        nodes = slottable.get_availability(T1330)
119
        assert_capacity(nodes[1], 0.75)
120
        assert_capacity(nodes[2], 0.5)
121
        rrs = slottable.get_reservations_at(T1330)
122
        assert len(rrs) == 1
123
        assert rrs[0] == rr2
124

    
125
        nodes = slottable.get_availability(T1400)
126
        assert_capacity(nodes[1], 1.0)
127
        assert_capacity(nodes[2], 1.0)
128
        rrs = slottable.get_reservations_at(T1400)
129
        assert len(rrs) == 0
130
        
131
    def reservations_3_assertions():
132
        nodes = slottable.get_availability(T1300)
133
        assert_capacity(nodes[1], 0.5)
134
        assert_capacity(nodes[2], 0.5)
135
        rrs = slottable.get_reservations_at(T1300)
136
        assert len(rrs) == 1
137
        assert rrs[0] == rr1
138

    
139
        nodes = slottable.get_availability(T1315)
140
        assert_capacity(nodes[1], 0.25)
141
        assert_capacity(nodes[2], 0.25)
142
        rrs = slottable.get_reservations_at(T1315)
143
        assert len(rrs) == 2
144
        assert rr1 in rrs and rr3 in rrs
145

    
146
        nodes = slottable.get_availability(T1330)
147
        assert_capacity(nodes[1], 0.5)
148
        assert_capacity(nodes[2], 0.25)
149
        rrs = slottable.get_reservations_at(T1330)
150
        assert len(rrs) == 2
151
        assert rr2 in rrs and rr3 in rrs
152

    
153
        nodes = slottable.get_availability(T1345)
154
        assert_capacity(nodes[1], 0.75)
155
        assert_capacity(nodes[2], 0.5)
156
        rrs = slottable.get_reservations_at(T1345)
157
        assert len(rrs) == 1
158
        assert rrs[0] == rr2
159

    
160
        nodes = slottable.get_availability(T1400)
161
        assert_capacity(nodes[1], 1.0)
162
        assert_capacity(nodes[2], 1.0)
163
        rrs = slottable.get_reservations_at(T1400)
164
        assert len(rrs) == 0
165

    
166
    def reservations_4_assertions():
167
        nodes = slottable.get_availability(T1300)
168
        assert_capacity(nodes[1], 0.5)
169
        assert_capacity(nodes[2], 0.5)
170
        rrs = slottable.get_reservations_at(T1300)
171
        assert len(rrs) == 1
172
        assert rrs[0] == rr1
173

    
174
        nodes = slottable.get_availability(T1315)
175
        assert_capacity(nodes[1], 0.25)
176
        assert_capacity(nodes[2], 0.25)
177
        rrs = slottable.get_reservations_at(T1315)
178
        assert len(rrs) == 2
179
        assert rr1 in rrs and rr3 in rrs
180

    
181
        nodes = slottable.get_availability(T1330)
182
        assert_capacity(nodes[1], 0)
183
        assert_capacity(nodes[2], 0)
184
        rrs = slottable.get_reservations_at(T1330)
185
        assert len(rrs) == 3
186
        assert rr4 in rrs and rr2 in rrs and rr3 in rrs
187

    
188
        nodes = slottable.get_availability(T1345)
189
        assert_capacity(nodes[1], 0.25)
190
        assert_capacity(nodes[2], 0.25)
191
        rrs = slottable.get_reservations_at(T1345)
192
        assert len(rrs) == 2
193
        assert rr2 in rrs and rr4 in rrs
194

    
195
        nodes = slottable.get_availability(T1400)
196
        assert_capacity(nodes[1], 0.5)
197
        assert_capacity(nodes[2], 0.75)
198
        rrs = slottable.get_reservations_at(T1400)
199
        assert len(rrs) == 1
200
        assert rrs[0] == rr4
201

    
202
        nodes = slottable.get_availability(T1415)
203
        assert_capacity(nodes[1], 1.0)
204
        assert_capacity(nodes[2], 1.0)
205
        rrs = slottable.get_reservations_at(T1415)
206
        assert len(rrs) == 0
207
    
208
    def reservations_5_assertions():
209
        nodes = slottable.get_availability(T1300)
210
        assert_capacity(nodes[1], 0.5)
211
        assert_capacity(nodes[2], 0.5)
212
        rrs = slottable.get_reservations_at(T1300)
213
        assert len(rrs) == 1
214
        assert rrs[0] == rr1
215

    
216
        nodes = slottable.get_availability(T1315)
217
        assert_capacity(nodes[1], 0.25)
218
        assert_capacity(nodes[2], 0.25)
219
        rrs = slottable.get_reservations_at(T1315)
220
        assert len(rrs) == 2
221
        assert set(rrs) == set([rr1,rr3])
222

    
223
        nodes = slottable.get_availability(T1330)
224
        assert_capacity(nodes[1], 0)
225
        assert_capacity(nodes[2], 0)
226
        rrs = slottable.get_reservations_at(T1330)
227
        assert len(rrs) == 3
228
        assert set(rrs) == set([rr2,rr3,rr4])
229

    
230
        nodes = slottable.get_availability(T1345)
231
        assert_capacity(nodes[1], 0.25)
232
        assert_capacity(nodes[2], 0)
233
        rrs = slottable.get_reservations_at(T1345)
234
        assert len(rrs) == 3
235
        assert set(rrs) == set([rr2,rr4,rr5])
236

    
237
        nodes = slottable.get_availability(T1400)
238
        assert_capacity(nodes[1], 0.5)
239
        assert_capacity(nodes[2], 0.5)
240
        rrs = slottable.get_reservations_at(T1400)
241
        assert len(rrs) == 2
242
        assert set(rrs) == set([rr4,rr5])
243

    
244
        nodes = slottable.get_availability(T1415)
245
        assert_capacity(nodes[1], 1.0)
246
        assert_capacity(nodes[2], 1.0)
247
        rrs = slottable.get_reservations_at(T1415)
248
        assert len(rrs) == 0
249
        
250
        rrs = slottable.get_reservations_starting_between(T1300, T1315)
251
        assert set(rrs) == set([rr1,rr3])
252
        rrs = slottable.get_reservations_starting_between(T1300, T1330)
253
        assert set(rrs) == set([rr1,rr2,rr3,rr4])
254
        rrs = slottable.get_reservations_starting_between(T1300, T1345)
255
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
256
        rrs = slottable.get_reservations_starting_between(T1315, T1330)
257
        assert set(rrs) == set([rr2,rr3,rr4])
258
        rrs = slottable.get_reservations_starting_between(T1315, T1345)
259
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
260
        rrs = slottable.get_reservations_starting_between(T1330, T1345)
261
        assert set(rrs) == set([rr2,rr4,rr5])
262
        rrs = slottable.get_reservations_starting_between(T1400, T1415)
263
        assert len(rrs) == 0
264
        rrs = slottable.get_reservations_starting_between(T1305, T1335)
265
        assert set(rrs) == set([rr3,rr2,rr4])
266

    
267
        rrs = slottable.get_reservations_ending_between(T1300, T1305)
268
        assert len(rrs) == 0
269
        rrs = slottable.get_reservations_ending_between(T1300, T1315)
270
        assert len(rrs) == 0
271
        rrs = slottable.get_reservations_ending_between(T1300, T1330)
272
        assert set(rrs) == set([rr1])
273
        rrs = slottable.get_reservations_ending_between(T1300, T1335)
274
        assert set(rrs) == set([rr1])
275
        rrs = slottable.get_reservations_ending_between(T1300, T1345)
276
        assert set(rrs) == set([rr1,rr3])
277
        rrs = slottable.get_reservations_ending_between(T1300, T1400)
278
        assert set(rrs) == set([rr1,rr2,rr3])
279
        rrs = slottable.get_reservations_ending_between(T1300, T1415)
280
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
281
        rrs = slottable.get_reservations_ending_between(T1305, T1315)
282
        assert len(rrs) == 0
283
        rrs = slottable.get_reservations_ending_between(T1305, T1330)
284
        assert set(rrs) == set([rr1])
285
        rrs = slottable.get_reservations_ending_between(T1305, T1335)
286
        assert set(rrs) == set([rr1])
287
        rrs = slottable.get_reservations_ending_between(T1305, T1345)
288
        assert set(rrs) == set([rr1,rr3])
289
        rrs = slottable.get_reservations_ending_between(T1305, T1400)
290
        assert set(rrs) == set([rr1,rr2,rr3])
291
        rrs = slottable.get_reservations_ending_between(T1305, T1415)
292
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
293
        rrs = slottable.get_reservations_ending_between(T1315, T1330)
294
        assert set(rrs) == set([rr1])
295
        rrs = slottable.get_reservations_ending_between(T1315, T1335)
296
        assert set(rrs) == set([rr1])
297
        rrs = slottable.get_reservations_ending_between(T1315, T1345)
298
        assert set(rrs) == set([rr1,rr3])
299
        rrs = slottable.get_reservations_ending_between(T1315, T1400)
300
        assert set(rrs) == set([rr1,rr2,rr3])
301
        rrs = slottable.get_reservations_ending_between(T1315, T1415)
302
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
303
        rrs = slottable.get_reservations_ending_between(T1330, T1335)
304
        assert set(rrs) == set([rr1])
305
        rrs = slottable.get_reservations_ending_between(T1330, T1345)
306
        assert set(rrs) == set([rr1,rr3])
307
        rrs = slottable.get_reservations_ending_between(T1330, T1400)
308
        assert set(rrs) == set([rr1,rr2,rr3])
309
        rrs = slottable.get_reservations_ending_between(T1330, T1415)
310
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
311
        rrs = slottable.get_reservations_ending_between(T1335, T1345)
312
        assert set(rrs) == set([rr3])
313
        rrs = slottable.get_reservations_ending_between(T1335, T1400)
314
        assert set(rrs) == set([rr2,rr3])
315
        rrs = slottable.get_reservations_ending_between(T1335, T1415)
316
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
317
        rrs = slottable.get_reservations_ending_between(T1345, T1400)
318
        assert set(rrs) == set([rr2,rr3])
319
        rrs = slottable.get_reservations_ending_between(T1345, T1415)
320
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
321
        rrs = slottable.get_reservations_ending_between(T1400, T1415)
322
        assert set(rrs) == set([rr2,rr4,rr5])
323
        
324
        rrs = slottable.get_reservations_starting_on_or_after(T1300)
325
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
326
        rrs = slottable.get_reservations_starting_on_or_after(T1305)
327
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
328
        rrs = slottable.get_reservations_starting_on_or_after(T1315)
329
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
330
        rrs = slottable.get_reservations_starting_on_or_after(T1330)
331
        assert set(rrs) == set([rr2,rr4,rr5])
332
        rrs = slottable.get_reservations_starting_on_or_after(T1335)
333
        assert set(rrs) == set([rr5])
334
        rrs = slottable.get_reservations_starting_on_or_after(T1345)
335
        assert set(rrs) == set([rr5])
336
        rrs = slottable.get_reservations_starting_on_or_after(T1400)
337
        assert len(rrs) == 0
338
        rrs = slottable.get_reservations_starting_on_or_after(T1415)
339
        assert len(rrs) == 0
340
        
341
        rrs = slottable.get_reservations_ending_on_or_after(T1300)
342
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
343
        rrs = slottable.get_reservations_ending_on_or_after(T1305)
344
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
345
        rrs = slottable.get_reservations_ending_on_or_after(T1315)
346
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
347
        rrs = slottable.get_reservations_ending_on_or_after(T1330)
348
        assert set(rrs) == set([rr1,rr2,rr3,rr4,rr5])
349
        rrs = slottable.get_reservations_ending_on_or_after(T1335)
350
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
351
        rrs = slottable.get_reservations_ending_on_or_after(T1345)
352
        assert set(rrs) == set([rr2,rr3,rr4,rr5])
353
        rrs = slottable.get_reservations_ending_on_or_after(T1400)
354
        assert set(rrs) == set([rr2,rr4,rr5])
355
        rrs = slottable.get_reservations_ending_on_or_after(T1415)
356
        assert set(rrs) == set([rr4,rr5])
357
        
358
        assert slottable.get_next_changepoint(T1255) == T1300
359
        assert slottable.get_next_changepoint(T1300) == T1315
360
        assert slottable.get_next_changepoint(T1315) == T1330
361
        assert slottable.get_next_changepoint(T1330) == T1345
362
        assert slottable.get_next_changepoint(T1335) == T1345
363
        assert slottable.get_next_changepoint(T1345) == T1400
364
        assert slottable.get_next_changepoint(T1400) == T1415
365
        assert slottable.get_next_changepoint(T1415) == None
366
        assert slottable.get_next_changepoint(T1420) == None
367
    
368
    slottable = SlotTable([(constants.RES_CPU,ResourceTuple.SINGLE_INSTANCE),(constants.RES_MEM,ResourceTuple.SINGLE_INSTANCE)])
369
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
370
    
371
    slottable.add_node(1, FULL_NODE)
372
    slottable.add_node(2, FULL_NODE)  
373
    
374
    assert slottable.get_total_capacity(constants.RES_CPU) == 200
375
    assert slottable.get_total_capacity(constants.RES_MEM) == 2048
376
    assert slottable.is_empty()
377

    
378
    res1 = {1: HALF_NODE, 2: HALF_NODE}
379
    rr1 = ResourceReservation(None, T1300, T1330, res1)
380
    slottable.add_reservation(rr1)
381
    reservations_1_assertions()
382

    
383
    res2 = {1: QRTR_NODE, 2: HALF_NODE}
384
    rr2 = ResourceReservation(None, T1330, T1400, res2)
385
    slottable.add_reservation(rr2)
386
    reservations_2_assertions()
387

    
388
    res3 = {1: QRTR_NODE, 2: QRTR_NODE}
389
    rr3 = ResourceReservation(None, T1315, T1345, res3)
390
    slottable.add_reservation(rr3)
391
    reservations_3_assertions()
392

    
393
    res4 = {1: HALF_NODE, 2: QRTR_NODE}
394
    rr4 = ResourceReservation(None, T1330, T1415, res4)
395
    slottable.add_reservation(rr4)
396
    reservations_4_assertions()
397

    
398
    res5 = {2: QRTR_NODE}
399
    rr5 = ResourceReservation(None, T1345, T1415, res5)
400
    slottable.add_reservation(rr5)
401
    reservations_5_assertions()
402

    
403
    slottable.remove_reservation(rr5)
404
    reservations_4_assertions()
405
    slottable.remove_reservation(rr4)
406
    reservations_3_assertions()
407
    slottable.remove_reservation(rr3)
408
    reservations_2_assertions()
409
    slottable.remove_reservation(rr2)
410
    reservations_1_assertions()
411
    slottable.remove_reservation(rr1)
412
    
413
    assert slottable.is_empty()
414
    
415
def test_availabilitywindow():
416
    def avail_node_assertions(time, avail, node_id, leases, next_cp):
417
        node = aw.changepoints[time].nodes[node_id]
418
        nleases = len(leases)
419
        assert(node.available == avail)
420
        
421
        assert(len(node.leases)==nleases)
422
        for l in leases:
423
            assert(l in node.leases)
424
        assert(len(node.available_if_preempting) == nleases)
425
        for l in leases:
426
            assert(node.available_if_preempting[l] == leases[l])
427
        assert(node.next_cp == next_cp)
428
        if next_cp != None:
429
            assert(node.next_nodeavail == aw.changepoints[next_cp].nodes[node_id])
430
    
431
    slottable, leases = sample_slottable_1()        
432
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
433
    
434
    lease1,lease2,lease3,lease4,lease5,lease6 = leases
435
    
436
    aw = slottable.get_availability_window(T1300)
437
    
438
    # TODO: Factor out data into a data structure so we can do more
439
    # elaborate assertions
440
    
441
    # 13:00
442
    avail_node_assertions(time = T1300, avail = EMPT_NODE, node_id = 1, 
443
                          leases = {lease6:FULL_NODE}, next_cp = T1305)
444
    avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 2, 
445
                          leases = {}, next_cp = T1315)
446
    avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 3, 
447
                          leases = {}, next_cp = T1330)
448
    avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 4, 
449
                          leases = {}, next_cp = T1330)
450

    
451

    
452
    # 13:05
453
    avail_node_assertions(time = T1305, avail = FULL_NODE, node_id = 1, 
454
                          leases = {}, next_cp = None)
455
    avail_node_assertions(time = T1305, avail = FULL_NODE, node_id = 2, 
456
                          leases = {}, next_cp = T1315)
457
    avail_node_assertions(time = T1305, avail = FULL_NODE, node_id = 3, 
458
                          leases = {}, next_cp = T1330)
459
    avail_node_assertions(time = T1305, avail = FULL_NODE, node_id = 4, 
460
                          leases = {}, next_cp = T1330)
461

    
462
    # 13:15
463
    avail_node_assertions(time = T1315, avail = FULL_NODE, node_id = 1, 
464
                          leases = {}, next_cp = None)
465
    avail_node_assertions(time = T1315, avail = HALF_NODE, node_id = 2, 
466
                          leases = {lease1:HALF_NODE}, next_cp = T1330)
467
    avail_node_assertions(time = T1315, avail = FULL_NODE, node_id = 3, 
468
                          leases = {}, next_cp = T1330)
469
    avail_node_assertions(time = T1315, avail = FULL_NODE, node_id = 4, 
470
                          leases = {}, next_cp = T1330)
471

    
472
    # 13:25
473
    avail_node_assertions(time = T1325, avail = FULL_NODE, node_id = 1, 
474
                          leases = {}, next_cp = None)
475
    avail_node_assertions(time = T1325, avail = HALF_NODE, node_id = 2, 
476
                          leases = {lease1:HALF_NODE}, next_cp = T1330)
477
    avail_node_assertions(time = T1325, avail = FULL_NODE, node_id = 3, 
478
                          leases = {}, next_cp = T1330)
479
    avail_node_assertions(time = T1325, avail = FULL_NODE, node_id = 4, 
480
                          leases = {}, next_cp = T1330)
481

    
482
    # 13:30
483
    avail_node_assertions(time = T1330, avail = FULL_NODE, node_id = 1, 
484
                          leases = {}, next_cp = None)
485
    avail_node_assertions(time = T1330, avail = EMPT_NODE, node_id = 2, 
486
                          leases = {lease2:FULL_NODE}, next_cp = T1345)
487
    avail_node_assertions(time = T1330, avail = EMPT_NODE, node_id = 3, 
488
                          leases = {lease2:FULL_NODE}, next_cp = T1345)
489
    avail_node_assertions(time = T1330, avail = EMPT_NODE, node_id = 4, 
490
                          leases = {lease3:FULL_NODE}, next_cp = T1400)
491

    
492
    # 13:45
493
    avail_node_assertions(time = T1345, avail = FULL_NODE, node_id = 1, 
494
                          leases = {}, next_cp = None)
495
    avail_node_assertions(time = T1345, avail = FULL_NODE, node_id = 2, 
496
                          leases = {}, next_cp = T1350)
497
    avail_node_assertions(time = T1345, avail = FULL_NODE, node_id = 3, 
498
                          leases = {}, next_cp = T1350)
499
    avail_node_assertions(time = T1345, avail = EMPT_NODE, node_id = 4, 
500
                          leases = {lease3:FULL_NODE}, next_cp = T1400)
501

    
502
    # 13:50
503
    avail_node_assertions(time = T1350, avail = FULL_NODE, node_id = 1, 
504
                          leases = {}, next_cp = None)
505
    avail_node_assertions(time = T1350, avail = HALF_NODE, node_id = 2, 
506
                          leases = {lease4:QRTR_NODE,lease5:QRTR_NODE}, next_cp = T1415)
507
    avail_node_assertions(time = T1350, avail = HALF_NODE, node_id = 3, 
508
                          leases = {lease4:HALF_NODE}, next_cp = T1415)
509
    avail_node_assertions(time = T1350, avail = EMPT_NODE, node_id = 4, 
510
                          leases = {lease3:FULL_NODE}, next_cp = T1400)
511

    
512
    # 13:55
513
    avail_node_assertions(time = T1355, avail = FULL_NODE, node_id = 1, 
514
                          leases = {}, next_cp = None)
515
    avail_node_assertions(time = T1355, avail = HALF_NODE, node_id = 2, 
516
                          leases = {lease4:QRTR_NODE,lease5:QRTR_NODE}, next_cp = T1415)
517
    avail_node_assertions(time = T1355, avail = HALF_NODE, node_id = 3, 
518
                          leases = {lease4:HALF_NODE}, next_cp = T1415)
519
    avail_node_assertions(time = T1355, avail = EMPT_NODE, node_id = 4, 
520
                          leases = {lease3:FULL_NODE}, next_cp = T1400)
521

    
522
    # 14:00
523
    avail_node_assertions(time = T1400, avail = FULL_NODE, node_id = 1, 
524
                          leases = {}, next_cp = None)
525
    avail_node_assertions(time = T1400, avail = HALF_NODE, node_id = 2, 
526
                          leases = {lease4:QRTR_NODE,lease5:QRTR_NODE}, next_cp = T1415)
527
    avail_node_assertions(time = T1400, avail = HALF_NODE, node_id = 3, 
528
                          leases = {lease4:HALF_NODE}, next_cp = T1415)
529
    avail_node_assertions(time = T1400, avail = FULL_NODE, node_id = 4, 
530
                          leases = {}, next_cp = None)
531

    
532
    # 14:15
533
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 1, 
534
                          leases = {}, next_cp = None)
535
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 2, 
536
                          leases = {}, next_cp = None)
537
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 3, 
538
                          leases = {}, next_cp = None)
539
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 4, 
540
                          leases = {}, next_cp = None)
541
    
542
    avail = aw.get_ongoing_availability(T1300, 1)
543
    assert(len(avail.avail_list)==1)
544
    assert(avail.avail_list[0].available == EMPT_NODE)
545
    assert(avail.avail_list[0].until     == None)
546

    
547
    avail = aw.get_ongoing_availability(T1300, 2)
548
    assert(len(avail.avail_list)==3)
549
    assert(avail.avail_list[0].available == FULL_NODE)
550
    assert(avail.avail_list[0].until     == T1315)
551
    assert(avail.avail_list[1].available == HALF_NODE)
552
    assert(avail.avail_list[1].until     == T1330)
553
    assert(avail.avail_list[2].available == EMPT_NODE)
554
    assert(avail.avail_list[2].until     == None)
555

    
556
    avail = aw.get_ongoing_availability(T1300, 3)
557
    assert(len(avail.avail_list)==2)
558
    assert(avail.avail_list[0].available == FULL_NODE)
559
    assert(avail.avail_list[0].until     == T1330)
560
    assert(avail.avail_list[1].available == EMPT_NODE)
561
    assert(avail.avail_list[1].until     == None)
562

    
563
    avail = aw.get_ongoing_availability(T1300, 4)
564
    assert(len(avail.avail_list)==2)
565
    assert(avail.avail_list[0].available == FULL_NODE)
566
    assert(avail.avail_list[0].until     == T1330)
567
    assert(avail.avail_list[1].available == EMPT_NODE)
568
    assert(avail.avail_list[1].until     == None)
569

    
570

    
571
    avail = aw.get_ongoing_availability(T1330, 1)
572
    assert(len(avail.avail_list)==1)
573
    assert(avail.avail_list[0].available == FULL_NODE)
574
    assert(avail.avail_list[0].until     == None)
575

    
576
    avail = aw.get_ongoing_availability(T1330, 2)
577
    assert(len(avail.avail_list)==1)
578
    assert(avail.avail_list[0].available == EMPT_NODE)
579
    assert(avail.avail_list[0].until     == None)
580

    
581
    avail = aw.get_ongoing_availability(T1330, 3)
582
    assert(len(avail.avail_list)==1)
583
    assert(avail.avail_list[0].available == EMPT_NODE)
584
    assert(avail.avail_list[0].until     == None)
585

    
586
    avail = aw.get_ongoing_availability(T1330, 4)
587
    assert(len(avail.avail_list)==1)
588
    assert(avail.avail_list[0].available == EMPT_NODE)
589
    assert(avail.avail_list[0].until     == None)
590
    
591
    
592
    avail = aw.get_ongoing_availability(T1345, 1)
593
    assert(len(avail.avail_list)==1)
594
    assert(avail.avail_list[0].available == FULL_NODE)
595
    assert(avail.avail_list[0].until     == None)
596

    
597
    avail = aw.get_ongoing_availability(T1345, 2)
598
    assert(len(avail.avail_list)==2)
599
    assert(avail.avail_list[0].available == FULL_NODE)
600
    assert(avail.avail_list[0].until     == T1350)
601
    assert(avail.avail_list[1].available == HALF_NODE)
602
    assert(avail.avail_list[1].until     == None)
603

    
604
    avail = aw.get_ongoing_availability(T1345, 3)
605
    assert(len(avail.avail_list)==2)
606
    assert(avail.avail_list[0].available == FULL_NODE)
607
    assert(avail.avail_list[0].until     == T1350)
608
    assert(avail.avail_list[1].available == HALF_NODE)
609
    assert(avail.avail_list[1].until     == None)
610

    
611
    avail = aw.get_ongoing_availability(T1345, 4)
612
    assert(len(avail.avail_list)==1)
613
    assert(avail.avail_list[0].available == EMPT_NODE)
614
    assert(avail.avail_list[0].until     == None)        
615

    
616
    slottable.awcache = None
617
    aw = slottable.get_availability_window(T1415)
618
    # 14:15
619
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 1, 
620
                          leases = {}, next_cp = None)
621
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 2, 
622
                          leases = {}, next_cp = None)
623
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 3, 
624
                          leases = {}, next_cp = None)
625
    avail_node_assertions(time = T1415, avail = FULL_NODE, node_id = 4, 
626
                          leases = {}, next_cp = None)
627

    
628
    avail = aw.get_ongoing_availability(T1415, 1)
629
    assert(len(avail.avail_list)==1)
630
    assert(avail.avail_list[0].available == FULL_NODE)
631
    assert(avail.avail_list[0].until     == None)
632
    
633
    avail = aw.get_ongoing_availability(T1415, 2)
634
    assert(len(avail.avail_list)==1)
635
    assert(avail.avail_list[0].available == FULL_NODE)
636
    assert(avail.avail_list[0].until     == None)
637
    
638
    avail = aw.get_ongoing_availability(T1415, 3)
639
    assert(len(avail.avail_list)==1)
640
    assert(avail.avail_list[0].available == FULL_NODE)
641
    assert(avail.avail_list[0].until     == None)
642
    
643
    avail = aw.get_ongoing_availability(T1415, 4)
644
    assert(len(avail.avail_list)==1)
645
    assert(avail.avail_list[0].available == FULL_NODE)
646
    assert(avail.avail_list[0].until     == None) 
647
    
648
    slottable, leases = sample_slottable_4()        
649
    FULL_NODE, HALF_NODE, QRTR_NODE, EMPT_NODE = create_capacities(slottable)
650
    
651
    lease1,lease2,lease3 = leases
652
    aw = slottable.get_availability_window(T1300)
653
    
654
    # 13:30
655
    avail_node_assertions(time = T1300, avail = FULL_NODE, node_id = 1, 
656
                          leases = {}, next_cp = T1315)
657
    avail_node_assertions(time = T1315, avail = HALF_NODE, node_id = 1, 
658
                          leases = {lease1:HALF_NODE}, next_cp = T1330)
659
    avail_node_assertions(time = T1330, avail = QRTR_NODE, node_id = 1, 
660
                          leases = {lease1:HALF_NODE,lease2:QRTR_NODE}, next_cp = T1415)
661
    
662
    avail = aw.get_ongoing_availability(T1300, 1)
663
    assert(len(avail.avail_list)==3)
664
    assert(avail.avail_list[0].available == FULL_NODE)
665
    assert(avail.avail_list[0].until     == T1315)
666
    assert(avail.avail_list[1].available == HALF_NODE)
667
    assert(avail.avail_list[1].until     == T1330)
668
    assert(avail.avail_list[2].available == QRTR_NODE)
669
    assert(avail.avail_list[2].until     == None)
670
    
671