summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.coveragerc1
-rw-r--r--DEVELOP.md18
-rw-r--r--qtip/api/__main__.py11
-rw-r--r--qtip/api/controllers/__init__.py0
-rw-r--r--qtip/api/swagger/swagger.yaml9
-rw-r--r--qtip/cli/commands/cmd_metric.py7
-rw-r--r--qtip/cli/commands/cmd_plan.py7
-rw-r--r--qtip/cli/commands/cmd_qpi.py7
-rw-r--r--qtip/collector/parser/grep.py4
-rw-r--r--qtip/util/logger.py9
-rw-r--r--requirements.txt4
-rw-r--r--tests/unit/cli/cmd_metric_test.py10
-rw-r--r--tests/unit/cli/cmd_plan_test.py10
-rw-r--r--tests/unit/cli/cmd_qpi_test.py10
-rw-r--r--tests/unit/util/__init__.py0
-rw-r--r--tests/unit/util/logger_test.py48
-rw-r--r--tox.ini2
17 files changed, 144 insertions, 13 deletions
diff --git a/.coveragerc b/.coveragerc
index dfaeae60..0448da9d 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -4,6 +4,7 @@
branch = True
source =
qtip
+ tests
[report]
# Regexes for lines to exclude from consideration
diff --git a/DEVELOP.md b/DEVELOP.md
index 9ec3a93d..893efca4 100644
--- a/DEVELOP.md
+++ b/DEVELOP.md
@@ -28,6 +28,24 @@ $ pip install tox
$ tox
```
+Undering macOS system, it will happen to a **fatal error** when installing package `cryptograph`:
+
+```
+'openssl/opensslv.h' file not found
+#incude <openssl/opensslv.h>
+ ^
+1 error generated.
+```
+
+It is for macOS uses TLS instead of OpenSSL and no header files supported. The solutions is:
+``` code=bash
+# brew install openssl
+
+# #add these lines in to your shell profiles, such as .bash_profile, .zshrc
+# export CPPFLAGS='-I $openssl_install_path/include'
+# export LDFLAGS='-L $openssl_install_path/lib'
+```
+
## Architecture
**TODO**: move to design spec
diff --git a/qtip/api/__main__.py b/qtip/api/__main__.py
new file mode 100644
index 00000000..89298e6d
--- /dev/null
+++ b/qtip/api/__main__.py
@@ -0,0 +1,11 @@
+import connexion
+
+
+def main():
+ app = connexion.App(__name__, specification_dir='swagger/')
+ app.add_api('swagger.yaml', base_path='/v1.0')
+ app.run(host='0.0.0.0', port='5000')
+
+
+if __name__ == '__main__':
+ main()
diff --git a/qtip/api/controllers/__init__.py b/qtip/api/controllers/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/qtip/api/controllers/__init__.py
diff --git a/qtip/api/swagger/swagger.yaml b/qtip/api/swagger/swagger.yaml
new file mode 100644
index 00000000..97a9c352
--- /dev/null
+++ b/qtip/api/swagger/swagger.yaml
@@ -0,0 +1,9 @@
+swagger: '2.0'
+info:
+ title: QTIP-API
+consumes:
+ - application/json
+produces:
+ - application/json
+paths:
+ #TODO (akhil) add paths \ No newline at end of file
diff --git a/qtip/cli/commands/cmd_metric.py b/qtip/cli/commands/cmd_metric.py
index aa4df1f4..b6035e2d 100644
--- a/qtip/cli/commands/cmd_metric.py
+++ b/qtip/cli/commands/cmd_metric.py
@@ -27,6 +27,13 @@ def cmd_list(ctx):
pass
+@cli.command('show', help='View details of a Metric')
+@click.argument('name')
+@pass_context
+def show(ctx, name):
+ pass
+
+
@cli.command('run', help='Run tests to run Performance Metrics')
@click.argument('name')
@pass_context
diff --git a/qtip/cli/commands/cmd_plan.py b/qtip/cli/commands/cmd_plan.py
index c1dd7cf6..64c702d3 100644
--- a/qtip/cli/commands/cmd_plan.py
+++ b/qtip/cli/commands/cmd_plan.py
@@ -35,6 +35,13 @@ def list(ctx):
pass
+@cli.command('show', help='View details of a Plan')
+@click.argument('name')
+@pass_context
+def show(ctx, name):
+ pass
+
+
@cli.command('run', help='Execute a Plan')
@click.argument('name')
@pass_context
diff --git a/qtip/cli/commands/cmd_qpi.py b/qtip/cli/commands/cmd_qpi.py
index f33f0104..5fc9bec8 100644
--- a/qtip/cli/commands/cmd_qpi.py
+++ b/qtip/cli/commands/cmd_qpi.py
@@ -28,6 +28,13 @@ def cmd_list(ctx):
pass
+@cli.command('show', help='View details of a QPI')
+@click.argument('name')
+@pass_context
+def show(ctx, name):
+ pass
+
+
@cli.command('run', help='Run performance tests for the specified QPI')
@click.argument('name')
@pass_context
diff --git a/qtip/collector/parser/grep.py b/qtip/collector/parser/grep.py
index c3274bc2..f74ce403 100644
--- a/qtip/collector/parser/grep.py
+++ b/qtip/collector/parser/grep.py
@@ -29,6 +29,6 @@ class GrepParser(BaseActor):
def grep_in_file(filename, regex):
- with open(filename, "r") as outfile:
+ with open(filename, 'r') as f:
return filter(lambda x: x is not None,
- list(re.finditer(regex, outfile.read(), re.MULTILINE)))
+ re.finditer(regex, f.read(), re.MULTILINE))
diff --git a/qtip/util/logger.py b/qtip/util/logger.py
index d5e76a64..a7847dfc 100644
--- a/qtip/util/logger.py
+++ b/qtip/util/logger.py
@@ -27,11 +27,11 @@ import os
class Logger(object):
- file_path = '/var/log'
formatter = logging.Formatter('%(asctime)s - %(name)s - '
'%(levelname)s - %(message)s')
- def __init__(self, logger_name):
+ def __init__(self, logger_name, file_path=None):
+ self.file_path = '/var/log' if not file_path else file_path
IF_DEBUG = os.getenv('IF_DEBUG')
@@ -59,10 +59,9 @@ class Logger(object):
class QtipLogger(Logger):
- file_path = '{}/qtip/logs'.format(os.environ['HOME'])
-
def __init__(self, logger_name):
+ self.file_path = '{}/qtip/logs'.format(os.environ['HOME'])
if not os.path.exists(self.file_path):
os.makedirs(self.file_path)
- super(QtipLogger, self).__init__(logger_name)
+ super(QtipLogger, self).__init__(logger_name, self.file_path)
diff --git a/requirements.txt b/requirements.txt
index 4e4700c0..c51228f2 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,8 +1,6 @@
click
pyyaml
paramiko
-Flask
-Flask-RESTful
-flask-restful-swagger
+connexion
numpy
pbr
diff --git a/tests/unit/cli/cmd_metric_test.py b/tests/unit/cli/cmd_metric_test.py
index 239da96e..30f3448a 100644
--- a/tests/unit/cli/cmd_metric_test.py
+++ b/tests/unit/cli/cmd_metric_test.py
@@ -13,7 +13,7 @@ from click.testing import CliRunner
from qtip.cli.entry import cli
-@pytest.fixture()
+@pytest.fixture(scope="module")
def runner():
return CliRunner()
@@ -29,3 +29,11 @@ def test_run(runner):
result = runner.invoke(cli, ['metric', 'run'])
assert 'Missing argument "name".' in result.output
+
+
+def test_show(runner):
+ result = runner.invoke(cli, ['metric', 'show', 'fake-metric'])
+ assert result.output == ''
+
+ result = runner.invoke(cli, ['metric', 'show'])
+ assert 'Missing argument "name".' in result.output
diff --git a/tests/unit/cli/cmd_plan_test.py b/tests/unit/cli/cmd_plan_test.py
index 3ce3766e..1708c340 100644
--- a/tests/unit/cli/cmd_plan_test.py
+++ b/tests/unit/cli/cmd_plan_test.py
@@ -13,7 +13,7 @@ from click.testing import CliRunner
from qtip.cli.entry import cli
-@pytest.fixture()
+@pytest.fixture(scope="module")
def runner():
return CliRunner()
@@ -29,3 +29,11 @@ def test_run(runner):
result = runner.invoke(cli, ['plan', 'run'])
assert 'Missing argument "name".' in result.output
+
+
+def test_show(runner):
+ result = runner.invoke(cli, ['plan', 'show', 'fake-plan'])
+ assert result.output == ''
+
+ result = runner.invoke(cli, ['plan', 'show'])
+ assert 'Missing argument "name".' in result.output
diff --git a/tests/unit/cli/cmd_qpi_test.py b/tests/unit/cli/cmd_qpi_test.py
index 992c85d7..485d5462 100644
--- a/tests/unit/cli/cmd_qpi_test.py
+++ b/tests/unit/cli/cmd_qpi_test.py
@@ -13,7 +13,7 @@ from click.testing import CliRunner
from qtip.cli.entry import cli
-@pytest.fixture()
+@pytest.fixture(scope="module")
def runner():
return CliRunner()
@@ -29,3 +29,11 @@ def test_run(runner):
result = runner.invoke(cli, ['qpi', 'run'])
assert 'Missing argument "name".' in result.output
+
+
+def test_show(runner):
+ result = runner.invoke(cli, ['qpi', 'show', 'fake-qpi'])
+ assert result.output == ''
+
+ result = runner.invoke(cli, ['qpi', 'show'])
+ assert 'Missing argument "name".' in result.output
diff --git a/tests/unit/util/__init__.py b/tests/unit/util/__init__.py
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/tests/unit/util/__init__.py
diff --git a/tests/unit/util/logger_test.py b/tests/unit/util/logger_test.py
new file mode 100644
index 00000000..339b2bf6
--- /dev/null
+++ b/tests/unit/util/logger_test.py
@@ -0,0 +1,48 @@
+import pytest
+
+from qtip.util import logger
+
+MODULE = 'test_logger'
+ERROR_MSG = 'error level test'
+INFO_MSG = 'info level test'
+DEBUG_MSG = 'debug level test'
+
+
+@pytest.fixture()
+def env_home(monkeypatch, tmpdir):
+ monkeypatch.setenv('HOME', str(tmpdir))
+ return tmpdir
+
+
+@pytest.fixture()
+def logger_file(env_home):
+ return env_home.mkdir('qtip').mkdir('logs').join('{}.log'.format(MODULE))
+
+
+def console_expect_debug(content):
+ assert DEBUG_MSG in content
+
+
+def console_expect_nodebug(content):
+ assert DEBUG_MSG not in content
+
+
+@pytest.mark.parametrize('debug, console_expected', [
+ ('true', console_expect_debug),
+ ('false', console_expect_nodebug)])
+def test_logger(monkeypatch, capsys, logger_file, debug, console_expected):
+ monkeypatch.setenv('IF_DEBUG', debug)
+
+ log = logger.QtipLogger(MODULE).get
+ log.error(ERROR_MSG)
+ log.info(INFO_MSG)
+ log.debug(DEBUG_MSG)
+
+ file_print = logger_file.read()
+ assert ERROR_MSG in file_print
+ assert INFO_MSG in file_print
+ assert DEBUG_MSG in file_print
+
+ _, console_print = capsys.readouterr()
+
+ console_expected(console_print)
diff --git a/tox.ini b/tox.ini
index 40ecbbf6..935c4d71 100644
--- a/tox.ini
+++ b/tox.ini
@@ -17,6 +17,8 @@ commands=
py.test \
--basetemp={envtmpdir} \
--cov \
+ --cov-report term-missing \
+ --cov-report xml \
{posargs}
setenv=
HOME = {envtmpdir}