Module: Gridinit::Jmeter::Parser

Included in:
ExtendedDSL
Defined in:
lib/gridinit-jmeter/helpers/parser.rb

Instance Method Summary collapse

Instance Method Details

#fill_in(params) ⇒ Object



43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 43

def fill_in(params)
  params[:update_at_xpath] ||= []
  params[:update_at_xpath] += params[:fill_in].collect do |name, value|
    {
      :xpath => '//collectionProp',
      :value => Nokogiri::XML("        <elementProp name=\"\#{name}\" elementType=\"HTTPArgument\">\n          <boolProp name=\"HTTPArgument.always_encode\">\#{params[:always_encode] ? 'true' : false}</boolProp>\n          <stringProp name=\"Argument.value\">\#{value}</stringProp>\n          <stringProp name=\"Argument.metadata\">=</stringProp>\n          <boolProp name=\"HTTPArgument.use_equals\">true</boolProp>\n          <stringProp name=\"Argument.name\">\#{name}</stringProp>\n        </elementProp>\n        EOF\n    }\n  end\n  params.delete(:fill_in)\nend\n".strip_heredoc).children

#parse_http_request(params) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 6

def parse_http_request(params)
  parse_url(params) unless params[:url].empty?
  
  if params[:raw_path]
    params[:path] = params[:url]
  else
    params[:fill_in] ||= {}
    params[:params] && params[:params].split('&').each do |param| 
      name,value = param.split('=')
      params[:fill_in][name] = value
    end
  end

  fill_in(params) if params.has_key?(:fill_in)
  raw_body(params) if params.has_key?(:raw_body)
end

#parse_test_type(params) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 84

def parse_test_type(params)
  case params.keys.first
  when 'contains'
    2
  when 'not-contains'
    6
  when 'matches'
    1
  when 'not-matches'
    5
  when 'equals'
    8
  when 'not-equals'
    12
  when 'substring'
    16
  when 'not-substring'
    20
  else
    2
  end
end

#parse_uri(uri) ⇒ Object



37
38
39
40
41
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 37

def parse_uri(uri)
  URI.parse(URI::encode(uri)).scheme.nil? ? 
    URI.parse(URI::encode("http://#{uri}")) : 
    URI.parse(URI::encode(uri))   
end

#parse_url(params) ⇒ Object



23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 23

def parse_url(params)
  if params[:url] =~ /https?:\/\/\$/ || params[:url][0] == '$'
    params[:path] = params[:url] # special case for named expressions
  else 
    uri = parse_uri(params[:url])
    params[:port]     ||= uri.port unless URI.parse(URI::encode(params[:url])).scheme.nil?
    params[:protocol] ||= uri.scheme unless URI.parse(URI::encode(params[:url])).scheme.nil?
    params[:domain]   ||= uri.host
    params[:path]     ||= uri.path && URI::decode(uri.path)
    params[:params]   ||= uri.query && URI::decode(uri.query)
  end
  params.delete(:url)
end

#raw_body(params) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/gridinit-jmeter/helpers/parser.rb', line 62

def raw_body(params)
  params[:update_at_xpath] ||= []
  params[:update_at_xpath] << {
    :xpath => '//HTTPSamplerProxy',
    :value => Nokogiri::XML("      <boolProp name=\"HTTPSampler.postBodyRaw\">true</boolProp>\n      EOF\n  }\n\n  params[:update_at_xpath] << {\n    :xpath => '//collectionProp',\n    :value => Nokogiri::XML(<<-EOF.strip_heredoc).children  \n      <elementProp name=\"\" elementType=\"HTTPArgument\">\n        <boolProp name=\"HTTPArgument.always_encode\">false</boolProp>\n        <stringProp name=\"Argument.value\">\#{params[:raw_body]}</stringProp>\n        <stringProp name=\"Argument.metadata\">=</stringProp>\n      </elementProp>\n      EOF\n  }\n  params.delete(:raw_body)\nend\n".strip_heredoc).children