X-Git-Url: https://gerrit.akraino.org/r/gitweb?p=ta%2Fcloudtaf.git;a=blobdiff_plain;f=libraries%2Fopenstackcli%2Fcliwrapperbase.py;fp=libraries%2Fopenstackcli%2Fcliwrapperbase.py;h=36e046f93e00d82bf9214221a2aff1b57d9b4bd4;hp=0000000000000000000000000000000000000000;hb=d448b9388fd9cb3732e35996b98f493a5a5921d4;hpb=07c5f13d2429236a603c867e09c4cc3b42e75826 diff --git a/libraries/openstackcli/cliwrapperbase.py b/libraries/openstackcli/cliwrapperbase.py new file mode 100644 index 0000000..36e046f --- /dev/null +++ b/libraries/openstackcli/cliwrapperbase.py @@ -0,0 +1,101 @@ +# Copyright 2019 Nokia +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import abc +import six + + +@six.add_metaclass(abc.ABCMeta) +class CliWrapperBase(object): + """Test class base for CLI (openstackcli). + """ + def __init__(self, clicls): + self._cli = clicls() + self._remotesession = None + self._exec_func = None + self._expected_cmd_postfix = '' + + @property + def cli(self): + return self._cli + + def set_remotesession(self, remotesession): + """Set *RemoteSession* mock class instance. + """ + self._remotesession = remotesession + + @property + def remotesession(self): + return self._remotesession + + def set_expected_cmd_postfix(self, expected_cmd_postfix): + """Set expected cmd postfix for *RemoteSession* *exec_func* call. + """ + self._expected_cmd_postfix = expected_cmd_postfix + + def set_exec_func_and_return_value(self, exec_func, return_value): + """Set expected *RunnerSession* execution function and + set mock return value for this call. + """ + self._exec_func = exec_func + self._exec_func.return_value = return_value + + def run_with_verify(self, run_method, cmd): + """Run *run_method* of CLI with *cmd* and *_target_kwargs* kwargs. Then + verify the *RemoteSession* *_exec_func* call. + + Return: + *run_method* return value. + """ + ret = run_method(cmd, **self._target_kwargs) + self._exec_func.assert_called_once_with( + self._get_expected_cmd(cmd + self._expected_cmd_postfix), + target=self._expected_target) + return ret + + @abc.abstractproperty + def _expected_target(self): + """Return expected target for RemoteSession call. + """ + + def _get_expected_cmd(self, cmd): + return '{pre_cmd}{clistr}{expected_cmd_args}{cmd}'.format( + pre_cmd=self._pre_cmd, + clistr=self._clistr, + expected_cmd_args=self._expected_cmd_args, + cmd=cmd) + + @property + def _clistr(self): + n = self._cli.__class__.__name__ + return '' if n == 'Runner' else n.lower() + + @property + def _pre_cmd(self): + return '' + + @abc.abstractproperty + def _target_kwargs(self): + """Return target kwargs for *RemoteSession* method call. + """ + + @abc.abstractproperty + def _expected_cmd_args(self): + """Return args string after cli. + """ + + def initialize(self): + """Initialize CLI with mock RemoteSession instance *remotesession*. + """ + self._cli.initialize(self.remotesession)