125 lines
5.6 KiB
Python
125 lines
5.6 KiB
Python
# Copyright 2015 NEC Corporation. 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 unittest import mock
|
|
|
|
from magnumclient.common import cliutils
|
|
from magnumclient.tests.v1 import shell_test_base
|
|
from magnumclient.v1 import certificates_shell
|
|
|
|
|
|
class ShellTest(shell_test_base.TestCommandLineArgument):
|
|
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.get')
|
|
def test_cluster_ca_show_success(self, mock_cert_get, mock_cluster_get):
|
|
mockcluster = mock.MagicMock()
|
|
mockcluster.status = "CREATE_COMPLETE"
|
|
mockcluster.uuid = "xxx"
|
|
mock_cluster_get.return_value = mockcluster
|
|
self._test_arg_success('ca-show xxx')
|
|
expected_args = {}
|
|
expected_args['cluster_uuid'] = mockcluster.uuid
|
|
mock_cert_get.assert_called_once_with(**expected_args)
|
|
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.get')
|
|
def test_ca_show_failure_duplicate_arg(self, mock_cert_get,
|
|
mock_cluster_get):
|
|
self.assertRaises(cliutils.DuplicateArgs,
|
|
self._test_arg_failure,
|
|
'ca-show foo --cluster foo',
|
|
self._duplicate_arg_error)
|
|
mock_cert_get.assert_not_called()
|
|
mock_cluster_get.assert_not_called()
|
|
|
|
@mock.patch('os.path.isfile')
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.create')
|
|
def test_cluster_ca_sign_success(
|
|
self, mock_cert_create, mock_cluster_get, mock_isfile):
|
|
mock_isfile.return_value = True
|
|
mockcluster = mock.MagicMock()
|
|
mockcluster.status = "CREATE_COMPLETE"
|
|
mockcluster.uuid = "xxx"
|
|
mock_cluster_get.return_value = mockcluster
|
|
|
|
fake_csr = 'fake-csr'
|
|
mock_file = mock.mock_open(read_data=fake_csr)
|
|
with mock.patch.object(certificates_shell, 'open', mock_file):
|
|
self._test_arg_success('ca-sign '
|
|
'--csr path/csr.pem '
|
|
'--cluster xxx')
|
|
expected_args = {}
|
|
expected_args['cluster_uuid'] = mockcluster.uuid
|
|
expected_args['csr'] = fake_csr
|
|
mock_cert_create.assert_called_once_with(**expected_args)
|
|
|
|
@mock.patch('os.path.isfile')
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.create')
|
|
def test_cluster_ca_sign_with_not_csr(
|
|
self, mock_cert_create, mock_cluster_get, mock_isfile):
|
|
mock_isfile.return_value = False
|
|
mockcluster = mock.MagicMock()
|
|
mockcluster.status = "CREATE_COMPLETE"
|
|
mock_cluster_get.return_value = mockcluster
|
|
|
|
fake_csr = 'fake-csr'
|
|
mock_file = mock.mock_open(read_data=fake_csr)
|
|
with mock.patch.object(certificates_shell, 'open', mock_file):
|
|
self._test_arg_success('ca-sign '
|
|
'--csr path/csr.pem '
|
|
'--cluster xxx')
|
|
mock_isfile.assert_called_once_with('path/csr.pem')
|
|
mock_file.assert_not_called()
|
|
mock_cert_create.assert_not_called()
|
|
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.get')
|
|
def test_ca_show_failure_with_invalid_field(self, mock_cert_get,
|
|
mock_cluster_get):
|
|
self.assertRaises(cliutils.MissingArgs,
|
|
self._test_arg_failure,
|
|
'ca-show',
|
|
self._few_argument_error)
|
|
mock_cert_get.assert_not_called()
|
|
mock_cluster_get.assert_not_called()
|
|
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.rotate_ca')
|
|
def test_ca_rotate(self, mock_rotate_ca, mock_cluster_get):
|
|
mockcluster = mock.MagicMock()
|
|
mockcluster.status = "CREATE_COMPLETE"
|
|
mockcluster.uuid = "xxx"
|
|
mock_cluster_get.return_value = mockcluster
|
|
mock_rotate_ca.return_value = None
|
|
self._test_arg_success('ca-rotate '
|
|
'--cluster xxx')
|
|
expected_args = {}
|
|
expected_args['cluster_uuid'] = mockcluster.uuid
|
|
mock_rotate_ca.assert_called_once_with(**expected_args)
|
|
|
|
@mock.patch('magnumclient.v1.clusters.ClusterManager.get')
|
|
@mock.patch('magnumclient.v1.certificates.CertificateManager.rotate_ca')
|
|
def test_ca_rotate_no_cluster_arg(self, mock_rotate_ca, mock_cluster_get):
|
|
_error_msg = [
|
|
(".*(error: argument --cluster is required|" # py27 compatibility
|
|
"error: the following arguments are required: --cluster).*"),
|
|
".*Try 'magnum help ca-rotate' for more information.*"
|
|
]
|
|
self._test_arg_failure('ca-rotate', _error_msg)
|
|
mock_rotate_ca.assert_not_called()
|
|
mock_cluster_get.assert_not_called()
|