Exemple #1
0
    def test_check_available_ip(self):
        ip_equipamento = IpEquipamento(equipamento=Equipamento(
            tipo_equipamento=TipoEquipamento(id=1,
                                             tipo_equipamento='balanceador')))
        network = self.mock_network(ip_equipamento)

        self.mock_user_has_permission(True)
        self.mock_get_vip_environment_by_pk(
            self.mock_vip_environment(1, 'production env', networks=[network]))
        self.mock_network_get_available_ip(IPv4Address('192.168.1.1'))
        self.mock_get_tipo_balanceador(
            TipoEquipamento(id=1, tipo_equipamento='balanceador'))
        ip_save_mock = self.mock_ip_save()

        response = self.client.post('/ip/availableip4/vip/1/',
                                    XML % 1,
                                    content_type='text/xml')

        print(response)
        xml_map = self.parse_response(response)
        self.assertEquals('192',
                          xml_map.get('networkapi').get('ip').get('oct1'))
        self.assertEquals('168',
                          xml_map.get('networkapi').get('ip').get('oct2'))
        self.assertEquals('1', xml_map.get('networkapi').get('ip').get('oct3'))
        self.assertEquals('1', xml_map.get('networkapi').get('ip').get('oct4'))
        self.assertEquals(200, response.status_code)
        self.assertTrue(ip_save_mock.called)
    def handle_put(self, request, user, *args, **kwargs):
        """Treat PUT requests to associate Filter and TipoEquipamento.

        URL: filter/<filter_id>/equiptype/<equiptype_id>
        """

        try:
            self.log.info('')
            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            if not is_valid_int_greater_zero_param(kwargs['id_filter']):
                self.log.error(u'Parameter id_filter is invalid. Value: %s.',
                               kwargs['id_filter'])
                raise InvalidValueError(None, 'id_filter', kwargs['id_filter'])
            else:
                # Check existence
                fil = Filter().get_by_pk(kwargs['id_filter'])

            if not is_valid_int_greater_zero_param(kwargs['id_equiptype']):
                self.log.error(
                    u'Parameter id_equiptype is invalid. Value: %s.',
                    kwargs['id_equiptype'])
                raise InvalidValueError(None, 'id_equiptype',
                                        kwargs['id_equiptype'])
            else:
                # Check existence
                tp_equip = TipoEquipamento().get_by_pk(kwargs['id_equiptype'])

            association = FilterEquipType()
            association.filter = fil
            association.equiptype = tp_equip

            # Check existence
            association.validate()

            # Save association
            association.save()

            fil_et_map = dict()
            fil_et_map['id'] = association.id

            return self.response(
                dumps_networkapi({'equiptype_filter_xref': fil_et_map}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_post(self, request, user, *args, **kwargs):
        """Treat requests POST to insert a Equipment Type.

        URL: equipmenttype/
        """

        try:

            self.log.info("Add Equipment Script")

            # User permission
            if not has_perm(user, AdminPermission.EQUIPMENT_MANAGEMENT, AdminPermission.WRITE_OPERATION):
                return self.not_authorized()

            # Business Validations

            # Load XML data
            xml_map, attrs_map = loads(request.raw_post_data)

            # XML data format
            networkapi_map = xml_map.get('networkapi')
            if networkapi_map is None:
                msg = u'There is no value to the networkapi tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)

            equipment_type_map = networkapi_map.get('equipment_type')
            if equipment_type_map is None:
                msg = u'There is no value to the equipment_type tag of XML request.'
                self.log.error(msg)
                return self.response_error(3, msg)

            # Get XML data
            name = equipment_type_map.get('name')

            # Valid Name
            if not is_valid_string_minsize(name, 3) or not is_valid_string_maxsize(name, 100) or not is_valid_regex(name, "^[A-Za-z0-9 -]+$"):
                self.log.error(u'Parameter name is invalid. Value: %s', name)
                raise InvalidValueError(None, 'name', name)

            # Business Rules
            equipment_type = TipoEquipamento()

            # save Equipment Type
            equipment_type.insert_new(user, name)

            etype_dict = dict()
            etype_dict['id'] = equipment_type.id

            return self.response(dumps_networkapi({'equipment_type': etype_dict}))

        except InvalidValueError, e:
            return self.response_error(269, e.param, e.value)
    def handle_put(self, request, user, *args, **kwargs):
        """Treat PUT requests to dissociate Filter and TipoEquipamento.

        URL: filter/<id_filter>/dissociate/<id_equip_type>
        """

        try:
            self.log.info("")
            # Commons Validations

            # User permission
            if not has_perm(user, AdminPermission.ENVIRONMENT_MANAGEMENT,
                            AdminPermission.WRITE_OPERATION):
                self.log.error(
                    u'User does not have permission to perform the operation.')
                return self.not_authorized()

            if not is_valid_int_greater_zero_param(kwargs['id_filter']):
                self.log.error(u'Parameter id_filter is invalid. Value: %s.',
                               kwargs['id_filter'])
                raise InvalidValueError(None, 'id_filter', kwargs['id_filter'])
            else:
                # Check existence
                fil = Filter().get_by_pk(kwargs['id_filter'])

            if not is_valid_int_greater_zero_param(kwargs['id_equip_type']):
                self.log.error(
                    u'Parameter id_equip_type is invalid. Value: %s.',
                    kwargs['id_equip_type'])
                raise InvalidValueError(None, 'id_equip_type',
                                        kwargs['id_equip_type'])
            else:
                # Check existence
                eq_tp = TipoEquipamento().get_by_pk(kwargs['id_equip_type'])

            # Delete association
            try:
                association = FilterEquipType.objects.get(filter=fil.id,
                                                          equiptype=eq_tp.id)

                ## Only delete if there's no conflicts ##
                association.delete()

            except ObjectDoesNotExist, e:
                # Association doesn't exist, ok
                self.log.error(e)
                pass

            return self.response(dumps_networkapi({}))
Exemple #5
0
    def test_check_available_ip_given_no_load_balancer_equipment_available_on_network(
            self):
        ip_equipamento = IpEquipamento(equipamento=Equipamento(
            tipo_equipamento=TipoEquipamento(id=2, tipo_equipamento='router')))
        network = self.mock_network(ip_equipamento)

        self.mock_user_has_permission(True)
        self.mock_get_vip_environment_by_pk(
            self.mock_vip_environment(1, 'production env', networks=[network]))
        self.mock_network_get_available_ip(IPv4Address('192.168.1.1'))
        self.mock_get_tipo_balanceador(
            TipoEquipamento(id=1, tipo_equipamento='balanceador'))

        response = self.client.post('/ip/availableip4/vip/1/',
                                    XML % 1,
                                    content_type='text/xml')

        xml_map = self.parse_response(response)
        self.assertEquals(
            'Não há ipv4 disponivel para as redes associdas com o Ambiente '
            'Vip: production env - production env - production env, pois não existe '
            'equipamentos do Tipo Balanceador nessas redes.',
            xml_map.get('networkapi').get('erro').get('descricao'))
        self.assertEquals(500, response.status_code)