net-sftp 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/doc/LICENSE-BSD +27 -0
 - data/doc/LICENSE-GPL +280 -0
 - data/doc/LICENSE-RUBY +56 -0
 - data/examples/asynchronous.rb +57 -0
 - data/examples/ssh-service.rb +31 -0
 - data/examples/synchronous.rb +120 -0
 - data/lib/net/sftp.rb +39 -0
 - data/lib/net/sftp/errors.rb +25 -0
 - data/lib/net/sftp/operations/abstract.rb +103 -0
 - data/lib/net/sftp/operations/close.rb +31 -0
 - data/lib/net/sftp/operations/errors.rb +76 -0
 - data/lib/net/sftp/operations/fsetstat.rb +36 -0
 - data/lib/net/sftp/operations/fstat.rb +32 -0
 - data/lib/net/sftp/operations/lstat.rb +31 -0
 - data/lib/net/sftp/operations/mkdir.rb +33 -0
 - data/lib/net/sftp/operations/open.rb +32 -0
 - data/lib/net/sftp/operations/opendir.rb +32 -0
 - data/lib/net/sftp/operations/read.rb +84 -0
 - data/lib/net/sftp/operations/readdir.rb +55 -0
 - data/lib/net/sftp/operations/realpath.rb +37 -0
 - data/lib/net/sftp/operations/remove.rb +31 -0
 - data/lib/net/sftp/operations/rename.rb +32 -0
 - data/lib/net/sftp/operations/rmdir.rb +31 -0
 - data/lib/net/sftp/operations/services.rb +42 -0
 - data/lib/net/sftp/operations/setstat.rb +33 -0
 - data/lib/net/sftp/operations/stat.rb +31 -0
 - data/lib/net/sftp/operations/write.rb +63 -0
 - data/lib/net/sftp/protocol/01/attributes.rb +146 -0
 - data/lib/net/sftp/protocol/01/impl.rb +251 -0
 - data/lib/net/sftp/protocol/01/packet-assistant.rb +82 -0
 - data/lib/net/sftp/protocol/01/services.rb +47 -0
 - data/lib/net/sftp/protocol/02/impl.rb +39 -0
 - data/lib/net/sftp/protocol/02/packet-assistant.rb +32 -0
 - data/lib/net/sftp/protocol/02/services.rb +44 -0
 - data/lib/net/sftp/protocol/03/impl.rb +42 -0
 - data/lib/net/sftp/protocol/03/packet-assistant.rb +35 -0
 - data/lib/net/sftp/protocol/03/services.rb +44 -0
 - data/lib/net/sftp/protocol/04/attributes.rb +227 -0
 - data/lib/net/sftp/protocol/04/impl.rb +134 -0
 - data/lib/net/sftp/protocol/04/packet-assistant.rb +51 -0
 - data/lib/net/sftp/protocol/04/services.rb +44 -0
 - data/lib/net/sftp/protocol/05/services.rb +44 -0
 - data/lib/net/sftp/protocol/constants.rb +60 -0
 - data/lib/net/sftp/protocol/driver.rb +232 -0
 - data/lib/net/sftp/protocol/packet-assistant.rb +84 -0
 - data/lib/net/sftp/protocol/services.rb +55 -0
 - data/lib/net/sftp/session.rb +215 -0
 - data/lib/net/sftp/version.rb +25 -0
 - data/test/ALL-TESTS.rb +21 -0
 - data/test/operations/tc_abstract.rb +124 -0
 - data/test/operations/tc_close.rb +40 -0
 - data/test/operations/tc_fsetstat.rb +48 -0
 - data/test/operations/tc_fstat.rb +40 -0
 - data/test/operations/tc_lstat.rb +40 -0
 - data/test/operations/tc_mkdir.rb +48 -0
 - data/test/operations/tc_open.rb +42 -0
 - data/test/operations/tc_opendir.rb +40 -0
 - data/test/operations/tc_read.rb +103 -0
 - data/test/operations/tc_readdir.rb +88 -0
 - data/test/operations/tc_realpath.rb +54 -0
 - data/test/operations/tc_remove.rb +40 -0
 - data/test/operations/tc_rmdir.rb +40 -0
 - data/test/operations/tc_setstat.rb +48 -0
 - data/test/operations/tc_stat.rb +40 -0
 - data/test/operations/tc_write.rb +91 -0
 - data/test/protocol/01/tc_attributes.rb +138 -0
 - data/test/protocol/01/tc_impl.rb +294 -0
 - data/test/protocol/01/tc_packet_assistant.rb +81 -0
 - data/test/protocol/02/tc_impl.rb +41 -0
 - data/test/protocol/02/tc_packet_assistant.rb +31 -0
 - data/test/protocol/03/tc_impl.rb +48 -0
 - data/test/protocol/03/tc_packet_assistant.rb +34 -0
 - data/test/protocol/04/tc_attributes.rb +174 -0
 - data/test/protocol/04/tc_impl.rb +102 -0
 - data/test/protocol/04/tc_packet_assistant.rb +41 -0
 - data/test/protocol/tc_driver.rb +219 -0
 - metadata +137 -0
 
