def test_pod_state_is_created_if_not_found(self): db.session.delete(self.pod_state) CS = usage.ContainerState usage.update_states(self.event_started) for container in self.pod.get_dbconfig('containers'): cs = CS.query.filter( CS.container_name == container['name'], CS.kubes == container.get('kubes', 1), ).first() self.assertIsNotNone(cs) self.assertIsNotNone(cs.pod_state) self.assertLessEqual(cs.pod_state.start_time, cs.start_time) self.assertGreaterEqual(cs.pod_state.end_time, cs.end_time)
def _upd_state(pod_id, event, start_time=None, host=None): usage.update_states( { 'metadata': { 'labels': { 'kuberdock-pod-uid': pod_id } }, 'spec': { 'nodeName': host }, 'status': { 'startTime': start_time }, }, event)
def test_event_time_used(self): db.session.delete(self.pod_state) CS = usage.ContainerState event_time = datetime(2015, 11, 30, 12, 12, 12) usage.update_states(self.event_started, event_type='DELETED', event_time=event_time) self.assertEqual(self.pod.states[0].end_time, event_time) for container in self.pod.get_dbconfig('containers'): self.assertIsNotNone( CS.query.filter( CS.container_name == container['name'], CS.kubes == container.get('kubes', 1), CS.end_time == event_time, ).first())
def test_kubes_are_saved(self): """kubes == value from k8s-pod annotaions or value from database or 1""" CS = usage.ContainerState kubes_in_annotations = {self.containers[0]['name']: 7} event = self.event_started event['metadata']['annotations'] = { 'kuberdock-container-kubes': json.dumps(kubes_in_annotations), } usage.update_states(event) for container in self.pod.get_dbconfig('containers'): name = container['name'] self.assertIsNotNone( CS.query.filter( CS.container_name == name, CS.kubes == (kubes_in_annotations.get(name) or container.get('kubes', 1)), ).first())
def test_fix_overlap(self): CS = usage.ContainerState container_name = self.containers[0]['name'] usage.update_states(self.event_overlapped) cs1 = CS.query.filter(CS.container_name == container_name).first() self.assertIsNone(cs1.end_time) # fix_overlap if end_time is None usage.update_states(self.event_started) db.session.refresh(cs1) cs2 = CS.query.filter(CS.container_name == container_name, CS.start_time > cs1.start_time).first() self.assertEqual(cs1.end_time, cs2.start_time) # fix overlap if end_time > start_time of the next CS cs1.end_time = cs2.start_time + timedelta(seconds=1) db.session.commit() usage.update_states(self.event_started) db.session.refresh(cs1) self.assertEqual(cs1.end_time, cs2.start_time)
def test_pod_start_time_used(self): db.session.delete(self.pod_state) usage.update_states(self.event_started) event_time = datetime.strptime( self.event_started['status']['startTime'], '%Y-%m-%dT%H:%M:%SZ') self.assertEqual(self.pod.states[0].start_time, event_time)
def test_pod_state_is_not_created(self): self.assertEqual(len(self.pod.states), 1) usage.update_states(self.event_started) self.assertEqual(len(self.pod.states), 1)