1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
|
require 'common'
require 'net/ssh/transport/state'
module Transport
class TestState < Test::Unit::TestCase
def setup
@socket = @state = @deflater = @inflater = nil
end
def teardown
if @deflater
@deflater.finish if !@deflater.finished?
@deflater.close
end
if @inflater
@inflater.finish if !@inflater.finished?
@inflater.close
end
state.cleanup
end
def test_constructor_should_initialize_all_values
assert_equal 0, state.sequence_number
assert_equal 0, state.packets
assert_equal 0, state.blocks
assert_nil state.compression
assert_nil state.compression_level
assert_nil state.max_packets
assert_nil state.max_blocks
assert_nil state.rekey_limit
assert_equal "identity", state.cipher.name
assert_instance_of Net::SSH::Transport::HMAC::None, state.hmac
end
def test_increment_should_increment_counters
state.increment(24)
assert_equal 1, state.sequence_number
assert_equal 1, state.packets
assert_equal 3, state.blocks
end
def test_reset_should_reset_counters_and_fix_defaults_for_maximums
state.increment(24)
state.reset!
assert_equal 1, state.sequence_number
assert_equal 0, state.packets
assert_equal 0, state.blocks
assert_equal 2147483648, state.max_packets
assert_equal 134217728, state.max_blocks
end
def test_set_should_set_variables_and_reset_counters
state.expects(:reset!)
state.set :cipher => :a, :hmac => :b, :compression => :c,
:compression_level => :d, :max_packets => 500, :max_blocks => 1000,
:rekey_limit => 1500
assert_equal :a, state.cipher
assert_equal :b, state.hmac
assert_equal :c, state.compression
assert_equal :d, state.compression_level
assert_equal 500, state.max_packets
assert_equal 1000, state.max_blocks
assert_equal 1500, state.rekey_limit
end
def test_set_with_max_packets_should_respect_max_packets_setting
state.set :max_packets => 500
assert_equal 500, state.max_packets
end
def test_set_with_max_blocks_should_respect_max_blocks_setting
state.set :max_blocks => 1000
assert_equal 1000, state.max_blocks
end
def test_set_with_rekey_limit_should_include_rekey_limit_in_computation_of_max_blocks
state.set :rekey_limit => 4000
assert_equal 500, state.max_blocks
end
def test_compressor_defaults_to_default_zlib_compression
expect = deflater.deflate("hello world")
assert_equal expect, state.compressor.deflate("hello world")
end
def test_compressor_uses_compression_level_when_given
state.set :compression_level => 1
expect = deflater(1).deflate("hello world")
assert_equal expect, state.compressor.deflate("hello world")
end
def test_compress_when_no_compression_is_active_returns_text
assert_equal "hello everybody", state.compress("hello everybody")
end
def test_decompress_when_no_compression_is_active_returns_text
assert_equal "hello everybody", state.decompress("hello everybody")
end
def test_compress_when_compression_is_delayed_and_no_auth_hint_is_set_should_return_text
state.set :compression => :delayed
assert_equal "hello everybody", state.compress("hello everybody")
end
def test_decompress_when_compression_is_delayed_and_no_auth_hint_is_set_should_return_text
state.set :compression => :delayed
assert_equal "hello everybody", state.decompress("hello everybody")
end
def test_compress_when_compression_is_enabled_should_return_compressed_text
state.set :compression => :standard
# JRuby Zlib implementation (1.4 & 1.5) does not have byte-to-byte compatibility with MRI's.
# skip this test under JRuby.
return if defined?(JRUBY_VERSION)
assert_equal "x\234\312H\315\311\311WH-K-\252L\312O\251\004\000\000\000\377\377", state.compress("hello everybody")
end
def test_decompress_when_compression_is_enabled_should_return_decompressed_text
state.set :compression => :standard
# JRuby Zlib implementation (1.4 & 1.5) does not have byte-to-byte compatibility with MRI's.
# skip this test under JRuby.
return if defined?(JRUBY_VERSION)
assert_equal "hello everybody", state.decompress("x\234\312H\315\311\311WH-K-\252L\312O\251\004\000\000\000\377\377")
end
def test_compress_when_compression_is_delayed_and_auth_hint_is_set_should_return_compressed_text
socket.hints[:authenticated] = true
state.set :compression => :delayed
assert_equal "x\234\312H\315\311\311WH-K-\252L\312O\251\004\000\000\000\377\377", state.compress("hello everybody")
end
def test_decompress_when_compression_is_delayed_and_auth_hint_is_set_should_return_decompressed_text
socket.hints[:authenticated] = true
state.set :compression => :delayed
assert_equal "hello everybody", state.decompress("x\234\312H\315\311\311WH-K-\252L\312O\251\004\000\000\000\377\377")
end
def test_needs_rekey_should_be_true_if_packets_exceeds_max_packets
state.set :max_packets => 2
state.increment(8)
state.increment(8)
assert !state.needs_rekey?
state.increment(8)
assert state.needs_rekey?
end
def test_needs_rekey_should_be_true_if_blocks_exceeds_max_blocks
state.set :max_blocks => 10
assert !state.needs_rekey?
state.increment(88)
assert state.needs_rekey?
end
private
def deflater(level=Zlib::DEFAULT_COMPRESSION)
@deflater ||= Zlib::Deflate.new(level)
end
def inflater
@inflater ||= Zlib::Inflate.new(nil)
end
def socket
@socket ||= stub("socket", :hints => {})
end
def state
@state ||= Net::SSH::Transport::State.new(socket, :test)
end
end
end
|