expect4r 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 46b8625696193f9bb771295b2241b1d883ad31c7
4
- data.tar.gz: aea806dc760988161a7fe2dfaa31de9930e4af35
3
+ metadata.gz: 5aa5393e09b5722f0282f34ca2b5934cf2ec1a18
4
+ data.tar.gz: 3f2ce75b6fdd1ce11a1361486b6bbe888a5beaf4
5
5
  SHA512:
6
- metadata.gz: 524998e2c125d35b21b53a5ca329b6bf74f4a293289469f0d9d8d99ae5bbcc7622b29d220cd9f6e7d4fff221ff4d51ba3bb524c9024503cfcbb2df6059a4067b
7
- data.tar.gz: 421532f69db8e08bd329901d82080206ce1ce8c75181fa5012db558e047dc1aea29a0d4dc9c666db54083ef340935a79b6a7bc88cb14b6fcfe5fe10159fc8051
6
+ metadata.gz: 7c625dcbaaaf07ea6dbc25e3c66c46e243fe43b8071a9fea075f23816892c5a2a4d86e92e54bcdd6c62c4f8af0afce0f185721b2e5e2ab0ba8d370662120bc94
7
+ data.tar.gz: 03190a168deefeb21efe1d8100425b0cd38f67e170201e8952939d6b641d70524d9287a8c94023f952186da7f13492b1d6841b153039794c699e38028961eeee
@@ -0,0 +1,128 @@
1
+ === 0.0.11 Thu Sep 18, 2014
2
+
3
+ * Adding connection retry mechanism.
4
+ When enabled, instead of getting an IO error when attempting to read or write from a disconnected session,
5
+ the connection will get re-established and the read or write command retried.
6
+
7
+ s = Expect4r::Ios.new_ssh ...
8
+ s.connect_retry
9
+ s.connect_retry=
10
+ s.login
11
+
12
+ Connection retry is disabled by default:
13
+ irb > s.connect_retry
14
+ => 0
15
+ to enable it, set then number of connection retry attemtpts:
16
+ irb > s.connect_retry= 10
17
+ => 10
18
+
19
+ * Stopped using jeweler to generate Gemfile.
20
+
21
+ === 0.0.10 Tue Aug 6, 2013
22
+
23
+ * Adding support ios enable password
24
+
25
+ * Fix an issue reported by Gael Leonet where the ios default login banner
26
+ is getting in the way of matching the username.
27
+
28
+ === 0.0.9 Sat Feb 9, 2013
29
+
30
+ * Fix few issues when telnetting to ios
31
+ send \r instead of \n to get to enabled mode
32
+ don't try and derive enable_password from password if no password
33
+
34
+ * Vyatta:
35
+ add on_error block for ping
36
+
37
+ * moved Base class out of io.rb to misc/base.rb
38
+
39
+ * Update gem file
40
+ add misc/base.rb
41
+
42
+
43
+ === 0.0.8 Mon Feb 20, 2012
44
+
45
+ * add V (vyatta) class
46
+
47
+ V.new :ssh, :user=>'vyatta', :pwd=>'vyatta', :host=>'hostname'
48
+ V.new_ssh 'hostname' (default user to vyatta and pwd to vyatta)
49
+ V.new_ssh :host=> 'hostname', :user=>'root', :pwd=>'123'
50
+
51
+ V.new :telnet, :user=>'vyatta', :pwd=>'vyatta', :host=>'hostname'
52
+ V.new_telnet 'hostname' (default user to vyatta and pwd to vyatta)
53
+ V.new_telnet :host=> 'hostname', :user=>'root', :pwd=>'123'
54
+
55
+ v.ping '10.0.0.1'
56
+ v.ping('10.0.0.1', :count=>5) { |r| r.interact }
57
+ v.ping('10.0.0.1', :count=>5, :size=>512, ...) { |r| r.interact }
58
+
59
+ * modify ping to accept a block to be exececuted on error
60
+ eg,
61
+ r.ping('10.0.0.1', :count=> 100, :size=>512) { |r| r.interact }
62
+
63
+ === 0.0.7.dev Thu Dec 16, 2010
64
+
65
+ * fix _io_save bug when no_echo
66
+ * add matches to expect()
67
+ * readline return empty string when timeout
68
+
69
+ === 0.0.6.dev Sun Nov 28, 2010
70
+
71
+ * bug fix in Base class
72
+ * matches to accept String or Proc
73
+
74
+ === 0.0.5.dev Sat Nov 13, 2010
75
+
76
+ * new Expect4r::Base class
77
+ * Fixes
78
+
79
+ === 0.0.4.dev Sat Oct 30, 2010
80
+
81
+ * Fixes
82
+
83
+ === 0.0.3 dev Wed Oct 27, 2010
84
+
85
+ * Added a RShell class
86
+
87
+ * Added login_via method so as to login to a box from another.
88
+
89
+ iox = Iox.new_telnet 'router', 'user'
90
+ iox.login_via RShell.new_ssh('hostname', 'user')
91
+
92
+ === 0.0.2.dev Tue Oct 26, 2010
93
+
94
+ * Added Junos#ping
95
+ * Numerous fixes and improvements to CisoCommon#ping
96
+
97
+ === 0.0.1.dev Mon Oct 25, 2010
98
+
99
+ * Initial release.
100
+
101
+ While this is still work in progress and buggy, it already allows to:
102
+
103
+ + login to a Cisco router running IOS or IOS-XR or a Juniper router running Junos.
104
+ + push configuration using #config() method
105
+ + pull states using #show() method
106
+ + check connectivity state using #ping() (not yet implemented for J class)
107
+
108
+ Provides following:
109
+
110
+ Classes:
111
+ Expect4r::Ios
112
+ Expect4r::Iox
113
+ Expect4r::J
114
+
115
+ Class methods:
116
+ new
117
+ new_ssh
118
+ new_telnet
119
+
120
+ Instance methods:
121
+ login
122
+ logout
123
+ config
124
+ show
125
+ shell
126
+ exec
127
+ in?
128
+ ping
@@ -20,6 +20,37 @@ You talk to routers by connecting to them using ssh or telnet and send exec or c
20
20
  my_mac = RShell.new_ssh 'mac', 'me'
