Mirgate integration.states.test_zookeeper to Pytest functional tests

This commit is contained in:
Pedro Algarvio 2021-06-02 15:06:05 +01:00 committed by Megan Wilhite
parent f0df76fcd6
commit 2c034cab47
3 changed files with 169 additions and 149 deletions

View file

@ -65,30 +65,6 @@ grains:
keystone.password: demopass
keystone.tenant: demo
keystone.auth_url: 'http://127.0.0.1:5000/v3/'
zookeeper:
prod:
hosts: 'localhost:2181'
default_acl:
- username: daniel
password: test
read: true
write: true
create: true
delete: true
admin: true
username: daniel
password: test
hosts: 'localhost:2181'
default_acl:
- username: daniel
password: test
read: true
write: true
create: true
delete: true
admin: true
username: daniel
password: test
config_test:
spam: eggs

View file

@ -1,125 +0,0 @@
"""
Integration tests for the zookeeper states
"""
import logging
import pytest
import salt.utils.path
from tests.support.case import ModuleCase
from tests.support.mixins import SaltReturnAssertsMixin
from tests.support.unit import skipIf
try:
import kazoo # pylint: disable=import-error,unused-import
HAS_KAZOO = True
except ImportError:
HAS_KAZOO = False
log = logging.getLogger(__name__)
@skipIf(not salt.utils.path.which("dockerd"), "Docker not installed")
@skipIf(not HAS_KAZOO, "kazoo python library not installed")
@pytest.mark.destructive_test
class ZookeeperTestCase(ModuleCase, SaltReturnAssertsMixin):
"""
Test zookeeper states
"""
@classmethod
def setUpClass(cls):
cls.container_name = "zookeeper_salt"
def setUp(self):
self.run_state("docker_image.present", name="zookeeper")
self.run_state(
"docker_container.running",
name=self.container_name,
image="zookeeper",
port_bindings="2181:2181",
)
def tearDown(self):
self.run_state("docker_container.stopped", name=self.container_name)
self.run_state("docker_container.absent", name=self.container_name)
self.run_state("docker_image.absent", name="docker.io/zookeeper", force=True)
@pytest.mark.slow_test
def test_zookeeper_present(self):
ret = self.run_state(
"zookeeper.present", name="/test/name", value="testuser", makepath=True,
)
self.assertSaltTrueReturn(ret)
ret = self.run_state(
"zookeeper.present",
name="/test/name",
value="daniel",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
profile="prod",
)
self.assertSaltTrueReturn(ret)
@pytest.mark.slow_test
def test_zookeeper_absent(self):
self.run_state(
"zookeeper.present", name="/test/name", value="testuser", makepath=True,
)
ret = self.run_state("zookeeper.absent", name="/test/name",)
self.assertSaltTrueReturn(ret)
self.assertTrue(
bool(ret["zookeeper_|-/test/name_|-/test/name_|-absent"]["changes"])
)
ret = self.run_state("zookeeper.absent", name="/test/name",)
self.assertFalse(
bool(ret["zookeeper_|-/test/name_|-/test/name_|-absent"]["changes"])
)
@pytest.mark.slow_test
def test_zookeeper_acls(self):
ret = self.run_state(
"zookeeper.acls",
name="/test/name",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
)
self.assertSaltFalseReturn(ret)
ret = self.run_state(
"zookeeper.present", name="/test/name", value="testuser", makepath=True,
)
ret = self.run_state(
"zookeeper.acls",
name="/test/name",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
)
self.assertSaltTrueReturn(ret)

View file

@ -0,0 +1,169 @@
"""
Integration tests for the zookeeper states
"""
import logging
import pytest
from saltfactories.daemons.container import Container
from saltfactories.utils import random_string
from saltfactories.utils.ports import get_unused_localhost_port
pytest.importorskip("kazoo")
docker = pytest.importorskip("docker")
from docker.errors import ( # isort:skip pylint: disable=3rd-party-module-not-gated
DockerException,
)
log = logging.getLogger(__name__)
pytestmark = [
# pytest.mark.slow_test,
pytest.mark.skip_if_binaries_missing("dockerd"),
]
@pytest.fixture(scope="module")
def zookeeper_port():
return get_unused_localhost_port()
@pytest.fixture(scope="module")
def minion_config_overrides(zookeeper_port):
zookeeper_grains = {
"prod": {
"hosts": "localhost:{}".format(zookeeper_port),
"default_acl": [
{
"username": "daniel",
"password": "test",
"read": True,
"write": True,
"create": True,
"delete": True,
"admin": True,
}
],
"username": "daniel",
"password": "test",
},
"hosts": "localhost:{}".format(zookeeper_port),
"default_acl": [
{
"username": "daniel",
"password": "test",
"read": True,
"write": True,
"create": True,
"delete": True,
"admin": True,
}
],
"username": "daniel",
"password": "test",
}
return {"grains": {"zookeeper": zookeeper_grains}}
@pytest.fixture(scope="module")
def docker_client():
try:
client = docker.from_env()
except DockerException:
pytest.skip("Failed to get a connection to docker running on the system")
connectable = Container.client_connectable(client)
if connectable is not True: # pragma: nocover
pytest.skip(connectable)
return client
@pytest.fixture(scope="module")
def zookeeper_container(salt_factories, docker_client, zookeeper_port):
container = salt_factories.get_container(
random_string("zookeeper-"),
"zookeeper",
docker_client=docker_client,
check_ports=[zookeeper_port],
container_run_kwargs={"ports": {"2181/tcp": zookeeper_port}},
)
with container.started() as factory:
yield factory
@pytest.fixture(scope="module")
def zookeeper(zookeeper_container, states):
return states.zookeeper
def test_zookeeper_present(zookeeper):
ret = zookeeper.present(name="/test/name-1", value="testuser", makepath=True)
assert ret.result is True
def test_zookeeper_present_acls_and_profile(zookeeper):
ret = zookeeper.present(name="/test/name-2", value="testuser", makepath=True)
assert ret.result is True
ret = zookeeper.present(
name="/test/name-2",
value="daniel",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
profile="prod",
)
assert ret.result is True
def test_zookeeper_absent(zookeeper):
ret = zookeeper.present(name="/test/name-3", value="testuser", makepath=True)
assert ret.result is True
ret = zookeeper.absent(name="/test/name-3")
assert ret.result is True
assert ret.changes
ret = zookeeper.absent(name="/test/name-3")
assert ret.result is True
assert not ret.changes
def test_zookeeper_acls(zookeeper):
ret = zookeeper.acls(
name="/test/name-4",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
)
assert ret.result is False
ret = zookeeper.present(name="/test/name-4", value="testuser", makepath=True)
assert ret.result is True
ret = zookeeper.acls(
name="/test/name-4",
acls=[
{
"username": "daniel",
"password": "test",
"read": True,
"admin": True,
"write": True,
},
{"username": "testuser", "password": "test", "read": True},
],
)
assert ret.result is True