text: # Copyright 2018 AT&T Intellectual Property.  All other 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.
  
  import mock
  
  from armada import const
  from armada.exceptions.helm_exceptions import HelmCommandException
  from armada.handlers import helm
  from armada.handlers import test
  from armada.tests.unit import base
  
  
  class TestHandlerTestCase(base.ArmadaTestCase):
      def _test_test_release_for_success(self, expected_success, exception):
          @mock.patch('armada.handlers.helm.K8s')
          def do_test(_):
              helm_obj = helm.Helm()
              release = 'release'
  
              helm_obj.test_release = mock.Mock()
              if exception:
                  helm_obj.test_release.side_effect = exception
  
              test_handler = test.Test({}, release, helm_obj)
              success = test_handler.test_release_for_success()
  
              self.assertEqual(expected_success, success)
  
          do_test()
  
      def test_success(self):
          self._test_test_release_for_success(True, None)
  
      def test_failure(self):
          self._test_test_release_for_success(
              False, HelmCommandException(mock.Mock()))
  
      def test_exception(self):
          def test():
              self._test_test_release_for_success(False, Exception())
  
          self.assertRaises(Exception, test)
  
      def test_cg_disabled(self):
          """Test that tests are disabled when a chart group disables all
          tests.
          """
          test_handler = test.Test(
              chart={},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=False)
  
          assert test_handler.test_enabled is False
  
      def test_cg_disabled_test_key_enabled(self):
          """Test that tests are enabled when a chart group disables all
          tests and the deprecated, boolean `test` key is enabled.
          """
          test_handler = test.Test(
              chart={'test': True},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=False)
  
          assert test_handler.test_enabled is True
  
      def test_cg_disabled_test_values_enabled(self):
          """Test that tests are enabled when a chart group disables all
          tests and the `test.enabled` key is False.
          """
          test_handler = test.Test(
              chart={'test': {
                  'enabled': True
              }},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=False)
  
          assert test_handler.test_enabled is True
  
      def test_cg_enabled_test_key_disabled(self):
          """Test that tests are disabled when a chart group enables all
          tests and the deprecated, boolean `test` key is disabled.
          """
          test_handler = test.Test(
              chart={'test': False},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=True)
  
          assert test_handler.test_enabled is False
  
      def test_cg_enabled_test_values_disabled(self):
          """Test that tests are disabled when a chart group enables all
          tests and the deprecated, boolean `test` key is disabled.
          """
          test_handler = test.Test(
              chart={'test': {
                  'enabled': False
              }},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=True)
  
          assert test_handler.test_enabled is False
  
      def test_enable_all_cg_disabled(self):
          """Test that tests are enabled when the `enable_all` parameter is
          True and the chart group `test_enabled` key is disabled.
          """
          test_handler = test.Test(
              chart={},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              cg_test_charts=False,
              enable_all=True)
  
          assert test_handler.test_enabled is True
  
      def test_enable_all_test_key_disabled(self):
          """Test that tests are enabled when the `enable_all` parameter is
          True and the deprecated, boolean `test` key is disabled.
          """
          test_handler = test.Test(
              chart={'test': True},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              enable_all=True)
  
          assert test_handler.test_enabled is True
  
      def test_enable_all_test_values_disabled(self):
          """Test that tests are enabled when the `enable_all` parameter is
          True and the `test.enabled` key is False.
          """
          test_handler = test.Test(
              chart={'test': {
                  'enabled': False
              }},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock(),
              enable_all=True)
  
          assert test_handler.test_enabled is True
  
      def test_deprecated_test_key_false(self):
          """Test that tests can be disabled using the deprecated, boolean value
          for a chart's test key.
          """
          test_handler = test.Test(
              chart={'test': False},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock())
  
          assert not test_handler.test_enabled
  
      def test_deprecated_test_key_timeout(self):
          """Test that the default helm timeout is used when tests are enabled
          using the deprecated, boolean value for a chart's `test` key.
          """
          mock_helm = mock.Mock()
          test_handler = test.Test(
              chart={'test': True},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock_helm)
  
          assert test_handler.timeout == const.DEFAULT_TEST_TIMEOUT
  
      def test_tests_disabled(self):
          """Test that tests are disabled by a chart's values using the
          `test.enabled` path.
          """
          test_handler = test.Test(
              chart={'test': {
                  'enabled': False
              }},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock())
  
          assert test_handler.test_enabled is False
  
      def test_no_test_values(self):
          """Test that the default values are enforced when no chart `test`
          values are provided (i.e. tests are enabled).
          """
          test_handler = test.Test(
              chart={},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock())
  
          assert test_handler.test_enabled is True
  
      def test_default_timeout_value(self):
          """Test that the default timeout value is used if a test timeout value,
          `test.timeout` is not provided.
          """
          test_handler = test.Test(
              chart={'test': {
                  'enabled': True
              }},
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock())
  
          assert test_handler.timeout == helm.DEFAULT_HELM_TIMEOUT
  
      def test_timeout_value(self):
          """Test that a chart's test timeout value, `test.timeout` overrides the
          default test timeout.
          """
          chart = {'test': {'enabled': True, 'timeout': 800}}
  
          test_handler = test.Test(
              chart=chart,
              release_id=helm.HelmReleaseId('release_ns', 'release'),
              helm=mock.Mock())
  
          assert test_handler.timeout is chart['test']['timeout']
  