Browse Source

Introduce unit tests structure for tripleo-ansible filters

Change-Id: Ie2fea14d2cbfb2c0b78cdc3064df0a558fa28a4c
tags/1.1.0
Emilien Macchi 7 months ago
parent
commit
f90a6d42b3
12 changed files with 299 additions and 3 deletions
  1. +4
    -0
      .gitignore
  2. +3
    -0
      .stestr.conf
  3. +1
    -0
      ansible-requirements.txt
  4. +3
    -0
      test-requirements.txt
  5. +7
    -2
      tox.ini
  6. +1
    -1
      tripleo_ansible/ansible_plugins/filter/helpers.py
  7. +0
    -0
      tripleo_ansible/tests/__init__.py
  8. +21
    -0
      tripleo_ansible/tests/base.py
  9. +0
    -0
      tripleo_ansible/tests/plugins/__init__.py
  10. +0
    -0
      tripleo_ansible/tests/plugins/filter/__init__.py
  11. +258
    -0
      tripleo_ansible/tests/plugins/filter/test_helpers.py
  12. +1
    -0
      zuul.d/layout.yaml

+ 4
- 0
.gitignore View File

@@ -11,6 +11,10 @@ cover
nosetests.xml
.testrepository
.venv
.stestr
tripleo_ansible.egg-info/
__pycache__
build

# Editors
*~


+ 3
- 0
.stestr.conf View File

@@ -0,0 +1,3 @@
[DEFAULT]
test_path=${TEST_PATH:-./tripleo_ansible/tests/}
top_dir=./

+ 1
- 0
ansible-requirements.txt View File

@@ -0,0 +1 @@
ansible>=2.8

+ 3
- 0
test-requirements.txt View File

@@ -1,2 +1,5 @@
pre-commit # MIT
netaddr # BSD
mock>=2.0.0 # BSD
stestr>=2.0.0 # Apache-2.0
oslotest>=3.2.0 # Apache-2.0

+ 7
- 2
tox.ini View File

@@ -26,8 +26,13 @@ setenv =
PYTHONWARNINGS=ignore:DEPRECATION::pip._internal.cli.base_command,ignore::UserWarning
PIP_DISABLE_PIP_VERSION_CHECK=1
sitepackages = True
deps = -r {toxinidir}/test-requirements.txt
whitelist_externals = bash
deps =
-r {toxinidir}/test-requirements.txt
-r {toxinidir}/ansible-requirements.txt
commands = stestr run {posargs}
whitelist_externals =
bash
tox

[testenv:bindep]
# Do not install any requirements. We want this to be fast and work even if


+ 1
- 1
tripleo_ansible/ansible_plugins/filter/helpers.py View File

@@ -30,7 +30,7 @@ class FilterModule(object):
'list_of_keys': self.list_of_keys
}

def subsort(self, dict_to_sort, attribute, null_value=None):
def subsort(self, dict_to_sort, attribute, null_value=0):
"""Sort a hash from a sub-element.

This filter will return an dictionary ordered by the attribute


+ 0
- 0
tripleo_ansible/tests/__init__.py View File


+ 21
- 0
tripleo_ansible/tests/base.py View File

@@ -0,0 +1,21 @@
# Copyright 2019 Red Hat, Inc.
# All Rights Reserved.
#
# 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.

from oslotest import base


class TestCase(base.BaseTestCase):

"""Test case base class for all unit tests."""

+ 0
- 0
tripleo_ansible/tests/plugins/__init__.py View File


+ 0
- 0
tripleo_ansible/tests/plugins/filter/__init__.py View File


+ 258
- 0
tripleo_ansible/tests/plugins/filter/test_helpers.py View File

@@ -0,0 +1,258 @@
# Copyright 2019 Red Hat, Inc.
# All Rights Reserved.
#
# 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.

from tripleo_ansible.ansible_plugins.filter import helpers
from tripleo_ansible.tests import base as tests_base


class TestHelperFilters(tests_base.TestCase):

def setUp(self):
super(TestHelperFilters, self).setUp()
self.filters = helpers.FilterModule()

def test_subsort(self):
dict = {
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone'
},
'haproxy': {
'image': 'quay.io/tripleo/haproxy'
},
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
expected_ordered_dict = {
0: [
{'haproxy': {
'image': 'quay.io/tripleo/haproxy',
'start_order': 0
}},
{'mysql': {
'image': 'quay.io/tripleo/mysql',
'start_order': 0
}}
],
1: [
{'keystone': {
'image': 'quay.io/tripleo/keystone',
'start_order': 1
}}
]
}
result = self.filters.subsort(dict_to_sort=dict,
attribute='start_order')
self.assertEqual(result, expected_ordered_dict)

def test_subsort_with_null_value(self):
dict = {
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone'
},
'haproxy': {
'image': 'quay.io/tripleo/haproxy'
},
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
expected_ordered_dict = {
0: [
{'mysql': {
'image': 'quay.io/tripleo/mysql',
'start_order': 0
}}
],
1: [
{'keystone': {
'image': 'quay.io/tripleo/keystone',
'start_order': 1
}}
],
5: [
{'haproxy': {
'image': 'quay.io/tripleo/haproxy',
'start_order': 5
}}
]
}
result = self.filters.subsort(dict_to_sort=dict,
attribute='start_order', null_value=5)
self.assertEqual(result, expected_ordered_dict)

def test_singledict(self):
list = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone'
},
},
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
]
expected_dict = {
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone'
},
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
result = self.filters.singledict(list)
self.assertEqual(result, expected_dict)

def test_list_of_keys(self):
keys = [
{
'foo1': 'bar1'
},
{
'foo2': 'bar2'
},
]
expected_list = ['foo1', 'foo2']
result = self.filters.list_of_keys(keys)
self.assertEqual(result, expected_list)

def test_haskey(self):
data = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
},
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
]
expected_list = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
}
]
result = self.filters.haskey(batched_container_data=data,
attribute='restart', value='always')
self.assertEqual(result, expected_list)

def test_haskey_reverse(self):
data = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
},
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
]
expected_list = [
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
},
}
]
result = self.filters.haskey(batched_container_data=data,
attribute='restart',
value='always',
reverse=True)
self.assertEqual(result, expected_list)

def test_haskey_any(self):
data = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
},
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
]
expected_list = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
}
]
result = self.filters.haskey(batched_container_data=data,
attribute='restart',
any=True)
self.assertEqual(result, expected_list)

def test_haskey_any_reverse(self):
data = [
{
'keystone': {
'start_order': 1,
'image': 'quay.io/tripleo/keystone',
'restart': 'always'
},
},
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
}
}
]
expected_list = [
{
'mysql': {
'start_order': 0,
'image': 'quay.io/tripleo/mysql'
},
}
]
result = self.filters.haskey(batched_container_data=data,
attribute='restart',
reverse=True,
any=True)
self.assertEqual(result, expected_list)

+ 1
- 0
zuul.d/layout.yaml View File

@@ -3,6 +3,7 @@
templates:
- tripleo-ansible-molecule-jobs
- release-notes-jobs-python3
- openstack-python3-ussuri-jobs
check:
jobs:
- openstack-tox-linters


Loading…
Cancel
Save