source: subversion/utils/osmapitest/osmapitest.rb @ 2313

Last change on this file since 2313 was 2313, checked in by nickb, 12 years ago

OSMAPITEST - test the OSM API

File size: 6.0 KB
Line 
1# hello_test.rb
2
3module PMAPITEST
4
5require 'test/unit'
6require 'net/http'
7require 'bboxfrompoint'
8include Net
9
10class MapTest# < Test::Unit::TestCase
11
12  def initialize(test_name, range, diam_range)
13    @test_name = test_name
14    @range = range
15    @diam_range = diam_range
16  end
17
18  # called before every single test
19  def setup
20    @var1 = 'value1'
21    @var2 = 42
22  end
23 
24  @@urlbase = '/api/0.4/'
25
26  # called after every single test
27  def teardown
28  end
29
30  def test_get_map
31    assert true
32  end
33
34  def get_node
35   
36    Net::HTTP.start('www.peoplesmap.com') do |http|
37        req = Net::HTTP::Get.new(@@urlbase+'node/40')
38        req.basic_auth 'nickblack1@gmail.com', 'test'
39        response = http.request(req)
40        print response.body
41     end
42  end
43
44  def create_test_dir
45
46    t = Time.now
47
48    `mkdir /tmp/#{@test_name}/` unless File.exists?("/tmp/#{@test_name}")
49
50    raise $?.to_s if $?.nil?
51
52    return "/tmp/#{@test_name}/#{t.strftime("%H-%M-%S-%d-%B-%y")}"
53  end
54
55  def generate_map_request(params)
56
57    x = params[0]
58    y = params[1]
59    d = params[2]
60
61    bbox = BboxFromPoint.new.bbox_from_point(x,y,d)
62    outdir = create_test_dir
63    begin
64      `curl -i -u test1@peoplesmap.com:test1 http://www.peoplesmap.com/api/0.4/#{bbox} > #{outdir}`
65    rescue SystemCallError
66      $stderr.print "Bbox request failed at #{outdir}" + $!
67    end
68
69    return "Bbox request made to #{outdir} - centreX: #{x} centreY: #{y} diameter: #{d}"
70  end
71
72
73  def get_range
74    xmin = @range[0]
75    xmax = @range[1]
76    ymin = @range[2]
77    ymax = @range[3]
78    dmin = @diam_range[0]
79    dmax = @diam_range[1]
80    res = [] 
81    res[0] = (rand(xmax - xmin)) + xmin
82    res[1] = (rand(ymax - ymin)) + ymin
83    res[2] = (rand(dmax - dmin)) + dmin
84   
85    return res
86   end
87
88   def map_test(attempts)
89
90    n = 0
91    if attempts == -1
92        while n < 1
93          generate_map_request(get_range)
94          puts "#{generate_map_request(get_range)}"
95        end
96    else
97        while n < attempts
98          generate_map_request(get_range)
99          n+=1
100        end
101    end
102  end
103end
104
105  class CreateTest
106
107    #Bbox = [xmin, xmax, ymin, ymax]
108    def initialize(bbox, urlbase, user, pass)
109      @bbox = bbox
110      @urlbase = urlbase
111      @user = user
112      @pass = pass
113    end
114
115    def get_from_api(url_extension)
116
117      Net::HTTP.start(@urlbase) do |http|
118        req = Net::HTTP::Get.new(url_extension)
119        req.basic_auth @user, @pass
120        response = http.request(req)
121        @res =  response.body
122      end
123      return @res
124    end
125
126    def put_to_api(url_extension, xml_to_put)
127
128      Net::HTTP.start(@urlbase) do |http|
129        req = Net::HTTP::Put.new(url_extension)
130        req.basic_auth @user, @pass
131        response = http.request(req, xml_to_put)
132        @res =  response.body
133      end
134      return @res
135    end
136
137    #Returns the xml for a new node
138    def node_to_xml(x,y)
139      return "<pmx> <node id='0' x='#{x}' y='#{y}' /></pmx>"
140    end 
141
142    def seg_to_xml(from_node, to_node)
143
144      seg_xml = "<pmx version=\"0.4\" generator=\"PeoplesMap server\">
145                    <segment id=\"0\" from=\"#{from_node}\" to=\"#{to_node}\" visible=\"true\" timestamp=\"#{Time.now}\">
146                    </segment>
147                 </pmx>"
148
149    return seg_xml
150    end
151
152    def way_to_xml(seg_id)
153      way_xml_body = ""
154      way_xml_head = "<pmx version=\"0.4\" generator=\"PeoplesMap server\">
155       <way id=\"0\" visible=\"true\" timestamp=\"#{Time.now}\">"
156
157      seg_id.each do |seg|
158        way_xml_body << "\n <seg id=\"#{seg}\"/>"
159      end
160
161      way_tags = "<tag k=\"name\" v=\"foo\"/>
162         <tag k=\"ref\" v=\"bar\"/> "
163
164       way_xml = way_xml_head + way_xml_body + way_tags + "</way></pmx>"
165
166       return way_xml
167    end
168 
169    #Creates new nodes and puts them to the server via the API
170    #Retuns an array of new node objects
171    #@@Params: n = number of nodes to create
172    #@@Params: xinc = x incrementation in meters
173    def makenode(n, xinc, yinc)
174      x = @bbox[0]
175      y = @bbox[2]
176      nodes = []
177      i = 0
178      api_ext = '/api/0.4/node/create'
179
180      while i < n
181          unless x > @bbox[1] or y > @bbox[3]
182            begin
183              node_id =  put_to_api(api_ext, node_to_xml(x,y))
184              puts "Created a node with node id #{node_id}"
185              nodes << [node_id,x,y]
186              x = x + xinc
187              y = y + yinc
188            rescue Net::HTTPServerException
189              $stderr.print "#{Net::HTTPServerException} whilst attempting to PUT #{node_to_xml(x,y)} to #{api_ext}" 
190            ensure
191              i+=1
192            end
193         end
194      end
195      return nodes
196    end
197
198    #Creates a new segment object and returns an array of segment ids
199    #@@Params: array of node objects
200    def makeseg(nodes)
201
202    first = true
203    segs = []
204    api_ext = '/api/0.4/segment/create'
205
206    node_a = nodes[0][0]
207    nodes.shift
208    nodes.each do |node|
209        node_b = node[0]
210#        puts "node a is #{node_a} node_b is #{node_b}"
211        begin
212          seg_id = put_to_api(api_ext,seg_to_xml(node_a, node_b)) 
213          puts "Created a segment with id #{seg_id}"
214          segs << [seg_id]
215          raise "SegIdError" if seg_id == 0 or seg_id.nil?
216        rescue Net::HTTPServerException
217            $stderr.print "#{Net::HTTPServerException} whilst attempting to PUT #{seg_to_xml(node_a, node_b)} to #{api_ext}"
218          end
219          node_a = node_b
220        end
221     
222    return segs
223    end
224
225    #Returns a new way object
226    #@@Params: array of segments
227    def makeway(segs)
228
229    api_ext = '/api/0.4/way/create'
230    ways = []
231
232   
233      begin
234        way_id = put_to_api(api_ext,way_to_xml(segs))
235        puts way_to_xml(segs)
236        raise "WayIdError" if way_id == 0 or way_id.nil?
237        puts "Created a way with id #{way_id}"
238        ways << way_id
239      rescue Net::HTTPServerException
240        $stderr.print "#{Net::HTTPServerException} whilst attempting to PUT #{way_to_xml(segs)} to #{api_ext}"
241      rescue Net::HTTPFatalError
242        $stderr.print "#{Net::HTTPFatalError} whilst attempting to PUT #{way_to_xml(segs)} to #{api_ext}"
243      end
244
245    return ways
246     
247
248    end
249end
250end
251
252
Note: See TracBrowser for help on using the repository browser.