| 
         @@ -0,0 +1,54 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/realpath'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_Realpath < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Realpath.new( @log, @session, @driver )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_perform
         
     | 
| 
      
 33 
     | 
    
         
            +
                id = path = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                @driver.mock_handle( :realpath ) { |i,p| id, path = i, p; 10 }
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo" )
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "foo", path
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def test_do_name
         
     | 
| 
      
 41 
     | 
    
         
            +
                @session.mock_handle( :loop )
         
     | 
| 
      
 42 
     | 
    
         
            +
                @session.mock_handle( :status= )
         
     | 
| 
      
 43 
     | 
    
         
            +
                @session.mock_handle( :register )
         
     | 
| 
      
 44 
     | 
    
         
            +
                @driver.mock_handle( :realpath )
         
     | 
| 
      
 45 
     | 
    
         
            +
                @log.mock_handle( :debug? )
         
     | 
| 
      
 46 
     | 
    
         
            +
                @log.mock_handle( :debug )
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                called = false
         
     | 
| 
      
 49 
     | 
    
         
            +
                @operation.execute( "foo" ) { |s,v| called = v }
         
     | 
| 
      
 50 
     | 
    
         
            +
                @operation.do_name( [ :a, :b ] )
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal :a, called
         
     | 
| 
      
 52 
     | 
    
         
            +
              end
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/remove'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_Remove < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Remove.new( @log, @session, @driver )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_perform
         
     | 
| 
      
 33 
     | 
    
         
            +
                id = filename = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                @driver.mock_handle( :remove ) { |i,f,m| id, filename = i, f; 10 }
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo" )
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "foo", filename
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/rmdir'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_Rmdir < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Rmdir.new( @log, @session, @driver )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_perform
         
     | 
| 
      
 33 
     | 
    
         
            +
                id = path = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                @driver.mock_handle( :rmdir ) { |i,p| id, path = i, p; 10 }
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo" )
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "foo", path
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,48 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/setstat'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_setstat < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                @attr_factory = FlexMock.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                @driver.mock_handle( :attr_factory ) { @attr_factory }
         
     | 
| 
      
 31 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Setstat.new( @log, @session, @driver )
         
     | 
| 
      
 32 
     | 
    
         
            +
              end
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
              def test_perform
         
     | 
| 
      
 35 
     | 
    
         
            +
                hash = nil
         
     | 
| 
      
 36 
     | 
    
         
            +
                @attr_factory.mock_handle( :from_hash ) { |h| hash = h; :foo }
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                id = path = attrs = nil
         
     | 
| 
      
 39 
     | 
    
         
            +
                @driver.mock_handle( :setstat ) { |i,p,a| id, path, attrs = i, p, a; 10 }
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo", "bar" )
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_equal "foo", path
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_equal "bar", hash
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert_equal :foo, attrs
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,40 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/stat'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_Stat < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 28 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Stat.new( @log, @session, @driver )
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def test_perform
         
     | 
| 
      
 33 
     | 
    
         
            +
                id = path = nil
         
     | 
| 
      
 34 
     | 
    
         
            +
                @driver.mock_handle( :stat ) { |i,p| id, path = i, p; 10 }
         
     | 
| 
      
 35 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo" )
         
     | 
| 
      
 36 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 37 
     | 
    
         
            +
                assert_equal "foo", path
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,91 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/operations/write'
         
     | 
| 
      
 21 
     | 
    
         
            +
            require 'flexmock'
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            class TC_Operations_Write < Test::Unit::TestCase
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 26 
     | 
    
         
            +
                @log = FlexMock.new
         
     | 
