def test_terminate_producers(): sim = Simulator(dict(), None) manager = Manager(sim) p1 = Producer.start("P1", manager) p2 = Producer.start("P2", manager) manager.register_producer(p1, "P1") manager.register_producer(p2, "P2") manager.terminate_producers() assert manager.producers == {}
def test_cancel(): sim = Simulator(dict(), None) manager = Manager(sim) producer = Producer("producer_id", manager) job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series()) consumer = Consumer.start(producers=[producer], job=job, manager=manager) schedule_object = dict(consumer=consumer, job=job) producer.schedule.append(schedule_object) assert (schedule_object in producer.schedule) producer.cancel(schedule_object) assert producer.schedule == [] consumer.stop()
def test_fulfill_contract(): sim = Simulator(dict(), None) manager = Manager(sim) producer = Producer("producer_id", manager) job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series()) consumer = Consumer.start(producers=[producer], job=job, manager=manager) schedule_object = dict(consumer=consumer, job=job) producer.schedule.append(schedule_object) contract = producer.create_contract(job) consumer.stop() assert producer.schedule == [schedule_object] producer.fulfill_contract(contract) assert producer.schedule == []
def test_optimize_fifty_fifty_negative(): sim = Simulator(dict(), None) man = Manager(sim) producer = Producer("id", man) producer.optimizer = Optimizer(producer, options=dict(algo="fifty_fifty")) producer.prediction = pd.Series(index=[0, 1], data=[0.0, 0.0]) for i in range(10): job = dict(consumer=None, job=Job("id" + str(i), 0, 0, pd.Series(index=[0, 1], data=[0.0, 1.0]))) producer.schedule.append(job) schedule_time, should_keep = producer.optimizer.optimize() if not should_keep[-1]: producer.schedule.pop() num_accepted = len(producer.schedule) assert 0 == num_accepted
def test_register_producer(): # Make a manager with no neighbourhood (not needed for testing) sim = Simulator(dict(), None) manager = Manager(sim) producer = Producer("id", manager) manager.register_producer("id", producer) assert producer in manager.producers
def test_create_contract(): sim = Simulator(dict(), None) manager = Manager(sim) producer = Producer("producer_id", manager) job = Job(est=0, lst=0, id="job_id", load_profile=pd.Series()) expected = dict(id='producer_id;job_id;0', time=0, time_of_agreement=0, load_profile=pd.Series(), job_id='job_id', producer_id='producer_id') actual = producer.create_contract(job) assert expected['id'] == actual['id'] assert expected['time'] == actual['time'] assert expected['time_of_agreement'] == actual['time_of_agreement'] assert expected['job_id'] == actual['job_id'] assert expected['producer_id'] == actual['producer_id']
def test_optimize_basinhopping(): sim = Simulator(dict(), None) man = Manager(sim) producer = Producer("id", man) job0 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0]))) job1 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0]))) job2 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0]))) job3 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0]))) job4 = dict(consumer=None, job=Job("id", 0, 500, pd.Series(index=[0, 60, 120], data=[0.0, 5.0, 10.0]))) producer.optimizer = Optimizer(producer, options=dict(algo="SLSQP", pen=1.0, tol=1.0, eps=0.01)) producer.schedule = [job0, job1, job2, job3, job4] producer.prediction = pd.Series(index=[0, 300, 600], data=[0.0, 25.0, 50.0]) schedule_time, should_keep = producer.optimizer.optimize() schedule = set([int(utils.round_to_nearest_60(x)) for x in schedule_time]) # Assert that we have at least one scheduled time. assert len(schedule) >= 1
def test_request_job_integration(): simulator = MockSimulator() manager = Manager(simulator, options=dict(algo="SLSQP")) Producer(id="p1", manager=manager) manager.new_producer("p1") prediction = pd.Series(index=[0, 3600, 7200], data=[0.0, 10.0, 20.0]) manager.send_new_prediction(prediction, manager.producers["p1"]) job = Job("j1", 0, 0, pd.Series(index=[0, 1800, 3600], data=[0.0, 2.5, 5.0])) manager.new_job(job) consumer = manager.consumers[0] consumer._actor.request_producer() manager.producers["p1"].stop() assert manager.producer_rankings["p1"] == 9
def test_update_power_profile(): sim = Simulator(dict(), None) manager = Manager(sim) producer = Producer("producer_id", manager) p1 = pd.Series(index=[0, 3600, 7200, 10800], data=[0.0, 1.0, 2.0, 3.0]) p2 = pd.Series(index=[7200, 10800, 14400, 18000], data=[5.0, 6.0, 7.0, 8.0]) expected1 = p1 expected2 = pd.Series(index=[0, 3600, 7200, 10800, 14400, 18000], data=[0.0, 1.0, 6.0, 7.0, 8.0, 9.0]) assert producer.prediction is None producer.update_power_profile(p1) assert producer.prediction.equals(expected1) producer.update_power_profile(p2) assert producer.prediction.equals(expected2)