def test_recovery(self): # put some values in the store directly yield self.store.add_sensor(SensorItem("s1", 100, "s1v1")) yield self.store.add_sensor(SensorItem("s2", 100, "s2v1")) yield self.store.add_sensor(SensorItem("s1", 200, "s1v2")) d1 = dict(instance_id="i1", launch_id="l1", allocation="big", site="cleveland", state=InstanceStates.PENDING) yield self.store.add_instance(CoreInstance.from_dict(d1)) d2 = dict(instance_id="i2", launch_id="l2", allocation="big", site="cleveland", state=InstanceStates.PENDING) yield self.store.add_instance(CoreInstance.from_dict(d2)) d2['state'] = InstanceStates.RUNNING yield self.store.add_instance(CoreInstance.from_dict(d2)) # recovery should bring them into state yield self.state.recover() yield self.assertSensor("s1", 200, "s1v2") yield self.assertSensor("s2", 100, "s2v1") yield self.assertInstance("i1", launch_id="l1", allocation="big", site="cleveland", state=InstanceStates.PENDING) yield self.assertInstance("i2", launch_id="l2", allocation="big", site="cleveland", state=InstanceStates.RUNNING)
def new_kill(self, instanceid): state = InstanceStates.TERMINATING dct = dict(instance_id=instanceid, state=state, site="chicago", allocation="small", health=InstanceHealthState.UNKNOWN, launch_id="thelaunch") prev = self.instances.get(instanceid) if prev: item = CoreInstance.from_existing(prev, **dct) else: item = CoreInstance.from_dict(dct) self.instances[instanceid] = item self.instance_changes[instanceid].append(item)
def new_health(self, instance_id, is_ok=True): health = InstanceHealthState.OK if is_ok else InstanceHealthState.PROCESS_ERROR dct = dict(instance_id=instance_id, state=InstanceStates.RUNNING, site="chicago", allocation="small", health=health, launch_id="thelaunch") item = CoreInstance(**dct) self.instances[instance_id] = item self.instance_changes[instance_id].append(item)
def new_launch(self, new_instance_id, **extras): state = InstanceStates.RUNNING # magical instant-start dct = dict(instance_id=new_instance_id, state=state, site="chicago", allocation="small", health=InstanceHealthState.UNKNOWN, launch_id="thelaunch", public_ip=str(uuid.uuid4())) dct.update(extras) item = CoreInstance(**dct) self.instances[new_instance_id] = item self.instance_changes[new_instance_id].append(item)
def _instances_put_get(self, count): instances = [] instance_ids = set() for i in range(count): instance = CoreInstance(instance_id=str(uuid.uuid4()), launch_id=str(uuid.uuid4()), site="Chicago", allocation="small", state="Illinois") instances.append(instance) instance_ids.add(instance.instance_id) yield self.store.add_instance(instance) found_ids = yield self.store.get_instance_ids() found_ids = set(found_ids) log.debug("Put %d instances, got %d instance IDs", count, len(found_ids)) self.assertEqual(len(found_ids), len(instance_ids)) self.assertEqual(found_ids, instance_ids)
def new_fake_instance_state(self, instance_id, state, state_time, health=None, errors=None): if health is None: if instance_id in self.instances: health = self.instances[instance_id].health else: health = InstanceHealthState.UNKNOWN if errors is None and instance_id in self.instances: errors = self.instances[instance_id].errors self.instances[instance_id] = CoreInstance(instance_id=instance_id, launch_id="thelaunch", site="chicago", allocation="big", state=state, state_time=state_time, health=health, errors=errors)