| 
      
 27 
     | 
    
         
            +
                @log.mock_handle( :debug? )
         
     | 
| 
      
 28 
     | 
    
         
            +
                @log.mock_handle( :debug )
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
                @session = FlexMock.new
         
     | 
| 
      
 31 
     | 
    
         
            +
                @driver = FlexMock.new
         
     | 
| 
      
 32 
     | 
    
         
            +
                @operation = Net::SFTP::Operations::Write.new( @log, @session, @driver )
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              def test_perform_defaults
         
     | 
| 
      
 36 
     | 
    
         
            +
                id = handle = offset = data = nil
         
     | 
| 
      
 37 
     | 
    
         
            +
                @driver.mock_handle( :write ) { |i,h,o,d| id, handle, offset, data = i, h, o, d; 10 }
         
     | 
| 
      
 38 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo", "data" )
         
     | 
| 
      
 39 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 40 
     | 
    
         
            +
                assert_equal "foo", handle
         
     | 
| 
      
 41 
     | 
    
         
            +
                assert_equal "data", data
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_equal 0, offset
         
     | 
| 
      
 43 
     | 
    
         
            +
              end
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
              def test_perform_explicit
         
     | 
| 
      
 46 
     | 
    
         
            +
                id = handle = offset = data = nil
         
     | 
| 
      
 47 
     | 
    
         
            +
                @driver.mock_handle( :write ) { |i,h,o,d| id, handle, offset, data = i, h, o, d; 10 }
         
     | 
| 
      
 48 
     | 
    
         
            +
                assert_equal 10, @operation.perform( "foo", "data", 15 )
         
     | 
| 
      
 49 
     | 
    
         
            +
                assert_nil id
         
     | 
| 
      
 50 
     | 
    
         
            +
                assert_equal "foo", handle
         
     | 
| 
      
 51 
     | 
    
         
            +
                assert_equal "data", data
         
     | 
| 
      
 52 
     | 
    
         
            +
                assert_equal 15, offset
         
     | 
| 
      
 53 
     | 
    
         
            +
              end
         
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
              def test_do_status_bad
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert_raise( Net::SFTP::Operations::StatusException ) do
         
     | 
| 
      
 57 
     | 
    
         
            +
                  @operation.do_status( 5, nil, nil )
         
     | 
| 
      
 58 
     | 
    
         
            +
                end
         
     | 
| 
      
 59 
     | 
    
         
            +
              end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
              def test_do_status_ok_more_chunks
         
     | 
| 
      
 62 
     | 
    
         
            +
                @log.mock_handle :debug?
         
     | 
| 
      
 63 
     | 
    
         
            +
                @log.mock_handle :debug
         
     | 
| 
      
 64 
     | 
    
         
            +
                @session.mock_handle :register
         
     | 
| 
      
 65 
     | 
    
         
            +
                @session.mock_handle :status=
         
     | 
| 
      
 66 
     | 
    
         
            +
                @session.mock_handle :loop
         
     | 
| 
      
 67 
     | 
    
         
            +
                @driver.mock_handle :write
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
                @operation.execute( "foo", "1234567890" * 7000 )
         
     | 
| 
      
 70 
     | 
    
         
            +
                @operation.do_status( 0, :a, :b )
         
     | 
| 
      
 71 
     | 
    
         
            +
                assert_equal 2, @driver.mock_count( :write )
         
     | 
| 
      
 72 
     | 
    
         
            +
                assert_equal 2, @session.mock_count( :register )
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              def test_do_status_ok_done
         
     | 
| 
      
 76 
     | 
    
         
            +
                @log.mock_handle :debug?
         
     | 
| 
      
 77 
     | 
    
         
            +
                @log.mock_handle :debug
         
     | 
| 
      
 78 
     | 
    
         
            +
                @session.mock_handle :register
         
     | 
| 
      
 79 
     | 
    
         
            +
                @session.mock_handle :status=
         
     | 
| 
      
 80 
     | 
    
         
            +
                @session.mock_handle :loop
         
     | 
| 
      
 81 
     | 
    
         
            +
                @driver.mock_handle :write
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
                called = false
         
     | 
| 
      
 84 
     | 
    
         
            +
                @operation.execute( "foo", "1234567890" ) { called = true }
         
     | 