21
21
  router = Iox.new_telnet 'hostname', 'username'
22
22
  router.login_via my_mac
23
+
24
+ * Re-establish connection
25
+
26
+ irb> localhost = Expect4r::BaseLoginObject.new_ssh :hostname=>'localhost'
27
+ irb> localhost.connect_retry=10
28
+ irb> localhost.login
29
+ irb> localhost.interact
30
+ irb> s.interact
31
+
32
+ #
33
+ # ^T to terminate.
34
+ #
35
+
36
+ [jme@localhost ~]$ ps -ax | grep localhost
37
+ 5497 pts/8 Ss+ 0:00 ssh localhost
38
+ 5592 pts/9 S+ 0:00 grep --color=auto localhost
39
+ [jme@localhost ~]$ kill 5497
40
+ Killed by signal 15.
41
+
42
+ [jme@localhost ~]$
43
+ [jme@localhost ~]$ ls
44
+ Desktop Downloads Music Public Videos
45
+ Documents expect4r-0.0.11.gem Pictures Templates
46
+ [jme@localhost ~]$ ps -ax | grep localhost
47
+ 5648 pts/9 Ss+ 0:00 ssh localhost
48
+ 5777 pts/10 S+ 0:00 grep --color=auto localhost
49
+ [jme@localhost ~]$
50
+ [jme@localhost ~]$ ^T
51
+ irb>
52
+
53
+
23
54
 
24
55
  * Push configurations to routers
25
56
 
@@ -41,7 +72,7 @@ You talk to routers by connecting to them using ssh or telnet and send exec or c
41
72
  interface GigabitEthernet0/2/0/0
42
73
  desc to switch port 13'
43
74
  ipv4 address 190.0.0.9 255.255.255.252'
44
- no shut'
75
+ no shut
45
76
  |
46
77
 
