Class: LookbookVisualTester::ServerTestRunner

Inherits:
Object
  • Object
show all
Defined in:
lib/lookbook_visual_tester/server_test_runner.rb

Constant Summary collapse

DEFAULT_TEST_TASK =
'lookbook:test'
DEFAULT_TIMEOUT =
60
POLL_INTERVAL =
0.25

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(config: LookbookVisualTester.config, timeout: DEFAULT_TIMEOUT, test_task: DEFAULT_TEST_TASK, log_path: nil) ⇒ ServerTestRunner

Returns a new instance of ServerTestRunner.



17
18
19
20
21
22
23
24
# File 'lib/lookbook_visual_tester/server_test_runner.rb', line 17

def initialize(config: LookbookVisualTester.config, timeout: DEFAULT_TIMEOUT, test_task: DEFAULT_TEST_TASK, log_path: nil)
  @config = config
  @timeout = timeout
  @test_task = test_task
  @log_path = log_path
  @pid = nil
  @log_file = nil
end

Class Method Details

.call(config: LookbookVisualTester.config, timeout: DEFAULT_TIMEOUT, test_task: DEFAULT_TEST_TASK, log_path: nil) ⇒ Object



13
14
15
# File 'lib/lookbook_visual_tester/server_test_runner.rb', line 13

def self.call(config: LookbookVisualTester.config, timeout: DEFAULT_TIMEOUT, test_task: DEFAULT_TEST_TASK, log_path: nil)
  new(config: config, timeout: timeout, test_task: test_task, log_path: log_path).call
end

.wait_for_server(host, timeout: DEFAULT_TIMEOUT) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/lookbook_visual_tester/server_test_runner.rb', line 42

def self.wait_for_server(host, timeout: DEFAULT_TIMEOUT)
  uri = URI.parse(host)
  raise Error, "Invalid lookbook_host: #{host}" unless uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)

  Timeout.timeout(timeout) do
    loop do
      begin
        response = Net::HTTP.get_response(uri)
        return true if response.code.to_i < 500
      rescue Errno::ECONNREFUSED, Errno::EADDRNOTAVAIL, Net::OpenTimeout, Net::ReadTimeout
        # server not ready yet
      end
      sleep POLL_INTERVAL
    end
  end
rescue Timeout::Error
  raise Error, "Lookbook server at #{host} did not start within #{timeout}s"
end

Instance Method Details

#callObject



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/lookbook_visual_tester/server_test_runner.rb', line 26

def call
  validate_host!
  @pid = spawn_server

  begin
    self.class.wait_for_server(@config.lookbook_host, timeout: @timeout)
    puts "[LookbookVisualTester] Server ready at #{@config.lookbook_host}. Running #{@test_task}..."

    task = Rake::Task[@test_task]
    task.reenable
    task.invoke
  ensure
    stop_server
  end
end