#!/usr/bin/env python3

# Copyright 2022 StorPool
#
# 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.

"""Encapsulate cinder-storpool testing."""

from zaza.openstack.charm_tests.cinder.tests import CinderTests
from zaza.openstack.charm_tests.cinder_backend.tests import CinderBackendTest


class CinderTestsStorPool(CinderTests):
    """Subclass to skip broken tests"""

    def test_105_volume_create_from_img(self):
        self.skipTest("Skip until Glance is included in setup")


class CinderStorPoolTest(CinderBackendTest):
    """Encapsulate StorPool tests."""

    backend_name = "cinder-storpool"

    expected_config_content = {
        "StorPool": {
            "volume-backend-name": ["StorPool"],
        }
    }

    def test_cinder_config(self):
        self.skipTest("Skip failing test")