47
78
  j.config %{
@@ -69,13 +100,13 @@ You talk to routers by connecting to them using ssh or telnet and send exec or c
69
100
  irb> r.interact
70
101
 
71
102
  #
72
- # ^Z to terminate.
103
+ # ^T to terminate.
73
104
  #
74
105
 
75
106
  router#clear line 2
76
107
  [confirm]
77
108
  [OK]
78
- router# ^Z
109
+ router# ^T
79
110
  => nil
80
111
  irb>
81
112
 
@@ -83,7 +114,7 @@ You talk to routers by connecting to them using ssh or telnet and send exec or c
83
114
  irb(main):210:0* j.interact
84
115
 
85
116
  #
86
- # ^Z to terminate.
117
+ # ^T to terminate.
87
118
  #
88
119
 
89
120
  jme@router> configure
@@ -98,7 +129,7 @@ You talk to routers by connecting to them using ssh or telnet and send exec or c
98
129
  jme@router# show | compare
99
130
 
100
131
  [edit]
101
- jme@router# ^Z
132
+ jme@router# ^T
102
133
  => nil
103
134
  irb(main):211:0>
104
135
 
@@ -0,0 +1,93 @@
1
+ require 'rake'
2
+ require 'rdoc/task'
3
+ require 'rake/testtask'
4
+ require "rake/clean"
5
+
6
+ task "default" => 'test'
7
+
8
+ CLEAN.include ["*.gem", "pkg", "rdoc"]
9
+
10
+ begin
11
+ require 'jeweler'
12
+ Jeweler::Tasks.new do |s|
13
+ s.name = 'expect4r'
14
+ s.authors = ['Jean-Michel Esnault']
15
+ s.email = "jesnault@gmail.com"
16
+ s.summary = "Expect4r"
17
+ s.description = "A Ruby Library for interacting with IOS, IOS-XR, and JUNOS CLI."
18
+ s.platform = Gem::Platform::RUBY
19
+ s.executables = []
20
+ s.files = %w( LICENSE COPYING README.rdoc ) + Dir["lib/**/*"] + ["examples/**/*"]
21
+ s.test_files = Dir["test/**/*"]
22
+ s.has_rdoc = false
23
+ s.rdoc_options = ["--quiet", "--title", "Expect4r", "--line-numbers"]
24
+ s.require_path = 'lib'
25
+ s.required_ruby_version = ">= 1.8.6"
26
+ s.add_dependency('highline', '>= 1.5.0')
27
+ s.homepage = "http://github.com/jesnault/expect4r"
28
+ # s.rubyforge_project = 'expect4r'
29
+ end
30
+ rescue LoadError
31
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
32
+ end
33
+
34
+ # These are new tasks
35
+ begin
36
+ require 'rake/contrib/sshpublisher'
37
+ namespace :rubyforge do
38
+
39
+ desc "Release gem and RDoc documentation to RubyForge"
40
+ task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
41
+
42
+ namespace :release do
43
+ desc "Publish RDoc to RubyForge."
44
+ task :docs => [:rdoc] do
45
+ config = YAML.load(
46
+ File.read(File.expand_path('~/.rubyforge/user-config.yml'))
47
+ )
48
+ host = "#{config['username']}@rubyforge.org"
49
+ remote_dir = "/var/www/gforge-projects/the-perfect-gem/"
50
+ local_dir = 'rdoc'
51
+
52
+ Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
53
+ end
54
+ end
55
+ end
56
+ rescue LoadError
57
+ puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
58
+ end
59
+
60
+
61
+ Rake::TestTask.new do |t|
62
+ t.libs = ['.']
63
+ t.pattern = "test/**/*test.rb"
64
+ t.warning = true
65
+ end
66
+
67
+ Rake::RDocTask.new do |t|
68
+ t.rdoc_dir = 'rdoc'
69
+ t.rdoc_files.include("lib/**/*.rb")
70
+ t.options = ["--quiet", "--title", "Expect4r", "--line-numbers"]
71
+ t.options << '--fileboxes'
72
+ end
73
+
74
+ require 'rubygems/package_task'
75
+
76
+ namespace :gem do
77
+
78
+ desc "Run :package and install the .gem locally"
79
+ task :install => [:gem, :package] do
80
+ sh %{sudo gem install --local pkg/interact-#{PKG_VERSION}.gem}
81
+ end
82
+
83
+ desc "Like gem:install but without ri or rdocs"
84
+ task :install_fast => [:gem, :package] do
85
+ sh %{sudo gem install --local pkg/interact-#{PKG_VERSION}.gem --no-rdoc --no-ri}
86
+ end
87
+
88
+ desc "Run :clean and uninstall the .gem"
89
+ task :uninstall => :clean do
90
+ sh %{sudo gem uninstall interact}
91
+ end
92
+
93
+ end
@@ -0,0 +1,5 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 0
4
+ :patch: 10
5
+ :build:
@@ -137,18 +137,35 @@ module Expect4r
137
137
  end
138
138
 
139
139
  def exp_print(s)
140
- exp_internal "print: #{s.inspect}, io_writer: #{@w}"
141
- return unless @w
142
- @w.print(s) and flush
143
- rescue Errno::EIO, Errno::ECHILD
144
- child_exit
145
- raise
140
+ _retry=self.connect_retry
141
+ begin
142
+ exp_internal "print: #{s.inspect}, io_writer: #{@w}"
143
+ return unless @w
144
+ @w.print(s) and flush
145
+ rescue Errno::EIO, Errno::ECHILD
146
+ child_exit
147
+ exp_internal "session disconnected: retrying..."
148
+ raise unless _retry>0
149
+ _retry -=1
150
+ sleep(1)
151
+ self.login
152
+ retry
153
+ end
146
154
  end
155
+
147
156
  def getc
148
- @r.getc if @r
149
- rescue Errno::EIO, Errno::ECHILD
150
- child_exit
151
- raise
157
+ _retry=self.connect_retry
158
+ begin
159
+ @r.getc if @r
160
+ rescue Errno::EIO, Errno::ECHILD
161
+ child_exit
162
+ exp_internal "session disconnected: retrying..."
163
+ raise unless _retry>0
164
+ _retry -=1
165
+ sleep(1)
166
+ self.login
167
+ retry
168
+ end
152
169
  end
153
170
 
154
171
  def interact(k="C-t")
@@ -264,7 +281,7 @@ module Expect4r
264
281
  end
265
282
  alias :login_via :login_by_proxy
266
283
 
267
- def _login(cmd, arg={})
284
+ def _login(cmd=self.spawnee, arg={})
268
285
 
269
286
  return if connected?
270
287
 
@@ -351,7 +368,7 @@ module Expect4r
351
368
  end
352
369
  [buf, ev]
353
370
  end
354
-
371
+
355
372
  alias :login :_login
356
373
 
357
374
 
@@ -366,7 +383,7 @@ module Expect4r
366
383
 
367
384
  #FIXME ? putline to send_cmd ?
368
385
  # hide putline and expose cmd
369
- def putline(line, arg={})
386
+ def _putline_(line, arg={})
370
387
  raise ConnectionError.new(line) if child_exited?
371
388
 
372
389
  arg = {:ti=>13, :no_echo=>false, :debug=>0, :sync=> false, :no_trim=>false}.merge(arg)
@@ -429,6 +446,21 @@ module Expect4r
429
446
  end
430
447
  [buf, rc]
431
448
  end
449
+
450
+ def putline(*args)
451
+ _retry=self.connect_retry
452
+ begin
453
+ _putline_(*args)
454
+ rescue Errno::EIO, Errno::ECHILD
455
+ child_exit
456
+ exp_internal "session disconnected: retrying..."
457
+ raise unless _retry>0
458
+ _retry -=1
459
+ sleep(1)
460
+ self.login
461
+ retry
462
+ end
463
+ end
432
464
 
433
465
  def writer(k)
434
466
  stty_raw
@@ -458,7 +490,6 @@ module Expect4r
458
490
  rescue Errno::EIO
459
491
  rescue => e
460
492
  p e
461
- p '7777777'
462
493
  ensure
463
494
  stty_cooked
464
495
  end
@@ -145,8 +145,11 @@ module Expect4r
145
145
  self
146
146
  end
147
147
 
148
- attr_writer :host, :username, :port
148
+ attr_writer :host, :user, :port
149
149
  alias :hostname= :host=
150
+ alias :username= :user=
151
+
152
+ attr_accessor :ssh_options
150
153
 
151
154
  def method=(arg)
152
155
  case arg
@@ -160,7 +163,12 @@ module Expect4r
160
163
  def spawnee
161
164
  case method
162
165
  when :telnet ; "telnet #{host} #{port if port>0}"
163
- when :ssh ; "ssh #{spawnee_username}@#{host} #{port if port>0}"
166
+ when :ssh
167
+ cmd ="ssh #{host}"
168
+ cmd +=" -oPort=#{port}" if port>0
169
+ cmd +=" -oUser=#{spawnee_username}" if spawnee_username
170
+ cmd += [" ", [ssh_options]].flatten.join(" ") if ssh_options
171
+ cmd
164
172
  else
165
173
  raise RuntimeError
166
174
  end
@@ -173,6 +181,15 @@ module Expect4r
173
181
  def spawnee_prompt
174
182
  @ps1
175
183
  end
184
+
185
+ def connect_retry
186
+ @connect_retry ||= 0
187
+ end
188
+
189
+ def connect_retry=(arg)
190
+ raise ArgumentError unless (0 .. 100_000) === arg
191
+ @connect_retry = arg
192
+ end
176
193
 
177
194
  def dup
178
195
  if @pwd
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: expect4r
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Michel Esnault
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-07 00:00:00.000000000 Z
11
+ date: 2014-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: highline
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.5.0
19
+ version: '1.5'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.5.0
26
+ version: '1.5'
27
27
  description: A Ruby Library for interacting with IOS, IOS-XR, and JUNOS CLI.
28
28
  email: jesnault@gmail.com
29
29
  executables: []
@@ -32,11 +32,12 @@ extra_rdoc_files:
32
32
  - LICENSE
33
33
  - README.rdoc
34
34
  files:
35
+ - CHANGELOG
35
36
  - COPYING
36
37
  - LICENSE
37
38
  - README.rdoc
38
- - examples/jex1.rb
39
- - examples/jex2.rb
39
+ - Rakefile
40
+ - VERSION.yml
40
41
  - lib/expect/io.rb
41
42
  - lib/expect4r.rb
42
43
  - lib/misc/base.rb
@@ -50,7 +51,6 @@ files:
50
51
  - lib/router/cisco/ios/termserver.rb
51
52
  - lib/router/cisco/iox/iox.rb
52
53
  - lib/router/cisco/iox/modes.rb
53
- - lib/router/cisco/iox/ping.rb
54
54
  - lib/router/common.rb
55
55
  - lib/router/error.rb
56
56
  - lib/router/juniper/junos/junos.rb
@@ -65,38 +65,32 @@ files:
65
65
  - test/expect4r_test.rb
66
66
  - test/misc/base_test.rb
67
67
  - test/misc/passwd_test.rb
68
- - test/misc/rspec.rb
69
68
  - test/router/cisco/iox/iox_test.rb
70
69
  homepage: http://github.com/jesnault/expect4r
71
70
  licenses: []
72
71
  metadata: {}
73
72
  post_install_message:
74
73
  rdoc_options:
75
- - --quiet
76
- - --title
74
+ - "--quiet"
75
+ - "--title"
77
76
  - Expect4r
78
- - --line-numbers
77
+ - "--line-numbers"
79
78
  require_paths:
80
79
  - lib
81
80
  required_ruby_version: !ruby/object:Gem::Requirement
82
81
  requirements:
83
- - - '>='
82
+ - - ">="
84
83
  - !ruby/object:Gem::Version
85
84
  version: 1.8.6
86
85
  required_rubygems_version: !ruby/object:Gem::Requirement
87
86
  requirements:
88
- - - '>='
87
+ - - ">="
89
88
  - !ruby/object:Gem::Version
90
- version: '0'
89
+ version: 1.3.6
91
90
  requirements: []
92
91
  rubyforge_project:
93
- rubygems_version: 2.0.0.rc.2
92
+ rubygems_version: 2.2.2
94
93
  signing_key:
95
94
  specification_version: 4
96
- summary: Expect4r
97
- test_files:
98
- - test/expect4r_test.rb
99
- - test/misc/base_test.rb
100
- - test/misc/passwd_test.rb
101
- - test/misc/rspec.rb
102
- - test/router/cisco/iox/iox_test.rb
95
+ summary: Best way to connect to your routers and other devices using ruby
96
+ test_files: []
@@ -1,104 +0,0 @@
1
- require 'expect4r'
2
- require "enumerator"
3
- include Expect4r
4
- include Expect4r::Router::Error
5
-
6
- paris_config = %|
7
- top
8
- edit logical-router Paris interface fxp0 unit 25
9
- set vlan-id 25
10
- set family inet address 40.0.1.1/24
11
- top
12
- edit logical-router Paris interface fxp1 unit 22
13
- set vlan-id 22
14
- set family inet address 40.0.2.1/24
15
- top
16
- edit logical-router Paris interface lo0 unit 1
17
- set family inet address 192.168.127.1/32
18
- top
19
- edit logical-router Paris interface fxp0 unit 24
20
- set vlan-id 24
21
- set family inet address 40.0.0.2/24
22
- top
23
- edit logical-router Paris
24
- set routing-options autonomous-system 200
25
- top
26
- edit logical-router Paris protocols bgp
27
- edit group session-to-300
28
- set type external
29
- set peer-as 300
30
- set neighbor 40.0.1.2 peer-as 300
31
- exit
32
- edit group session-to-210
33
- set type external
34
- set peer-as 210
35
- set neighbor 40.0.2.2 peer-as 210
36
- exit
37
- edit group session-to-100
38
- set type external
39
- set peer-as 100
40
- set neighbor 40.0.0.1 peer-as 100
41
- |
42
-
43
- orleans_config = %|
44
- top
45
- edit logical-router Orleans interface fxp2 unit 22
46
- set vlan-id 22
47
- set family inet address 40.0.2.2/24
48
- top
49
- edit logical-router Orleans
50
- set routing-options autonomous-system 100
51
- top
52
- edit logical-router Orleans protocols bgp
53
- edit group session-to-200
54
- set type external
55
- set peer-as 200
56
- set neighbor 40.0.2.1 peer-as 200
57
- |
58
-
59
- begin
60
-
61
- paris = J.new_telnet('olive', 'jme').login
62
- orleans = J.new_telnet('olive', 'jme').login
63
-
64
- threads =[]
65
- threads << Thread.new { paris.config paris_config }
66
- threads << Thread.new { p orleans.config orleans_config }
67
- threads.each { |th| th.join }
68
-
69
- rescue ConnectionError => e
70
-
71
- p 'CONNECTION ERROR'
72
-
73
- puts e.err_msg
74
-
75
- rescue SyntaxError, SemanticError => e
76
-
77
- p 'CONFIG ERROR'
78
- puts e.err_msg
79
-
80
- else
81
-
82
- begin
83
-
84
- paris.ping '40.0.2.1', :logical_router=>'Paris', :count=>100
85
- orleans.ping '40.0.2.2', :logical_router=>'Orleans', :count=>100
86
-
87
- rescue PingError => e
88
-
89
- p 'PING ERROR'
90
- puts e.err_msg
91
-
92
- end
93
-
94
- ensure
95
-
96
- [paris, orleans].each { |r| r.logout }
97
-
98
- end
99
-
100
-
101
-
102
-
103
-
104
-
@@ -1,88 +0,0 @@
1
- require "test/unit"
2
- require 'expect4r'
3
-
4
- class TestPingTest < Test::Unit::TestCase
5
- include Expect4r
6
- include Expect4r::Router::Error
7
-
8
- def setup
9
-
10
- paris_config = %|
11
- top
12
- edit logical-router Paris interface fxp0 unit 25
13
- set vlan-id 25
14
- set family inet address 40.0.1.1/24
15
- top
16
- edit logical-router Paris interface fxp1 unit 22
17
- set vlan-id 22
18
- set family inet address 40.0.2.1/24
19
- top
20
- edit logical-router Paris interface lo0 unit 1
21
- set family inet address 192.168.127.1/32
22
- top
23
- edit logical-router Paris interface fxp0 unit 24
24
- set vlan-id 24
25
- set family inet address 40.0.0.2/24
26
- top
27
- edit logical-router Paris
28
- set routing-options autonomous-system 200
29
- top
30
- edit logical-router Paris protocols bgp
31
- edit group session-to-300
32
- set type external
33
- set peer-as 300
34
- set neighbor 40.0.1.2 peer-as 300
35
- exit
36
- edit group session-to-210
37
- set type external
38
- set peer-as 210
39
- set neighbor 40.0.2.2 peer-as 210
40
- exit
41
- edit group session-to-100
42
- set type external
43
- set peer-as 100
44
- set neighbor 40.0.0.1 peer-as 100
45
- |
46
-
47
- orleans_config = %|
48
- top
49
- edit logical-router Orleans interface fxp2 unit 22
50
- set vlan-id 22
51
- set family inet address 40.0.2.2/24
52
- top
53
- edit logical-router Orleans
54
- set routing-options autonomous-system 100
55
- top
56
- edit logical-router Orleans protocols bgp
57
- edit group session-to-200
58
- set type external
59
- set peer-as 200
60
- set neighbor 40.0.2.1 peer-as 200
61
- |
62
-
63
- @paris = J.new_ssh('olive', 'jesnault', 'HomeLab').login
64
- @orleans = J.new_ssh('olive', 'jesnault', 'HomeLab').login
65
- threads =[]
66
- threads << Thread.new { @paris.config paris_config }
67
- threads << Thread.new { @orleans.config orleans_config }
68
- threads.each { |th| th.join }
69
-
70
- end
71
-
72
- def teardown
73
- @paris.config "delete logical-routers"
74
- [@paris, @orleans].each { |r| r.logout }
75
- end
76
-
77
- def test_ping_test
78
- assert_nothing_raised(Exception) {
79
- threads =[]
80
- threads << Thread.new { @paris.ping '40.0.2.1', :logical_router=>'Paris', :count=>100 }
81
- threads << Thread.new { @orleans.ping '40.0.2.2', :logical_router=>'Orleans', :count=>100 }
82
- threads.each { |th| th.join }
83
- }
84
-
85
- end
86
-
87
- end
88
-
@@ -1,55 +0,0 @@
1
-
2
- __END__
3
-
4
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 ?
5
- donotfrag set DF bit in IP header
6
- pattern data pattern
7
- size datagram size
8
- source source address or source interface
9
- sweep sweep ping
10
- timeout timeout in seconds
11
- type type of service
12
- validate validate return packet
13
- verbose verbose output
14
- <cr>
15
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size ?
16
- <36-18024> datagram size
17
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 ?
18
- donotfrag set DF bit in IP header
19
- pattern data pattern
20
- source source address or source interface
21
- sweep sweep ping
22
- timeout timeout in seconds
23
- type type of service
24
- validate validate return packet
25
- verbose verbose output
26
- <cr>
27
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 donotfrag ?
28
- pattern data pattern
29
- source source address or source interface
30
- sweep sweep ping
31
- timeout timeout in seconds
32
- type type of service
33
- validate validate return packet
34
- verbose verbose output
35
- <cr>
36
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 donotfrag pattern ?
37
- <0-65535> data pattern
38
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 donotfrag pattern 0xdead type 2 ?
39
- source source address or source interface
40
- sweep sweep ping
41
- timeout timeout in seconds
42
- validate validate return packet
43
- verbose verbose output
44
- <cr>
45
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 donotfrag pattern 0xdead type 2 timeout 10 sweep ?
46
- source source address or source interface
47
- validate validate return packet
48
- verbose verbose output
49
- <cr>
50
- RP/0/0/CPU0:Paris-rp0#ping ipv4 1.1.1.1 count 5 size 100 donotfrag pattern 0xdead type 2 timeout 10 sweep ?
51
- source source address or source interface
52
- validate validate return packet
53
- verbose verbose output
54
- <cr>
55
- RP/0/0/CPU0:Paris-rp0#
@@ -1,13 +0,0 @@
1
-
2
- class User
3
- def in_role?(role)
4
- true
5
- end
6
- end
7
-
8
- describe User do
9
- it "should be in any role assigned to it" do
10
- user = User.new
11
- user.should be_in_role("assigned role")
12
- end
13
- end