| 
      
 85 
     | 
    
         
            +
                @operation.do_status( 0, :a, :b )
         
     | 
| 
      
 86 
     | 
    
         
            +
                assert_equal 1, @driver.mock_count( :write )
         
     | 
| 
      
 87 
     | 
    
         
            +
                assert_equal 1, @session.mock_count( :register )
         
     | 
| 
      
 88 
     | 
    
         
            +
                assert called
         
     | 
| 
      
 89 
     | 
    
         
            +
              end
         
     | 
| 
      
 90 
     | 
    
         
            +
             
     | 
| 
      
 91 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,138 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #--
         
     | 
| 
      
 2 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 3 
     | 
    
         
            +
            # Copyright (c) 2004, Jamis Buck (jgb3@email.byu.edu)
         
     | 
| 
      
 4 
     | 
    
         
            +
            # All rights reserved.
         
     | 
| 
      
 5 
     | 
    
         
            +
            #
         
     | 
| 
      
 6 
     | 
    
         
            +
            # This source file is distributed as part of the Net::SFTP Secure FTP Client
         
     | 
| 
      
 7 
     | 
    
         
            +
            # library for Ruby. This file (and the library as a whole) may be used only as
         
     | 
| 
      
 8 
     | 
    
         
            +
            # allowed by either the BSD license, or the Ruby license (or, by association
         
     | 
| 
      
 9 
     | 
    
         
            +
            # with the Ruby license, the GPL). See the "doc" subdirectory of the Net::SFTP
         
     | 
| 
      
 10 
     | 
    
         
            +
            # distribution for the texts of these licenses.
         
     | 
| 
      
 11 
     | 
    
         
            +
            # -----------------------------------------------------------------------------
         
     | 
| 
      
 12 
     | 
    
         
            +
            # net-sftp website: http://net-ssh.rubyforge.org/sftp
         
     | 
| 
      
 13 
     | 
    
         
            +
            # project website : http://rubyforge.org/projects/net-ssh
         
     | 
| 
      
 14 
     | 
    
         
            +
            # =============================================================================
         
     | 
| 
      
 15 
     | 
    
         
            +
            #++
         
     | 
| 
      
 16 
     | 
    
         
            +
             
     | 
| 
      
 17 
     | 
    
         
            +
            $:.unshift "../../../lib"
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            require 'test/unit'
         
     | 
| 
      
 20 
     | 
    
         
            +
            require 'net/sftp/protocol/01/attributes'
         
     | 
| 
      
 21 
     | 
    
         
            +
             
     | 
| 
      
 22 
     | 
    
         
            +
            require 'net/ssh'
         
     | 
| 
      
 23 
     | 
    
         
            +
            require 'net/ssh/util/buffer'
         
     | 
| 
      
 24 
     | 
    
         
            +
             
     | 
| 
      
 25 
     | 
    
         
            +
            class TC_01_Attributes < Test::Unit::TestCase
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
      
 27 
     | 
    
         
            +
              class Buffers
         
     | 
| 
      
 28 
     | 
    
         
            +
                def writer
         
     | 
| 
      
 29 
     | 
    
         
            +
                  Net::SSH::Util::WriterBuffer.new
         
     | 
| 
      
 30 
     | 
    
         
            +
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
                def reader( text )
         
     | 
| 
      
 32 
     | 
    
         
            +
                  Net::SSH::Util::ReaderBuffer.new( text )
         
     | 
| 
      
 33 
     | 
    
         
            +
                end
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def setup
         
     | 
| 
      
 37 
     | 
    
         
            +
                @factory = Net::SFTP::Protocol::V_01::Attributes.init( Buffers.new )
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def test_empty
         
     | 
| 
      
 41 
     | 
    
         
            +
                empty = @factory.empty
         
     | 
| 
      
 42 
     | 
    
         
            +
                assert_nil empty.size
         
     | 
| 
      
 43 
     | 
    
         
            +
                assert_nil empty.uid
         
     | 
| 
      
 44 
     | 
    
         
            +
                assert_nil empty.gid
         
     | 
| 
      
 45 
     | 
    
         
            +
                assert_nil empty.permissions
         
     | 
| 
      
 46 
     | 
    
         
            +
                assert_nil empty.atime
         
     | 
