def test_total_priority():
    count = 6
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30, "c": 0}
    # make sure that rounding leftover is added to b (highest priority)
    assert distribute_in_region(count, regions, region_priorities) == \
        {"a": 2, "b": 4, "c": 0}
def aws_resume_instances(all_instances, moz_instance_type, start_count,
                         regions, region_priorities, dryrun, slaveset):
    """Create up to `start_count` on-demand instances"""

    start_count_per_region = distribute_in_region(start_count, regions,
                                                  region_priorities)

    started = 0
    instance_config = load_instance_config(moz_instance_type)
    for region, count in start_count_per_region.iteritems():
        # TODO: check region limits
        ami = get_ami(region=region, moz_instance_type=moz_instance_type)
        for _ in range(count):
            try:
                r = do_request_instance(
                    region=region,
                    moz_instance_type=moz_instance_type,
                    price=None,
                    availability_zone=None,
                    ami=ami,
                    instance_config=instance_config,
                    instance_type=instance_config[region]["instance_type"],
                    slaveset=slaveset,
                    is_spot=False,
                    dryrun=dryrun,
                    all_instances=all_instances)
                if r:
                    started += 1
            except EC2ResponseError, e:
                # TODO: Handle e.code
                log.warn("On-demand failure: %s; giving up", e.code)
                log.warn("Cannot start", exc_info=True)
                break
            except Exception:
                log.warn("Cannot start", exc_info=True)
def test_total_priority():
    count = 6
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30, "c": 0}
    # make sure that rounding leftover is added to b (highest priority)
    assert distribute_in_region(count, regions, region_priorities) == \
        {"a": 2, "b": 4, "c": 0}
def aws_resume_instances(all_instances, moz_instance_type, start_count,
                         regions, region_priorities, dryrun):
    """Create up to `start_count` on-demand instances"""

    start_count_per_region = distribute_in_region(start_count, regions,
                                                  region_priorities)

    started = 0
    instance_config = load_instance_config(moz_instance_type)
    for region, count in start_count_per_region.iteritems():
        # TODO: check region limits
        ami = get_ami(region=region, moz_instance_type=moz_instance_type)
        for _ in range(count):
            try:
                r = do_request_instance(
                    region=region,
                    moz_instance_type=moz_instance_type,
                    price=None, availability_zone=None,
                    ami=ami, instance_config=instance_config,
                    instance_type=instance_config[region]["instance_type"],
                    is_spot=False, dryrun=dryrun,
                    all_instances=all_instances)
                if r:
                    started += 1
            except EC2ResponseError, e:
                # TODO: Handle e.code
                log.warn("On-demand failure: %s; giving up", e.code)
                log.warn("Cannot start", exc_info=True)
                break
            except Exception:
                log.warn("Cannot start", exc_info=True)
def test_total():
    count = 6
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30, "c": 0}
    assert sum(
        distribute_in_region(count, regions,
                             region_priorities).values()) == count
def test_zero():
    count = 50
    regions = ["a", "b", "c"]
    region_priorities = {"a": 2, "b": 3, "c": 0}
    assert distribute_in_region(count, regions, region_priorities) == {
        "a": 20,
        "b": 30,
        "c": 0
    }
def test_basic():
    count = 50
    regions = ["a", "b", "c"]
    region_priorities = {"a": 2, "b": 3, "c": 5}
    assert distribute_in_region(count, regions, region_priorities) == {
        "a": 10,
        "b": 15,
        "c": 25
    }
def test_zero():
    count = 50
    regions = ["a", "b", "c"]
    region_priorities = {"a": 2, "b": 3, "c": 0}
    assert distribute_in_region(
        count, regions, region_priorities) == {"a": 20, "b": 30, "c": 0}
def test_basic():
    count = 50
    regions = ["a", "b", "c"]
    region_priorities = {"a": 2, "b": 3, "c": 5}
    assert distribute_in_region(
        count, regions, region_priorities) == {"a": 10, "b": 15, "c": 25}
def test_intersection():
    count = 10
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "d": 30}
    assert distribute_in_region(count, regions, region_priorities) == {"a": 10}
def test_regions_not_in_region_priorities():
    count = 10
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30}
    assert distribute_in_region(count, regions, region_priorities) == \
        {"a": 4, "b": 6}
def test_total():
    count = 6
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30, "c": 0}
    assert sum(distribute_in_region(
        count, regions, region_priorities).values()) == count
def test_intersection():
    count = 10
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "d": 30}
    assert distribute_in_region(count, regions, region_priorities) == {"a": 10}
def test_regions_not_in_region_priorities():
    count = 10
    regions = ["a", "b", "c"]
    region_priorities = {"a": 20, "b": 30}
    assert distribute_in_region(count, regions, region_priorities) == \
        {"a": 4, "b": 6}