On Mon, Apr 15, 2013 at 1:48 PM, Bernardo Dal Seno <[email protected]>wrote:

> Instance policies are changed and checked for changes.
>
> Signed-off-by: Bernardo Dal Seno <[email protected]>
> ---
>  qa/qa_group.py | 98
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++---
>  1 file changed, 94 insertions(+), 4 deletions(-)
>
> diff --git a/qa/qa_group.py b/qa/qa_group.py
> index 6fc0210..50675b9 100644
> --- a/qa/qa_group.py
> +++ b/qa/qa_group.py
> @@ -79,7 +79,74 @@ def TestGroupAddWithOptions():
>    AssertCommand(["gnt-group", "remove", group1])
>
>
> +def _GetGroupIPolicy(groupname):
> +  """Return the run-time values of the cluster-level instance policy.
> +
> +  @type groupname: string
> +  @param groupname: node group name
> +  @rtype: tuple
> +  @return: (policy, specs), where:
> +      - policy is a dictionary of the policy values, instance specs
> excluded
> +      - specs is dict of dict, specs[par][key] is a spec value, where key
> is
> +        "min" or "max"
> +
> +  """
> +  info = qa_utils.GetObjectInfo(["gnt-group", "info", groupname])
> +  assert len(info) == 1
> +  policy = info[0]["Instance policy"]
> +
> +  (ret_policy, ret_specs) = qa_utils.ParseIPolicy(policy)
> +
> +  # Sanity checks
> +  assert len(ret_specs) > 0
> +  good = all("min" in d and "max" in d
> +             for d in ret_specs.values())
> +  assert good, "Missing item in specs: %s" % ret_specs
> +  assert len(ret_policy) > 0
> +  return (ret_policy, ret_specs)
> +
> +
> +def _TestGroupSetISpecs(groupname, new_specs, fail=False,
> old_values=None):
> +  """Change instance specs on a group.
> +
> +  @type groupname: string
> +  @param groupname: group name
> +  @type new_specs: dict of dict
> +  @param new_specs: new_specs[par][key], where key is "min", "max",
> "std". It
> +      can be an empty dictionary.
> +  @type fail: bool
> +  @param fail: if the change is expected to fail
> +  @type old_values: tuple
> +  @param old_values: (old_policy, old_specs), as returned by
> +     L{_GetGroupIPolicy}
> +  @return: same as L{_GetGroupIPolicy}
> +
> +  """
> +  build_cmd = lambda opts: ["gnt-group", "modify"] + opts + [groupname]
> +  get_policy = lambda: _GetGroupIPolicy(groupname)
> +  return qa_utils.TestSetISpecs(new_specs, get_policy_fn=get_policy,
> +                                build_cmd_fn=build_cmd, fail=fail,
> +                                old_values=old_values)
> +
> +
>  def _TestGroupModifyISpecs(groupname):
> +  # This test is built on the assumption that the default ipolicy holds
> for
> +  # the node group under test
> +  old_values = _GetGroupIPolicy(groupname)
> +  mod_values = _TestGroupSetISpecs(groupname,
> +                                   dict((p, {"min": 4, "max": 4})
> +                                        for p in
> constants.ISPECS_PARAMETERS),
> +                                   old_values=old_values)
> +  for par in constants.ISPECS_PARAMETERS:
> +    # First make sure that the test works with good values
> +    mod_values = _TestGroupSetISpecs(groupname, {par: {"min": 8, "max":
> 8}},
> +                                     old_values=mod_values)
> +    _TestGroupSetISpecs(groupname, {par: {"min": 8, "max": 4}},
> +                        fail=True, old_values=mod_values)
> +  AssertCommand(["gnt-group", "modify", "--ipolicy-bounds-specs",
> "default",
> +                 groupname])
> +  AssertEqual(_GetGroupIPolicy(groupname), old_values)
> +
>    # Get the ipolicy command (from the cluster config)
>    mnode = qa_config.GetMasterNode()
>    addcmd = GetCommandOutput(mnode.primary, utils.ShellQuoteArgs([
> @@ -103,10 +170,33 @@ def _TestGroupModifyISpecs(groupname):
>
>  def _TestGroupModifyIPolicy(groupname):
>    _TestGroupModifyISpecs(groupname)
> -  AssertCommand(["gnt-group", "modify", "--ipolicy-vcpu-ratio",
> -                 "3.5", groupname])
> -  AssertCommand(["gnt-group", "modify", "--ipolicy-vcpu-ratio",
> -                 "default", groupname])
> +
> +  # We assume that the default ipolicy holds
> +  (old_policy, old_specs) = _GetGroupIPolicy(groupname)
> +  for (par, setval, iname, expval) in [
> +    ("vcpu-ratio", 1.5, None, 1.5),
> +    ("spindle-ratio", 1.5, None, 1.5),
> +    ("disk-templates", constants.DT_PLAIN,
> +     "enabled disk templates", constants.DT_PLAIN)
> +    ]:
> +    if not iname:
> +      iname = par
> +    build_cmdline = lambda val: ["gnt-group", "modify", "--ipolicy-" +
> par,
> +                                 str(val), groupname]
> +
> +    AssertCommand(build_cmdline(setval))
> +    (new_policy, new_specs) = _GetGroupIPolicy(groupname)
> +    AssertEqual(new_specs, old_specs)
> +    for (p, val) in new_policy.items():
> +      if p == iname:
> +        AssertEqual(val, expval)
> +      else:
> +        AssertEqual(val, old_policy[p])
> +
> +    AssertCommand(build_cmdline("default"))
> +    (new_policy, new_specs) = _GetGroupIPolicy(groupname)
> +    AssertEqual(new_specs, old_specs)
> +    AssertEqual(new_policy, old_policy)
>
>
>  def TestGroupModify():
> --
> 1.8.1.3
>
>
LGTM, thanks

Reply via email to