| 
      
 47 
     | 
    
         
            +
                assert_nil empty.mtime
         
     | 
| 
      
 48 
     | 
    
         
            +
                assert_nil empty.extended
         
     | 
| 
      
 49 
     | 
    
         
            +
                assert_equal "\0\0\0\0", empty.to_s
         
     | 
| 
      
 50 
     | 
    
         
            +
              end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
              def test_from_buffer_empty
         
     | 
| 
      
 53 
     | 
    
         
            +
                buffer = @factory.buffers.reader( "\0\0\0\0" )
         
     | 
| 
      
 54 
     | 
    
         
            +
                attrs = @factory.from_buffer( buffer )
         
     | 
| 
      
 55 
     | 
    
         
            +
                assert_nil attrs.size
         
     | 
| 
      
 56 
     | 
    
         
            +
                assert_nil attrs.uid
         
     | 
| 
      
 57 
     | 
    
         
            +
                assert_nil attrs.gid
         
     | 
| 
      
 58 
     | 
    
         
            +
                assert_nil attrs.permissions
         
     | 
| 
      
 59 
     | 
    
         
            +
                assert_nil attrs.atime
         
     | 
| 
      
 60 
     | 
    
         
            +
                assert_nil attrs.mtime
         
     | 
| 
      
 61 
     | 
    
         
            +
                assert_nil attrs.extended
         
     | 
| 
      
 62 
     | 
    
         
            +
                assert_equal "\0\0\0\0", attrs.to_s
         
     | 
| 
      
 63 
     | 
    
         
            +
              end
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
              ATTRIBUTES = 
         
     | 
| 
      
 66 
     | 
    
         
            +
                [ [ 1, "\1\2\3\4\5\6\7\10", :size, 0x0102030405060708 ],
         
     | 
| 
      
 67 
     | 
    
         
            +
                  [ 2, "\11\12\13\14\15\16\17\20", :uid, 0x090A0B0C ],
         
     | 
| 
      
 68 
     | 
    
         
            +
                  [ 2, "\11\12\13\14\15\16\17\20", :gid, 0x0D0E0F10 ],
         
     | 
| 
      
 69 
     | 
    
         
            +
                  [ 4, "\21\22\23\24", :permissions, 0x11121314 ],
         
     | 
| 
      
 70 
     | 
    
         
            +
                  [ 8, "\25\26\27\30\31\32\33\34", :atime, 0x15161718 ],
         
     | 
| 
      
 71 
     | 
    
         
            +
                  [ 8, "\25\26\27\30\31\32\33\34", :mtime, 0x191A1B1C ],
         
     | 
| 
      
 72 
     | 
    
         
            +
                  [ 0x80000000,
         
     | 
| 
      
 73 
     | 
    
         
            +
                    "\0\0\0\4" +
         
     | 
| 
      
 74 
     | 
    
         
            +
                    "\0\0\0\01a\0\0\0\01b" +
         
     | 
| 
      
 75 
     | 
    
         
            +
                    "\0\0\0\01c\0\0\0\01d" +
         
     | 
| 
      
 76 
     | 
    
         
            +
                    "\0\0\0\01e\0\0\0\01f" +
         
     | 
| 
      
 77 
     | 
    
         
            +
                    "\0\0\0\01g\0\0\0\01h",
         
     | 
| 
      
 78 
     | 
    
         
            +
                    :extended,
         
     | 
| 
      
 79 
     | 
    
         
            +
                    { "a" => "b", "c" => "d", "e" => "f", "g" => "h" } ] ]
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
              # find all possible combinations of the elements of ATTRIBUTES
         
     | 
| 
      
 82 
     | 
    
         
            +
              # (i.e., 'n' choose k, for k in [1..ATTRIBUTES.length]).
         
     | 
| 
      
 83 
     | 
    
         
            +
              def self.choose( from, k )
         
     | 
| 
      
 84 
     | 
    
         
            +
                result = []
         
     | 
| 
      
 85 
     | 
    
         
            +
                ( from.length - k + 1 ).times do |i|
         
     | 
| 
      
 86 
     | 
    
         
            +
                  if i+1 < from.length && k > 1
         
     | 
| 
      
 87 
     | 
    
         
            +
                    choose( from[i+1..-1], k-1 ).each do |chosen|
         
     | 
| 
      
 88 
     | 
    
         
            +
                      result << [ from[i], *chosen ]
         
     | 
