def test_instance_health2(self): i1 = Mock(instance_id="i1", state=InstanceStates.RUNNING, health=InstanceHealthState.OK) i2 = Mock(instance_id="i2", state=InstanceStates.RUNNING_FAILED, health=InstanceHealthState.OK) i3 = Mock(instance_id="i3", state=InstanceStates.RUNNING_FAILED, health=InstanceHealthState.MISSING) instances = dict(i1=i1, i2=i2, i3=i3) es = EngineState() es.instances = instances healthy = es.get_healthy_instances() self.assertEqual(healthy, [i1]) unhealthy = es.get_unhealthy_instances() self.assertTrue(i2 in unhealthy) self.assertTrue(i3 in unhealthy) self.assertEqual(2, len(unhealthy)) # Should not matter if health is present or not, it's RUNNING_FAILED i3.health = InstanceHealthState.MISSING unhealthy = es.get_unhealthy_instances() self.assertTrue(i2 in unhealthy) self.assertTrue(i3 in unhealthy)
def test_sensors(self): s1 = [SensorItem("s1", i, "v" + str(i)) for i in range(3)] s2 = [SensorItem("s2", i, "v" + str(i)) for i in range(5)] changes = {'s1' : s1, 's2' : s2} sensors = {'s1' : s1[-1], 's2' : s2[-1]} es = EngineState() es.sensor_changes = changes es.sensors = sensors self.assertEqual(es.get_sensor("s1").value, "v2") self.assertEqual(es.get_sensor("s2").value, "v4") self.assertEqual(es.get_sensor("s3"), None) #there is no s3 self.assertEqual(len(es.get_sensor_changes("s1")), 3) self.assertEqual(len(es.get_sensor_changes("s2")), 5) self.assertEqual(es.get_sensor_changes("s3"), []) all_changes = es.get_sensor_changes() for item in itertools.chain(s1, s2): self.assertIn(item, all_changes)
def test_instance_health(self): i1 = Mock(instance_id="i1", state=InstanceStates.RUNNING, health=InstanceHealthState.OK) i2 = Mock(instance_id="i2", state=InstanceStates.FAILED, health=InstanceHealthState.OK) i3 = Mock(instance_id="i3", state=InstanceStates.TERMINATED, health=InstanceHealthState.MISSING) instances = dict(i1=i1, i2=i2, i3=i3) es = EngineState() es.instances = instances healthy = es.get_healthy_instances() self.assertEqual(healthy, [i1]) unhealthy = es.get_unhealthy_instances() self.assertFalse(unhealthy) i1.health = InstanceHealthState.MISSING healthy = es.get_healthy_instances() self.assertFalse(healthy) unhealthy = es.get_unhealthy_instances() self.assertEqual(unhealthy, [i1])
def test_instances(self): i1 = [Mock(instance_id="i1", state=state) for state in (InstanceStates.REQUESTING, InstanceStates.REQUESTED, InstanceStates.PENDING, InstanceStates.RUNNING)] i2 = [Mock(instance_id="i2", state=state) for state in (InstanceStates.REQUESTING, InstanceStates.REQUESTED, InstanceStates.FAILED)] i3 = [Mock(instance_id="i3", state=state) for state in InstanceStates.REQUESTING, InstanceStates.PENDING] changes = dict(i1=i1, i2=i2, i3=i3) instances = dict(i1=i1[-1], i2=i2[-1], i3=i3[-1]) es = EngineState() es.instance_changes = changes es.instances = instances self.assertEqual(es.get_instance("i1").state, InstanceStates.RUNNING) self.assertEqual(es.get_instance("i2").state, InstanceStates.FAILED) self.assertEqual(es.get_instance("i3").state, InstanceStates.PENDING) self.assertEqual(es.get_instance("i4"), None) # there is no i4 self.assertEqual(len(es.get_instance_changes("i1")), 4) self.assertEqual(len(es.get_instance_changes("i2")), 3) self.assertEqual(len(es.get_instance_changes("i3")), 2) self.assertEqual(es.get_instance_changes("i4"), []) all_changes = es.get_instance_changes() changeset = set((change.instance_id, change.state) for change in all_changes) for item in itertools.chain(i1, i2, i3): self.assertIn((item.instance_id, item.state), changeset) failed = es.get_instances_by_state(InstanceStates.FAILED) self.assertEqual(len(failed), 1) self.assertEqual(failed[0].instance_id, "i2") self.assertEqual(failed[0].state, InstanceStates.FAILED) pending2running = es.get_instances_by_state(InstanceStates.PENDING, InstanceStates.RUNNING) self.assertEqual(len(pending2running), 2) ids = (pending2running[0].instance_id, pending2running[1].instance_id) self.assertIn("i1", ids) self.assertIn("i3", ids) pending = es.get_pending_instances() self.assertEqual(len(pending), 1) self.assertEqual(pending[0].instance_id, "i3")