|
|
#!/usr/bin/env python
|
|
|
# -*- coding: utf-8 -*-
|
|
|
#
|
|
|
# spyne - Copyright (C) spyne contributors.
|
|
|
#
|
|
|
# This library is free software; you can redistribute it and/or
|
|
|
# modify it under the terms of the GNU Lesser General Public
|
|
|
# License as published by the Free Software Foundation; either
|
|
|
# version 2.1 of the License, or (at your option) any later version.
|
|
|
#
|
|
|
# This library is distributed in the hope that it will be useful,
|
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
# Lesser General Public License for more details.
|
|
|
#
|
|
|
# You should have received a copy of the GNU Lesser General Public
|
|
|
# License along with this library; if not, write to the Free Software
|
|
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
|
#
|
|
|
|
|
|
import logging
|
|
|
logging.basicConfig(level=logging.DEBUG)
|
|
|
|
|
|
import unittest
|
|
|
|
|
|
import spyne.const.xml as ns
|
|
|
|
|
|
|
|
|
from spyne.interface.wsdl.wsdl11 import Wsdl11
|
|
|
from . import build_app
|
|
|
from .port_service_services import TS1
|
|
|
from .port_service_services import TSinglePortService
|
|
|
from .port_service_services import TDoublePortService
|
|
|
|
|
|
class TestWSDLBindingBehavior(unittest.TestCase):
|
|
|
def setUp(self):
|
|
|
self.transport = 'http://schemas.xmlsoap.org/soap/http'
|
|
|
self.url = 'http:/localhost:7789/wsdl'
|
|
|
self.port_type_string = ns.WSDL11('portType')
|
|
|
self.service_string = ns.WSDL11('service')
|
|
|
self.binding_string = ns.WSDL11('binding')
|
|
|
self.operation_string = ns.WSDL11('operation')
|
|
|
self.port_string = ns.WSDL11('port')
|
|
|
|
|
|
def test_binding_simple(self):
|
|
|
sa = build_app([TS1()], 'S1Port', 'TestServiceName')
|
|
|
|
|
|
interface_doc = Wsdl11(sa.interface)
|
|
|
interface_doc.build_interface_document(self.url)
|
|
|
|
|
|
|
|
|
services = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:service',
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(services), 1)
|
|
|
|
|
|
portTypes = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:portType',
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(portTypes), 1)
|
|
|
|
|
|
ports = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:service[@name="%s"]/wsdl:port' %
|
|
|
"S1",
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(ports), 1)
|
|
|
|
|
|
|
|
|
def test_binding_multiple(self):
|
|
|
SinglePortService, DoublePortService = TSinglePortService(), TDoublePortService()
|
|
|
|
|
|
sa = build_app(
|
|
|
[SinglePortService, DoublePortService],
|
|
|
'MultiServiceTns',
|
|
|
'AppName'
|
|
|
)
|
|
|
interface_doc = Wsdl11(sa.interface)
|
|
|
interface_doc.build_interface_document(self.url)
|
|
|
|
|
|
|
|
|
# 2 Service,
|
|
|
# First has 1 port
|
|
|
# Second has 2
|
|
|
|
|
|
# => need 2 service, 3 port and 3 bindings
|
|
|
|
|
|
services = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:service',
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(services), 2)
|
|
|
|
|
|
portTypes = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:portType',
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(portTypes), 3)
|
|
|
|
|
|
|
|
|
bindings = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:binding',
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
|
|
|
self.assertEqual(len(bindings), 3)
|
|
|
|
|
|
ports = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:service[@name="%s"]/wsdl:port' %
|
|
|
SinglePortService.__service_name__,
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(ports), 1)
|
|
|
|
|
|
ports = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:service[@name="%s"]/wsdl:port' %
|
|
|
"DoublePortService",
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(len(ports), 2)
|
|
|
|
|
|
# checking name and type
|
|
|
#service SinglePortService
|
|
|
for srv in (SinglePortService, DoublePortService):
|
|
|
for port in srv.__port_types__:
|
|
|
bindings = interface_doc.root_elt.xpath(
|
|
|
'/wsdl:definitions/wsdl:binding[@name="%s"]' %
|
|
|
port,
|
|
|
namespaces = {
|
|
|
'wsdl':'http://schemas.xmlsoap.org/wsdl/' })
|
|
|
self.assertEqual(bindings[0].get('type'), "tns:%s" % port)
|