qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DISPATCH-209) Three+ router test is needed in the system test suite.
Date Thu, 29 Jun 2017 12:08:00 GMT

    [ https://issues.apache.org/jira/browse/DISPATCH-209?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16068247#comment-16068247
] 

ASF GitHub Bot commented on DISPATCH-209:
-----------------------------------------

Github user ted-ross commented on a diff in the pull request:

    https://github.com/apache/qpid-dispatch/pull/170#discussion_r124780999
  
    --- Diff: tests/system_tests_three_routers.py ---
    @@ -373,5 +433,189 @@ def run(self):
     
     
     
    +
    +class Entity(object):
    +    def __init__(self, status_code, status_description, attrs):
    +        self.status_code        = status_code
    +        self.status_description = status_description
    +        self.attrs              = attrs
    +
    +    def __getattr__(self, key):
    +        return self.attrs[key]
    +
    +
    +
    +
    +class RouterProxy(object):
    +    def __init__(self, reply_addr):
    +        self.reply_addr = reply_addr
    +
    +    def response(self, msg):
    +        ap = msg.properties
    +        return Entity(ap['statusCode'], ap['statusDescription'], msg.body)
    +
    +    def read_address(self, name):
    +        ap = {'operation': 'READ', 'type': 'org.apache.qpid.dispatch.router.address',
'name': name}
    +        return Message(properties=ap, reply_to=self.reply_addr)
    +
    +    def query_addresses(self):
    +        ap = {'operation': 'QUERY', 'type': 'org.apache.qpid.dispatch.router.address'}
    +        return Message(properties=ap, reply_to=self.reply_addr)
    +
    +
    +
    +
    +class PollTimeout(object):
    +    def __init__(self, parent):
    +        self.parent = parent
    +
    +    def on_timer_task(self, event):
    +        self.parent.poll_timeout()
    +
    +
    +
    +class Timeout(object):
    +    def __init__(self, parent):
    +        self.parent = parent
    +
    +    def on_timer_task(self, event):
    +        self.parent.timeout()
    +
    +
    +class LinkRoute ( MessagingHandler ):
    +
    +    """
    +        Set up and use a link-route, to send a message this way:
    +            receiver <--- A <--- B <--- C <--- sender
    +
    +        Check for appearance of the link-route at router A with a
    +        technique that is appropriate to the 'proactor' style,
    +        i.e. do not take control away from the proactor for an extended
    +        period of time.
    +    """
    +
    +    def __init__ ( self, route_container, linkroute_prefix, route_check_address, send_address
):
    +        super(LinkRoute, self).__init__(prefetch=0)
    +        self.route_container        = route_container
    +        self.send_address           = send_address
    +        self.linkroute_prefix       = linkroute_prefix
    +        self.route_check_address    = route_check_address
    +        self.true_statement         = "This IS the message you are looking for."
    +        self.error                  = None
    +        self.send_connection        = None
    +        self.recv_connection        = None
    +        self.route_check_connection = None
    +        self.route_check_sender     = None
    +        self.sender                 = None
    +        self.route_check_timer      = None
    +        self.route_check_receiver   = None
    +        self.count                  = 1
    +        self.sent                   = 0
    +        self.route_checks_sent      = 0
    +
    +
    +    def bail ( self, error_text ) :
    +        self.error = error_text
    +        self.recv_connection.close()
    +        self.route_check_connection.close()
    +        self.send_connection.close()
    +        self.timer.cancel()
    +        if self.route_check_timer :
    +            self.route_check_timer.cancel()
    +            self.route_check_timer = None
    +
    +
    +    def timeout(self):
    +        self.bail ( "Timeout Expired" )
    +
    +
    +    def poll_timeout ( self ) :
    +        self.poll()
    +
    +
    +    def on_start(self, event):
    +        # Iff this timer expires, the test fails.
    +        self.timer = event.reactor.schedule ( TIMEOUT, Timeout(self) )
    +
    +        # At startup, create only the receivers and the sender that checks for
    +        # the route being ready.  Creation of the payload message sender
    +        # has to wait until we know the address is available, to avoid a
    +        # 'no route to destination' error.
    +        self.recv_connection = event.container.connect ( self.route_container )
    +
    +        self.route_check_connection  = event.container.connect ( self.route_check_address
)
    +        self.route_check_receiver = event.container.create_receiver ( self.route_check_connection,
    +                                                                dynamic=True
    +                                                              )
    +        self.route_check_sender = event.container.create_sender ( self.route_check_connection,
    +                                                                  "$management"
    +                                                                )
    +
    +
    +
    +    def poll ( self ):
    +        # The router prepends this 'D' to the address.  If we want
    +        # to look for it down at router A, we have to do likewise.
    +        doctored_linkroute_prefix = 'D' + self.linkroute_prefix
    +        request = self.proxy.read_address ( doctored_linkroute_prefix )
    +        self.route_check_sender.send ( request )
    +
    +
    +
    +    def on_link_opened ( self, event ):
    +
    +        if event.receiver:
    +            event.receiver.flow ( self.count )
    +
    +        if event.receiver == self.route_check_receiver:
    +            self.proxy = RouterProxy ( self.route_check_receiver.remote_source.address
)
    +            self.poll()
    +
    +
    +    def on_link_opening ( self, event ):
    +        if event.receiver:
    +            event.receiver.target.address = self.route_container
    +            event.receiver.flow(1)
    +
    +
    +    def on_sendable ( self, event ):
    +        if event.sender == self.sender and self.sent < self.count :
    +            self.sender.send ( Message ( address = self.linkroute_prefix, body = self.true_statement
) )
    +            self.sent += 1
    +
    +
    +    def on_message ( self, event ):
    +        # Check that the incoming message is the one we sent.
    +        if ( event.message.body == self.true_statement ) :
    +            self.bail ( None )
    +
    +        if event.receiver == self.route_check_receiver:
    +            response = self.proxy.response(event.message)
    +            if response.status_code == 200 and (response.remoteCount + response.containerCount)
> 0:
    +                if self.route_check_timer :
    +                    self.route_check_timer.cancel()
    +                    self.route_check_timer = None
    +                # After address appears at the far end of my router line, (router A)
    +                # give more time to let it finish propagating.
    +                time.sleep ( 2 )
    --- End diff --
    
    Is this sleep really necessary?  Why do you need to allow more time for propagation when
you have just verified that the propagation is complete?


> Three+ router test is needed in the system test suite.
> ------------------------------------------------------
>
>                 Key: DISPATCH-209
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-209
>             Project: Qpid Dispatch
>          Issue Type: New Feature
>          Components: Tests
>            Reporter: Ted Ross
>            Assignee: michael goulish
>             Fix For: 1.0.0
>
>
> There have arisen some issues that would have been caught had there been a three-router
test in the regression suite.  This test should be added.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@qpid.apache.org
For additional commands, e-mail: dev-help@qpid.apache.org


Mime
View raw message