import copy
import unittest
from tools.stream_benchmark_cpu import summarize_cpu


class CpuSummaryTest(unittest.TestCase):
    def test_missing_is_not_zero(self):
        self.assertIsNone(summarize_cpu([{}, {}], 100))

    def test_delta_and_pid_reuse(self):
        task = dict(start='100', name='python', role='child', cpu_ticks=100,
                    voluntary=10, involuntary=20, runtime_ns=100, runqueue_ns=200, slices=1)
        a = dict(resource=dict(cpu_us=1000000), cpu_detail=dict(at=10,ticks=100,overhead_ms=1,
            host_runqueue=2,truncated=False,schedstats_enabled=True,processes={'1':task},threads={'2':task}))
        b = copy.deepcopy(a);b['resource']['cpu_us']=6000000;b['cpu_detail']['at']=20
        b['cpu_detail']['processes']['1']['cpu_ticks']=300
        b['cpu_detail']['threads']['2']['cpu_ticks']=300
        out=summarize_cpu([a,b],50)
        self.assertEqual(.2,out['processes'][0]['cores'])
        self.assertEqual(.1,out['container_cpu_seconds_per_result'])
        b['cpu_detail']['processes']['1']['start']='200'
        self.assertEqual([],summarize_cpu([a,b],50)['processes'])
