Пример #1
0
    def test_filtered_template_retriever_gen2_success(self):
        # Arrange
        template_retriever = FilteredTemplateRetriever(GEN_TWO,
                                                       TemplateRetriever())

        httpretty.register_uri('GET',
                               TEMPLATES_YML,
                               body=self.mock_get_templates_from_github())

        # Act
        templates = template_retriever.get_templates()

        # Assert
        self.assertEqual(len(templates), 2)
        self.assertEqual(templates['gen2/switch'].name, 'gen2/switch')
        self.assertEqual(templates['gen2/switch'].description,
                         'Basic switch template')
        self.assertEqual(
            templates['gen2/switch'].repository,
            'https://github.com/QualiSystems/shellfoundry-switch-template')

        self.assertEqual(templates['gen2/software-asset'].name,
                         'gen2/software-asset')
        self.assertEqual(templates['gen2/software-asset'].description,
                         'Basic software-asset template')
        self.assertEqual(
            templates['gen2/software-asset'].repository,
            'https://github.com/QualiSystems/shellfoundry-software-asset-template'
        )
Пример #2
0
    def test_list_shows_nothing_because_filter_is_set_for_templates_that_do_not_exist(
            self, max_width_mock, echo_mock):
        # Arrange
        max_width_mock.return_value = 40
        template_retriever = Mock()
        template_retriever.get_templates = Mock(return_value=OrderedDict([
            ('gen2/networking/switch',
             ShellTemplate(
                 'gen2/networking/switch',
                 'TOSCA based template for standard Switch devices/virtual appliances',
                 '', '8.0')),
            ('gen2/networking/WirelessController',
             ShellTemplate(
                 'gen2/networking/WirelessController',
                 'TOSCA based template for standard WirelessController devices/virtual appliances',
                 '', '8.0'))
        ]))
        flag_value = 'gen1'

        standards = Mock()
        standards.fetch.return_value = []

        list_command_executor = ListCommandExecutor(
            template_retriever=FilteredTemplateRetriever(
                flag_value, template_retriever),
            standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_called_once_with('No templates matched the criteria')
Пример #3
0
    def test_devguide_text_note_appears_when_no_filter_was_selected(
            self, max_width_mock, echo_mock):
        # Arrange
        max_width_mock.return_value = 40
        template_retriever = Mock()
        template_retriever.get_templates = Mock(return_value=OrderedDict([
            ('gen2/networking/switch',
             ShellTemplate(
                 'gen2/networking/switch',
                 'TOSCA based template for standard Switch devices/virtual appliances',
                 '', '8.0')),
            ('gen2/networking/WirelessController',
             ShellTemplate(
                 'gen2/networking/WirelessController',
                 'TOSCA based template for standard WirelessController devices/virtual appliances',
                 '', '8.0'))
        ]))
        flag_value = None

        standards = Mock()
        standards.fetch.return_value = []

        list_command_executor = ListCommandExecutor(
            template_retriever=FilteredTemplateRetriever(
                flag_value, template_retriever),
            standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_any_call('''
As of CloudShell 8.0, CloudShell uses 2nd generation shells, to view the list of 1st generation shells use: shellfoundry list --gen1.
For more information, please visit our devguide: https://qualisystems.github.io/devguide/'''
                                  )
Пример #4
0
    def test_filter_by_legacy_shows_all_legacy_templates(
            self, max_width_mock, echo_mock):
        # Arrange
        max_width_mock.return_value = 62
        template_retriever = Mock()
        template_retriever.get_templates = Mock(return_value=OrderedDict([
            ('gen2/networking/switch',
             ShellTemplate(
                 'gen2/networking/switch',
                 'TOSCA based template for standard Switch devices/virtual appliances',
                 '', '8.0')),
            ('gen2/networking/WirelessController',
             ShellTemplate(
                 'gen2/networking/WirelessController',
                 'TOSCA based template for standard WirelessController devices/virtual appliances',
                 '', '8.0')),
            ('gen1/base',
             ShellTemplate('gen1/base', 'base description', '', '7.0')),
            ('gen1/switch',
             ShellTemplate('gen1/switch', 'switch description', '', '7.0'))
        ]))
        flag_value = 'gen1'
        list_command_executor = ListCommandExecutor(
            template_retriever=FilteredTemplateRetriever(
                flag_value, template_retriever))

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_any_call(
            u' Template Name  CloudShell Ver.  Description        \n'
            u'----------------------------------------------------\n'
            u' gen1/base      7.0 and up       base description   \n'
            u' gen1/switch    7.0 and up       switch description ')
Пример #5
0
 def __init__(self, default_view=None, template_retriever=None, standards=None):
     """
     :param str default_view:
     :param Standards standards:
     """
     dv = default_view or Configuration(ShellFoundryConfig()).read().defaultview
     self.template_retriever = template_retriever or FilteredTemplateRetriever(dv, TemplateRetriever())
     self.show_info_msg = default_view is None
     self.standards = standards or Standards()
     self.cloudshell_config_reader = Configuration(CloudShellConfigReader())
Пример #6
0
    def test_filter_by_all_shows_all_templates(self, max_width_mock,
                                               echo_mock):
        # Arrange
        max_width_mock.return_value = 40
        template_retriever = Mock()
        template_retriever.get_templates = Mock(
            return_value={
                'gen1/base':
                [ShellTemplate('gen1/base', 'base description', '', '7.0')],
                'gen1/switch': [
                    ShellTemplate('gen1/switch', 'switch description', '',
                                  '7.0')
                ],
                'gen2/networking/switch': [
                    ShellTemplate(
                        'gen2/networking/switch',
                        'TOSCA based template for standard Switch devices/virtual appliances',
                        '', '8.0')
                ],
                'gen2/networking/WirelessController': [
                    ShellTemplate(
                        'gen2/networking/WirelessController',
                        'TOSCA based template for standard WirelessController devices/virtual appliances',
                        '', '8.0')
                ]
            })
        flag_value = 'all'

        standards = Mock()
        standards.fetch.return_value = {}

        list_command_executor = ListCommandExecutor(
            template_retriever=FilteredTemplateRetriever(
                flag_value, template_retriever),
            standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_any_call(
            u' Template Name                       CloudShell Ver.  Description                              \n'
            u'-----------------------------------------------------------------------------------------------\n'
            u' gen2/networking/WirelessController  8.0 and up       TOSCA based template for standard        \n'
            u'                                                      WirelessController devices/virtual       \n'
            u'                                                      appliances                               \n'
            u' gen1/base                           7.0 and up       base description                         \n'
            u' gen1/switch                         7.0 and up       switch description                       \n'
            u' gen2/networking/switch              8.0 and up       TOSCA based template for standard Switch \n'
            u'                                                      devices/virtual appliances               '
        )
Пример #7
0
    def test_get_cs_standards_unavailable_shows_cs_8_0_shipped_templates(
            self, max_width_mock, echo_mock):
        # Assert
        max_width_mock.return_value = 60

        from shellfoundry import ALTERNATIVE_TEMPLATES_PATH
        self.fs.add_real_file(ALTERNATIVE_TEMPLATES_PATH)

        standards = Mock(fetch=Mock(side_effect=FeatureUnavailable()))

        template_retriever = FilteredTemplateRetriever('all',
                                                       TemplateRetriever())

        list_command_executor = ListCommandExecutor(
            template_retriever=template_retriever, standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        templates_output = self.get_8_0_templates_output()
        echo_mock.assert_any_call(templates_output)
Пример #8
0
    def test_list_shows_nothing_because_filter_is_set_for_templates_that_do_not_exist(
            self, max_width_mock):
        # Arrange
        max_width_mock.return_value = 40
        template_retriever = Mock()
        template_retriever.get_templates = Mock(
            return_value={
                'gen2/networking/switch': [
                    ShellTemplate(
                        'gen2/networking/switch',
                        'TOSCA based template for standard Switch devices/virtual appliances',
                        '', '8.0')
                ],
                'gen2/networking/WirelessController': [
                    ShellTemplate(
                        'gen2/networking/WirelessController',
                        'TOSCA based template for standard WirelessController devices/virtual appliances',
                        '', '8.0')
                ]
            })
        flag_value = 'gen1'

        standards = Mock()
        standards.fetch.return_value = {}

        list_command_executor = ListCommandExecutor(
            template_retriever=FilteredTemplateRetriever(
                flag_value, template_retriever),
            standards=standards)

        # Act
        with self.assertRaisesRegexp(
                ClickException,
                "No templates matched the view criteria\(gen1/gen2\) or "
                "available templates and standards are not compatible"):
            list_command_executor.list()
Пример #9
0
 def __init__(self, template_retriever=None):
     self.template_retriever = template_retriever or FilteredTemplateRetriever(GEN_TWO_FILTER, TemplateRetriever())
Пример #10
0
 def __init__(self, default_view=None, template_retriever=None):
     dv = default_view or Configuration(
         ShellFoundryConfig()).read().defaultview
     self.template_retriever = template_retriever or FilteredTemplateRetriever(
         dv, TemplateRetriever())
     self.show_info_msg = default_view is None
Пример #11
0
    def test_templates_are_filtered_based_upon_the_result_of_cs_standards_gen2(
            self, max_width_mock, echo_mock):
        # Arrange
        max_width_mock.return_value = 40
        templates = """templates:
        - name : gen1/resource
          description : base description
          repository : https://github.com/QualiSystems/shell-resource-standard
          params:
            project_name :
          min_cs_ver: 7.0
        - name : gen1/switch
          description : switch description
          repository : https://github.com/QualiSystems/shell-switch-standard
          params:
            project_name :
          min_cs_ver: 7.0
        - name : gen2/resource
          params:
            project_name :
            family_name:
          description : 2nd generation shell template for a standard resource
          repository : https://github.com/QualiSystems/shellfoundry-tosca-resource-template
          min_cs_ver: 8.0
        - name : gen2/networking/switch
          params:
            project_name :
            family_name: Switch
          description : 2nd generation shell template for a standard switch
          repository : https://github.com/QualiSystems/shellfoundry-tosca-networking-template
          min_cs_ver: 8.0
        - name : gen2/networking/wireless-controller
          params:
            project_name :
            family_name: WirelessController
          description : 2nd generation shell template for a standard wireless controller
          repository : https://github.com/QualiSystems/shellfoundry-tosca-networking-template
          min_cs_ver: 8.0"""

        flag_value = 'gen2'

        standards = Mock()
        standards.fetch.return_value = [{
            'StandardName': 'cloudshell_networking_standard',
            "Versions": ['5.0.0']
        }]

        template_retriever = FilteredTemplateRetriever(flag_value,
                                                       TemplateRetriever())

        httpretty.register_uri(httpretty.GET, TEMPLATES_YML, body=templates)

        list_command_executor = ListCommandExecutor(
            template_retriever=template_retriever, standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_any_call(
            u' Template Name                        CloudShell Ver.  Description                         \n'
            u'-------------------------------------------------------------------------------------------\n'
            u' gen2/networking/switch               8.0 and up       2nd generation shell template for a \n'
            u'                                                       standard switch                     \n'
            u' gen2/networking/wireless-controller  8.0 and up       2nd generation shell template for a \n'
            u'                                                       standard wireless controller        '
        )
Пример #12
0
    def test_templates_are_filtered_based_upon_the_result_of_cs_standards(
            self, _get_min_cs_version, conf_class, max_width_mock, echo_mock):
        # Arrange
        _get_min_cs_version.return_value = None
        configuration = MagicMock(read=MagicMock(return_value=MagicMock(
            online_mode="True")))
        conf_class.return_value = configuration
        max_width_mock.return_value = 40
        templates = """templates:
    - name : gen1/resource
      description : base description
      repository : https://github.com/QualiSystems/shell-resource-standard
      params:
        project_name :
      min_cs_ver: 7.0
    - name : gen1/switch
      description : switch description
      repository : https://github.com/QualiSystems/shell-switch-standard
      params:
        project_name :
      min_cs_ver: 7.0
    - name : gen2/resource
      params:
        project_name :
        family_name:
      description : 2nd generation shell template for a standard resource
      repository : https://github.com/QualiSystems/shellfoundry-tosca-resource-template
      min_cs_ver: 8.0
    - name : gen2/networking/switch
      params:
        project_name :
        family_name: Switch
      description : 2nd generation shell template for a standard switch
      repository : https://github.com/QualiSystems/shellfoundry-tosca-networking-template
      min_cs_ver: 8.0
    - name : gen2/networking/wireless-controller
      params:
        project_name :
        family_name: WirelessController
      description : 2nd generation shell template for a standard wireless controller
      repository : https://github.com/QualiSystems/shellfoundry-tosca-networking-template
      min_cs_ver: 8.0"""

        flag_value = 'all'

        standards = Mock()
        standards.fetch.return_value = {"resource": ['5.0.0']}

        template_retriever = FilteredTemplateRetriever(flag_value,
                                                       TemplateRetriever())

        httpretty.register_uri(httpretty.GET, TEMPLATES_YML, body=templates)

        list_command_executor = ListCommandExecutor(
            template_retriever=template_retriever, standards=standards)

        # Act
        list_command_executor.list()

        # Assert
        echo_mock.assert_any_call(
            u' Template Name  CloudShell Ver.  Description                         \n'
            u'---------------------------------------------------------------------\n'
            u' gen1/resource  7.0 and up       base description                    \n'
            u' gen1/switch    7.0 and up       switch description                  \n'
            u' gen2/resource  8.0 and up       2nd generation shell template for a \n'
            u'                                 standard resource                   '
        )