Add keyword needed by guidelines 59/35459/4
authorJozef Behran <jbehran@cisco.com>
Fri, 26 Feb 2016 11:00:49 +0000 (12:00 +0100)
committerJozef Behran <jbehran@cisco.com>
Thu, 3 Mar 2016 14:21:55 +0000 (15:21 +0100)
The new variable naming guidelines [1] specify the use of a
new keyword named Utils.Set_User_Configurable_Variable_Default
when the default value for an user configurable variable
needs to be computed at the suite setup, either using
BuiltIn.Evaluate or even invoking other, more complex
keywords (that look around in the environment or do other
stuff like that).

[1] https://wiki.opendaylight.org/view/Integration/Test/Test_Code_Guidelines#User_configurable_variables

Change-Id: I08982748380c54b483383fbcd07a1b6ce617d1fb
Signed-off-by: Jozef Behran <jbehran@cisco.com>
csit/libraries/Utils.robot

index c95e9cbca47613aeb7d6bb1d8432343cd5ba5dcd..f4c1bdf9ed69cf67fd051525a7c9974791abf4b4 100644 (file)
@@ -420,3 +420,25 @@ Get Log File Name
     ...    log files if they happen to run in one job.
     ${name}=    BuiltIn.Evaluate    """${SUITE_NAME}""".replace(" ","-").replace("/","-").replace(".","-")
     [Return]    ${testtool}--${name}.log
+
+Set_User_Configurable_Variable_Default
+    [Arguments]    ${name}    ${value}
+    [Documentation]    Set a default value for an user configurable variable.
+    ...    This keyword is needed if your default value is calculated using
+    ...    a complex expression which needs BuiltIn.Evaluate or even more
+    ...    complex keywords. It sets the variable ${name} to ${value} but
+    ...    only if the variable ${name} was not set previously. This keyword
+    ...    is intended for user configurable variables which are supposed to
+    ...    be set only with pybot -v; calling this keyword on a variable
+    ...    that was already set by another keyword is a bug in the suite or
+    ...    resource trying to call this keyword.
+    # TODO: Figure out how to make the ${value} evaluation "lazy" (meaning
+    #    evaluating it only when the user did not set anything and thus the
+    #    default is needed). This might be needed to avoid potentially costly
+    #    keyword invocations when they are not needed. Currently no need for
+    #    this was identified, thus leaving it here as a TODO. Based on
+    #    comments the best approach would be to create another keyword that
+    #    expects a ScalarClosure in the place of ${value} and calls the
+    #    closure to get the value but only if the value is needed).
+    ${value}=    BuiltIn.Get_Variable_Value    \${${name}}    ${value}
+    BuiltIn.Set_Suite_Variable    \${${name}}    ${value}