Class: Webrick::VCR

Inherits:
Object
  • Object
show all
Defined in:
lib/nitro/adapter/webrick/vcr.rb

Overview

VCR functionality, typically used for proxy based regression testing.

Class Method Summary collapse

Class Method Details

.playback(filename = 'session.yaml') ⇒ Object

Playback a recorded session. Typically used for testing.



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
# File 'lib/nitro/adapter/webrick/vcr.rb', line 44

def playback(filename = 'session.yaml')
  Logger.info "Playing back application server session from '#{filename}'."
  
  $playback_session = YAML.load_file(filename)
  $playback_exception_count = 0
      
  WEBrick::HTTPServer.class_eval %{
    def start(&block)
      run(nil)
    end
    
    def run(sock)
      while true
        delta, req, res = $playback_session.shift
        
        if delta
          sleep(delta)
          begin
            service(req, res)
          rescue Object => ex
            $playback_exception_count += 1
            p '---', ex                
          end
        else
          return
        end
      end
    end
  }
  
  at_exit do
    puts "\n\n"
    puts "Playback raised #$playback_exception_count exceptions.\n"
    puts "\n"
  end
end

.record(filename = 'session.yaml') ⇒ Object

Enables session recording. The recorded data can be used for automatic app testing by means of the playback mode.



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
# File 'lib/nitro/adapter/webrick/vcr.rb', line 15

def record(filename = 'session.yaml')
  Logger.info "Recording application server session to '#{filename}'."
  
  require 'facets/core/file/self/create'

  $record_session = []
  $last_record_time = Time.now

  Nitro::WebrickAdapter.class_eval %{   
    def do_GET(req, res)
      record_context(req, res)
      handle(req, res)
    end
    alias_method :do_POST, :do_GET

    def record_context(req, res)
      delta = Time.now - $last_record_time
      $last_record_time = Time.now
      $record_session << [delta, req, res]
    end          
  }

  at_exit do
    File.create(filename, YAML.dump($record_session))
  end
end