20 lines
1.8 KiB
Python
20 lines
1.8 KiB
Python
import unittest
|
|
from decimal import Decimal
|
|
from analyze_resources import objects,quantity,analyze
|
|
class Checks(unittest.TestCase):
|
|
def test_adjacent(self):self.assertEqual(objects('{} {"requests":{"cpu":"10m"}}'),[{}, {'requests':{'cpu':'10m'}}])
|
|
def test_bad_stream(self):
|
|
for text in ['{} secret','{} []','null']:
|
|
with self.assertRaises(ValueError):objects(text)
|
|
def test_units(self):
|
|
self.assertEqual(quantity('1','cpu'),1000);self.assertEqual(quantity('25m','cpu'),25);self.assertEqual(quantity('32Mi','memory'),33554432)
|
|
def test_scheduler(self):
|
|
def row(phase='Running'):
|
|
return {'status.phase':phase,'spec.nodeName':'node','spec.containers[*].resources':'{"requests":{"cpu":"10m","memory":"1Mi"}} {"requests":{"cpu":"20m"}}','spec.initContainers[*].resources':{'requests':{'cpu':'100m'}},'spec.overhead':{'cpu':'2m'},'spec.initContainers[*].restartPolicy':None,'spec.resources':None}
|
|
supplement={'nodes':{'rows':[{'metadata.name':'node','status.addresses':[{'address':'92.205.62.239'}],'status.allocatable':{'cpu':'1','memory':'1Gi'}}]},'pods':{'rows':[row(),row('Succeeded')]}}
|
|
result=analyze({},supplement);self.assertEqual(Decimal(result['requested_cpu_m']),102);self.assertEqual(result['nonterminal_bound_pods'],1)
|
|
def test_restartable_conservative(self):
|
|
r={'status.phase':'Running','spec.nodeName':'n','spec.containers[*].resources':{'requests':{'cpu':'20m'}},'spec.initContainers[*].resources':{'requests':{'cpu':'100m'}},'spec.overhead':None,'spec.initContainers[*].restartPolicy':'Always','spec.resources':None}
|
|
s={'nodes':{'rows':[{'metadata.name':'n','status.addresses':[{'address':'92.205.62.239'}],'status.allocatable':{'cpu':'1','memory':'1Gi'}}]},'pods':{'rows':[r]}}
|
|
self.assertEqual(Decimal(analyze({},s)['requested_cpu_m']),120)
|
|
if __name__=='__main__':unittest.main()
|