On Wed, Mar 26, 2014 at 2:25 PM, Hrvoje Ribicic <[email protected]> wrote:
> The RAPI should allow all the parameters of objects to be gotten and > set under the same names. This patch adds a test that checks if this is > the case by using the underlying opcode arguments. > > Signed-off-by: Hrvoje Ribicic <[email protected]> > --- > qa/qa_rapi.py | 61 > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 61 insertions(+) > > diff --git a/qa/qa_rapi.py b/qa/qa_rapi.py > index 1b76d2a..9708864 100644 > --- a/qa/qa_rapi.py > +++ b/qa/qa_rapi.py > @@ -162,6 +162,67 @@ def _DoTests(uris): > return results > > > +# pylint: disable=W0212 > +# Due to _SendRequest usage > +def _DoGetPutTests(get_uri, put_uri, opcode_params, exceptions=None, > + set_exceptions=None): > + """ Test if all params of an object can be retrieved, and set as well. > + > + @type get_uri: string > + @param get_uri: The URI from which information about the object can be > + retrieved. > + @type put_uri: string > + @param put_uri: The URI which can be used to modify the object. > + @type opcode_params: list of tuple > + @param opcode_params: The parameters of the underlying opcode, used to > + determine which parameters are actually present. > + @type exceptions: list of string or None > + @param exceptions: The parameters which have not been exposed and > should not > + be tested at all. > + @type set_exceptions: list of string or None > + @param set_exceptions: The parameters whose setting should not be > tested as a > + part of this test. > + > + """ > + > + assert get_uri.startswith("/") > + assert put_uri.startswith("/") > + > + # While these could be default values, any accidental assignment to them > + # would permanently change the default for all invokers - safety first. > I don't know if this comment is required as this is the default paradigm anyway. > + if exceptions is None: > + exceptions = [] > + if set_exceptions is None: > + set_exceptions = [] > + > + print "Testing get/put symmetry of %s and %s" % (get_uri, put_uri) > + > + # First we see if all parameters of the opcode are returned through RAPI > + params_of_interest = map(lambda x: x[0], opcode_params) > + > + info = _rapi_client._SendRequest("GET", get_uri, None, {}) > + > + missing_params = filter(lambda x: x not in info and x not in exceptions, > + params_of_interest) > + if missing_params: > + raise qa_error.Error("The parameters %s which can be set through the " > + "appropriate opcode are not present in the > response " > + "from %s" % (','.join(missing_params), get_uri)) > + > + print "GET successful at %s" % get_uri > + > + # Then if we can perform a set with the same values as received > + put_payload = {} > + for param in params_of_interest: > + if param not in exceptions and param not in set_exceptions: > + put_payload[param] = info[param] > + > + _rapi_client._SendRequest("PUT", put_uri, None, put_payload) > + > + print "PUT successful at %s" % put_uri > +# pylint: enable=W0212 > + > + > def _VerifyReturnsJob(data): > if not isinstance(data, int): > AssertMatch(data, r"^\d+$") > -- > 1.9.1.423.g4596e3a > > Rest LGTM, thanks. -- Thomas Thrainer | Software Engineer | [email protected] | Google Germany GmbH Dienerstr. 12 80331 München Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg Geschäftsführer: Graham Law, Christine Elizabeth Flores
