1#!/usr/bin/env ruby
2
3require 'rubygems'
4require 'bundler/setup'
5require 'json'
6require 'zero_mq'
7require './unittest'
8
9h = Handler.new()
10f = File.open "/tmp/remotebackend.txt.#{$$}","a"
11f.sync = true
12
13runcond=true
14
15trap('INT') { runcond = false }
16trap('TERM') { runcond = false }
17
18begin
19  context = ZeroMQ::Context.new
20  socket = context.socket ZMQ::REP
21  socket.bind("ipc:///tmp/remotebackend.0")
22
23  print "[#{Time.now.to_s}] ZeroMQ unit test responder running\n"
24
25  while(runcond) do
26    line = ""
27    rc = socket.recv_string line
28    # expect json
29    input = {}
30    line = line.strip
31
32    f.puts "#{Time.now.to_f}: [zmq] #{line}"
33    next if line.empty?
34    begin
35      input = JSON.parse(line)
36      method = "do_#{input["method"].downcase}"
37      args = input["parameters"] || []
38
39      if h.respond_to?(method.to_sym) == false
40         res = false
41      elsif args.size > 0
42         res, log = h.send(method,args)
43      else
44         res, log = h.send(method)
45      end
46      socket.send_string ({:result => res, :log => log}).to_json + "\n" , 0
47      f.puts "#{Time.now.to_f} [zmq]: #{({:result => res, :log => log}).to_json}"
48    rescue JSON::ParserError
49      socket.send_string ({:result => false, :log => "Cannot parse input #{line}"}).to_json + "\n";
50      f.puts "#{Time.now.to_f} [zmq]: #{({:result => false, :log => "Cannot parse input #{line}"}).to_json}"
51      next
52    end
53  end
54rescue SystemExit, Interrupt, Errno::EINTR
55end
56
57print "[#{Time.now.to_s}] ZeroMQ unit test responder ended\n"
58