| 
      
 89 
     | 
    
         
            +
                    end
         
     | 
| 
      
 90 
     | 
    
         
            +
                  else
         
     | 
| 
      
 91 
     | 
    
         
            +
                    result << [ from[i] ]
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
                result
         
     | 
| 
      
 95 
     | 
    
         
            +
              end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
              method_id = 0
         
     | 
| 
      
 98 
     | 
    
         
            +
              ATTRIBUTES.length.times do |k|
         
     | 
| 
      
 99 
     | 
    
         
            +
                choose( ATTRIBUTES, k+1 ).each do |attrs|
         
     | 
| 
      
 100 
     | 
    
         
            +
                  define_method( "test_attributes_%03d" % method_id ) do
         
     | 
| 
      
 101 
     | 
    
         
            +
                    flags = 0
         
     | 
| 
      
 102 
     | 
    
         
            +
                    buffer = ""
         
     | 
| 
      
 103 
     | 
    
         
            +
                    attrs.each do |a|
         
     | 
| 
      
 104 
     | 
    
         
            +
                      if ( flags & a[0] ) == 0
         
     | 
| 
      
 105 
     | 
    
         
            +
                        flags |= a[0]
         
     | 
| 
      
 106 
     | 
    
         
            +
                        buffer += a[1]
         
     | 
| 
      
 107 
     | 
    
         
            +
                      end
         
     | 
| 
      
 108 
     | 
    
         
            +
                    end
         
     | 
| 
      
 109 
     | 
    
         
            +
                    buffer = [ flags, buffer ].pack( "NA*" )
         
     | 
| 
      
 110 
     | 
    
         
            +
                    input = @factory.buffers.reader( buffer )
         
     | 
| 
      
 111 
     | 
    
         
            +
                    obj = @factory.from_buffer( input )
         
     | 
| 
      
 112 
     | 
    
         
            +
                    attrs.each { |a| assert_equal a[3], obj.__send__( a[2] ) }
         
     | 
| 
      
 113 
     | 
    
         
            +
                    assert_equal buffer, obj.to_s
         
     | 
| 
      
 114 
     | 
    
         
            +
                  end
         
     | 
| 
      
 115 
     | 
    
         
            +
                  method_id += 1
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
              end
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
              require 'etc'
         
     | 
| 
      
 120 
     | 
    
         
            +
              [
         
     | 
| 
      
 121 
     | 
    
         
            +
                [ { :size => 1000 }, :size, 1000, :uid ],
         
     | 
| 
      
 122 
     | 
    
         
            +
                [ { :uid => 1000 }, :uid, 1000 ],
         
     | 
| 
      
 123 
     | 
    
         
            +
                [ { :gid => 1000 }, :gid, 1000 ],
         
     | 
| 
      
 124 
     | 
    
         
            +
                [ { :permissions => 0600 }, :permissions, 0600 ],
         
     | 
| 
      
 125 
     | 
    
         
            +
                [ { :atime => 123456 }, :atime, 123456 ],
         
     | 
| 
      
 126 
     | 
    
         
            +
                [ { :mtime => 789012 }, :mtime, 789012 ],
         
     | 
| 
      
 127 
     | 
    
         
            +
                [ { :extended => { "foo" => "bar" } }, :extended, { "foo" => "bar" } ],
         
     | 
| 
      
 128 
     | 
    
         
            +
                [ { :owner => ENV['USER'] }, :uid, Etc.getpwnam(ENV['USER']).uid ],
         
     | 
| 
      
 129 
     | 
    
         
            +
                [ { :group => 'root' }, :gid, Etc.getpwnam('root').uid ]
         
     | 
| 
      
 130 
     | 
    
         
            +
              ].each do |fixture|
         
     | 
| 
      
 131 
     | 
    
         
            +
                define_method( "test_from_hash_#{fixture[1]}" ) do
         
     | 
| 
      
 132 
     | 
    
         
            +
                  attrs = @factory.from_hash( fixture[0] )
         
     | 
| 
      
 133 
     | 
    
         
            +
                  assert_equal fixture[2], attrs.__send__( fixture[1] )
         
     | 
| 
      
 134 
     | 
    
         
            +
                  assert_nil attrs.__send__( fixture[3] || :size )
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
              end
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            end
         
     |