~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transport.py

  • Committer: Vincent Ladeuil
  • Date: 2007-11-19 13:44:25 UTC
  • mto: (3018.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 3019.
  • Revision ID: v.ladeuil+lp@free.fr-20071119134425-y74t0vh9ctpo8j9f
Fix 150860 by leaving port as user specified it.

* transport/remote.py:
(BZR_DEFAULT_INTERFACE, BZR_DEFAULT_PORT): Moved to
smart/medium.py.

* transport/__init__.py:
(TransportListRegistry.register_transport): Delete default_port.
(TransportListRegistry.get_default_port): Deleted.
(ConnectedTransport._split_url, ConnectedTransport._unsplit_url):
Leave port untouched.

* tests/test_transport.py: 
Transports kept port as user specified it.
(TestRemoteTCPTransport, SSHPortTestMixin, SFTPTransportPortTest,
BzrSSHTransportPortTest): Deleted. Default port is set just before
connection.

* smart/medium.py:
(SmartTCPClientMedium._ensure_connection): Set port to default
*just* before connection.

* builtins.py:
(cmd_serve.run): Get interface and port default values from medium.

Show diffs side-by-side

added added

removed removed

Lines of Context:
48
48
from bzrlib.transport.memory import MemoryTransport
49
49
from bzrlib.transport.local import (LocalTransport,
50
50
                                    EmulatedWin32LocalTransport)
51
 
from bzrlib.transport.remote import (
52
 
    BZR_DEFAULT_PORT,
53
 
    RemoteTCPTransport
54
 
    )
55
51
 
56
52
 
57
53
# TODO: Should possibly split transport-specific tests into their own files.
78
74
        try:
79
75
            _clear_protocol_handlers()
80
76
            register_transport_proto('foo')
81
 
            register_lazy_transport('foo', 'bzrlib.tests.test_transport', 'TestTransport.SampleHandler')
 
77
            register_lazy_transport('foo', 'bzrlib.tests.test_transport',
 
78
                                    'TestTransport.SampleHandler')
82
79
            register_transport_proto('bar')
83
 
            register_lazy_transport('bar', 'bzrlib.tests.test_transport', 'TestTransport.SampleHandler')
84
 
            self.assertEqual([SampleHandler.__module__, 'bzrlib.transport.chroot'],
 
80
            register_lazy_transport('bar', 'bzrlib.tests.test_transport',
 
81
                                    'TestTransport.SampleHandler')
 
82
            self.assertEqual([SampleHandler.__module__,
 
83
                              'bzrlib.transport.chroot'],
85
84
                             _get_transport_modules())
86
85
        finally:
87
86
            _set_protocol_handlers(handlers)
619
618
    def test_parse_url(self):
620
619
        t = ConnectedTransport('http://simple.example.com/home/source')
621
620
        self.assertEquals(t._host, 'simple.example.com')
622
 
        self.assertEquals(t._port, 80)
 
621
        self.assertEquals(t._port, None)
623
622
        self.assertEquals(t._path, '/home/source/')
624
623
        self.failUnless(t._user is None)
625
624
        self.failUnless(t._password is None)
716
715
        self.assertIsNot(t1, t2)
717
716
 
718
717
 
719
 
class TestRemoteTCPTransport(TestCase):
720
 
    """Tests for bzr:// transport (RemoteTCPTransport)."""
721
 
 
722
 
    def test_relpath_with_implicit_port(self):
723
 
        """Connected transports with the same URL are the same, even if the
724
 
        port is implicit.
725
 
 
726
 
        So t.relpath(url) should always be '' if t.base is the same as url, or
727
 
        if the only difference is that one explicitly specifies the default
728
 
        port and the other doesn't specify a port.
729
 
        """
730
 
        t_implicit_port = RemoteTCPTransport('bzr://host.com/')
731
 
        self.assertEquals('', t_implicit_port.relpath('bzr://host.com/'))
732
 
        self.assertEquals('', t_implicit_port.relpath('bzr://host.com:4155/'))
733
 
        t_explicit_port = RemoteTCPTransport('bzr://host.com:4155/')
734
 
        self.assertEquals('', t_explicit_port.relpath('bzr://host.com/'))
735
 
        self.assertEquals('', t_explicit_port.relpath('bzr://host.com:4155/'))
736
 
 
737
 
    def test_construct_uses_default_port(self):
738
 
        """If no port is specified, then RemoteTCPTransport uses
739
 
        BZR_DEFAULT_PORT.
740
 
        """
741
 
        t = get_transport('bzr://host.com/')
742
 
        self.assertEquals(BZR_DEFAULT_PORT, t._port)
743
 
 
744
 
    def test_url_omits_default_port(self):
745
 
        """If a RemoteTCPTransport uses the default port, then its base URL
746
 
        will omit the port.
747
 
 
748
 
        This is like how ":80" is omitted from "http://example.com/".
749
 
        """
750
 
        t = get_transport('bzr://host.com:4155/')
751
 
        self.assertEquals('bzr://host.com/', t.base)
752
 
 
753
 
    def test_url_includes_non_default_port(self):
754
 
        """Non-default ports are included in the transport's URL.
755
 
 
756
 
        Contrast this to `test_url_omits_default_port`.
757
 
        """
758
 
        t = get_transport('bzr://host.com:666/')
759
 
        self.assertEquals('bzr://host.com:666/', t.base)
760
 
 
761
 
 
762
 
class SSHPortTestMixin(object):
763
 
    """Mixin class for testing SSH-based transports' use of ports in URLs.
764
 
    
765
 
    Unlike other connected transports, SSH-based transports (sftp, bzr+ssh)
766
 
    don't have a default port, because the user may have OpenSSH configured to
767
 
    use a non-standard port.
768
 
    """
769
 
 
770
 
    def make_url(self, netloc):
771
 
        """Make a url for the given netloc, using the scheme defined on the
772
 
        TestCase.
773
 
        """
774
 
        return '%s://%s/' % (self.scheme, netloc)
775
 
 
776
 
    def test_relpath_with_implicit_port(self):
777
 
        """SSH-based transports with the same URL are the same.
778
 
        
779
 
        Note than an unspecified port number is different to port 22 (because
780
 
        OpenSSH may be configured to use a non-standard port).
781
 
 
782
 
        So t.relpath(url) should always be '' if t.base is the same as url, but
783
 
        raise PathNotChild if the ports in t and url are not both specified (or
784
 
        both unspecified).
785
 
        """
786
 
        url_implicit_port = self.make_url('host.com')
787
 
        url_explicit_port = self.make_url('host.com:22')
788
 
 
789
 
        t_implicit_port = get_transport(url_implicit_port)
790
 
        self.assertEquals('', t_implicit_port.relpath(url_implicit_port))
791
 
        self.assertRaises(
792
 
            PathNotChild, t_implicit_port.relpath, url_explicit_port)
793
 
        
794
 
        t_explicit_port = get_transport(url_explicit_port)
795
 
        self.assertRaises(
796
 
            PathNotChild, t_explicit_port.relpath, url_implicit_port)
797
 
        self.assertEquals('', t_explicit_port.relpath(url_explicit_port))
798
 
 
799
 
    def test_construct_with_no_port(self):
800
 
        """If no port is specified, then the SSH-based transport's _port will
801
 
        be None.
802
 
        """
803
 
        t = get_transport(self.make_url('host.com'))
804
 
        self.assertEquals(None, t._port)
805
 
 
806
 
    def test_url_with_no_port(self):
807
 
        """If no port was specified, none is shown in the base URL."""
808
 
        t = get_transport(self.make_url('host.com'))
809
 
        self.assertEquals(self.make_url('host.com'), t.base)
810
 
 
811
 
    def test_url_includes_port(self):
812
 
        """An SSH-based transport's base will show the port if one was
813
 
        specified, even if that port is 22, because we do not assume 22 is the
814
 
        default port.
815
 
        """
816
 
        # 22 is the "standard" port for SFTP.
817
 
        t = get_transport(self.make_url('host.com:22'))
818
 
        self.assertEquals(self.make_url('host.com:22'), t.base)
819
 
        # 666 is not a standard port.
820
 
        t = get_transport(self.make_url('host.com:666'))
821
 
        self.assertEquals(self.make_url('host.com:666'), t.base)
822
 
 
823
 
 
824
 
class SFTPTransportPortTest(TestCase, SSHPortTestMixin):
825
 
    """Tests for sftp:// transport (SFTPTransport)."""
826
 
 
827
 
    scheme = 'sftp'
828
 
 
829
 
 
830
 
class BzrSSHTransportPortTest(TestCase, SSHPortTestMixin):
831
 
    """Tests for bzr+ssh:// transport (RemoteSSHTransport)."""
832
 
 
833
 
    scheme = 'bzr+ssh'
834
 
 
835
 
 
836
718
class TestTransportTrace(TestCase):
837
719
 
838
720
    def test_get(self):