예제 #1
0
    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)
예제 #2
0
    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)
예제 #3
0
    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])
예제 #4
0
    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")