meteoroid 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <testResults version="1.2">
3
+ <httpSample t="2622" lt="2615" ts="1309883025068" s="true" lb="Federal Legislator Search" rc="200" rm="OK" tn="Monitored Pages 1-1" dt="text" by="87109">
4
+ <java.net.URL>http://foo.bar/federal_legislator_search</java.net.URL>
5
+ </httpSample>
6
+ </testResults>
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe Meteoroid::File do
4
+
5
+ before :each do
6
+ @xml = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures example.jml ]))
7
+ end
8
+
9
+ describe "self.from" do
10
+ it "should create valid Meteoroid::File from args" do
11
+ File.expects(:open).times(2).returns(StringIO.new(@xml))
12
+ files = Meteoroid::File.from(["foo.jml", "bar.jml"])
13
+ files.collect(&:valid).should_not include(false)
14
+ end
15
+
16
+ it "should not return invalid files" do
17
+ Meteoroid::File.from(["foo.jml", "bar.jml"]).should be_empty
18
+ end
19
+
20
+ it "should always return array of Meteoroid::File" do
21
+ File.expects(:open).times(1).returns(StringIO.new(@xml))
22
+ files = Meteoroid::File.from(["foo.jml"])
23
+ files.collect(&:valid).should_not include(false)
24
+ end
25
+ end
26
+
27
+ describe "#samples" do
28
+ it "should return stuff" do
29
+ File.stubs(:open).with("foo.jml").times(1).returns(StringIO.new(@xml))
30
+ file = Meteoroid::File.new("foo.jml")
31
+ file.samples.should_not be_empty
32
+ end
33
+
34
+ it "should only parse the file once" do
35
+ File.stubs(:open).with("foo.jml").times(1).returns(StringIO.new(@xml))
36
+ file = Meteoroid::File.new("foo.jml")
37
+
38
+ file.xml.expects(:xpath).times(1).returns([])
39
+
40
+ 2.times { file.samples }
41
+ end
42
+
43
+ end
44
+
45
+ describe "#xml" do
46
+
47
+ describe "valid file" do
48
+ it "should return a Nokogiri XML document" do
49
+ File.stubs(:open).with("foo.jml").returns(StringIO.new(@xml))
50
+ file = Meteoroid::File.new("foo.jml")
51
+
52
+ file.xml.should be_a(Nokogiri::XML::Document)
53
+ end
54
+
55
+ it "should mark the file as valid" do
56
+ File.stubs(:open).with("foo.jml").returns(StringIO.new(@xml))
57
+ file = Meteoroid::File.new("foo.jml")
58
+
59
+ file.valid.should be_true
60
+ end
61
+
62
+ it "should only parse the document once" do
63
+ File.expects(:open).times(1).with("foo.jml").returns(StringIO.new(@xml))
64
+ file = Meteoroid::File.new("foo.jml")
65
+
66
+ 2.times { file.xml }
67
+ end
68
+ end
69
+
70
+ describe "invalid file" do
71
+ it "should swallow the exception" do
72
+ file = Meteoroid::File.new("foo.jml")
73
+
74
+ lambda {
75
+ file.xml
76
+ }.should_not raise_exception(Errno::ENOENT)
77
+ end
78
+
79
+ it "should flag the file as invalid" do
80
+ file = Meteoroid::File.new("foo.jml")
81
+
82
+ file.valid.should be_false
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ end
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+
3
+ describe Meteoroid::Parser do
4
+
5
+ describe "files" do
6
+ before :each do
7
+ @xml = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures example.jml ]))
8
+ end
9
+
10
+ it "should initialize a single Meteoroid::File" do
11
+ File.expects(:open).times(1).returns(StringIO.new(@xml))
12
+ files = Meteoroid::Parser.new('foo.jml').files
13
+
14
+ files.should be_an(Array)
15
+ files.first.should be_an(Meteoroid::File)
16
+ end
17
+
18
+ it "should initialize Meteoroid::Files" do
19
+ File.expects(:open).times(2).returns(StringIO.new(@xml))
20
+ files = Meteoroid::Parser.new('foo.jml', 'bar.jml').files
21
+
22
+ files.should be_an(Array)
23
+ files.first.should be_an(Meteoroid::File)
24
+ end
25
+ end
26
+
27
+ describe "parse" do
28
+ it "should returns both samples from the file" do
29
+ xml = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures example.jml ]))
30
+ File.expects(:open).times(1).returns(StringIO.new(xml))
31
+
32
+ parsed = Meteoroid::Parser.new('foo.jml').parse
33
+
34
+ parsed.size.should == 2
35
+ end
36
+
37
+ it "should returns samples from both files" do
38
+ foo = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures example.jml ]))
39
+ bar = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures full.jml ]))
40
+
41
+ File.expects(:open).with('foo.jml').times(1).returns(StringIO.new(foo))
42
+ File.expects(:open).with('bar.jml').times(1).returns(StringIO.new(bar))
43
+
44
+ parsed = Meteoroid::Parser.new('foo.jml', 'bar.jml').parse
45
+
46
+ parsed.size.should == 562
47
+ end
48
+
49
+ it "should be able to handle a single example" do
50
+ xml = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures single.jml ]))
51
+ File.expects(:open).times(1).returns(StringIO.new(xml))
52
+
53
+ parsed = Meteoroid::Parser.new('foo.jml').parse
54
+
55
+ parsed.size.should == 1
56
+ end
57
+ end
58
+
59
+ describe "self.parse!" do
60
+ it "should parse the passed in files" do
61
+ xml = File.read(File.join(File.dirname(__FILE__), %w[ .. fixtures example.jml ]))
62
+ File.expects(:open).times(1).returns(StringIO.new(xml))
63
+
64
+ parsed = Meteoroid::Parser.parse!('foo.jml')
65
+
66
+ parsed.size.should == 2
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ describe Meteoroid::Sample do
4
+
5
+ describe "attribute mappings" do
6
+ Meteoroid::Sample::ATTRIBUTE_MAPPING.each do |key, value|
7
+ it "should allow #{key} accessible through #{value}" do
8
+ Meteoroid::Sample.new({}).should respond_to(value)
9
+ end
10
+ end
11
+ end
12
+
13
+ describe "convert" do
14
+
15
+ describe "Strings" do
16
+ { 'time' => 't', 'latency' => 'lt', 'response_code' => 'rc', 'bytes' => 'by' }.each do |method, attribute|
17
+ it "#{method} should return a Integer" do
18
+ Meteoroid::Sample.new({ attribute => '100' }).send(method.to_sym).should be_a(Integer)
19
+ end
20
+ end
21
+ end
22
+
23
+ describe "Strings" do
24
+ { 'label' => 'lb', 'response_message' => 'rm', 'thread_name' => 'tn' }.each do |method, attribute|
25
+ it "#{method} should return a String" do
26
+ Meteoroid::Sample.new({ attribute => 'foo' }).send(method.to_sym).should be_a(String)
27
+ end
28
+ end
29
+ end
30
+
31
+ describe "Timestamps" do
32
+ { 'timestamp' => 'tn' }.each do |method, attribute|
33
+ it "#{method} should return a Time" do
34
+ Meteoroid::Sample.new({ attribute => '1' }).send(method.to_sym).should be_a(Time)
35
+ end
36
+ end
37
+ end
38
+
39
+ describe "Boolean" do
40
+ { 'success' => 's' }.each do |method, attribute|
41
+ it "#{method} should return true" do
42
+ Meteoroid::Sample.new({ attribute => 'true' }).send(method).should == true
43
+ end
44
+ end
45
+ end
46
+
47
+ end
48
+
49
+ describe "from_xml" do
50
+ it "should initialize a Sample from the attribute_nodes" do
51
+ mock_node = [mock(:name => "lb", :value => "foo")]
52
+ sample = Meteoroid::Sample.from_xml(mock_node)
53
+
54
+ sample.label.should == "foo"
55
+ end
56
+
57
+ it "should initialize a Sample without a URL" do
58
+ mock_node = [mock(:name => "lb", :value => "foo")]
59
+ sample = Meteoroid::Sample.from_xml(mock_node)
60
+
61
+ sample.url.should == ""
62
+ end
63
+
64
+ it "should initialize a Sample with a URL" do
65
+ mock_node = [mock(:name => "lb", :value => "foo")]
66
+ sample = Meteoroid::Sample.from_xml(mock_node, "foo.bar")
67
+
68
+ sample.url.should == "foo.bar"
69
+ end
70
+ end
71
+
72
+ end
@@ -0,0 +1,10 @@
1
+ require "bundler"
2
+ Bundler.setup
3
+
4
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
5
+
6
+ require 'meteoroid'
7
+
8
+ RSpec.configure do |config|
9
+ config.mock_with :mocha
10
+ end
metadata ADDED
@@ -0,0 +1,159 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: meteoroid
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Duncan Grazier
14
+ - Paul Guelpa
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2011-07-07 00:00:00 -04:00
20
+ default_executable:
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: mocha
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ~>
29
+ - !ruby/object:Gem::Version
30
+ hash: 35
31
+ segments:
32
+ - 0
33
+ - 9
34
+ - 12
35
+ version: 0.9.12
36
+ type: :development
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ~>
45
+ - !ruby/object:Gem::Version
46
+ hash: 63
47
+ segments:
48
+ - 0
49
+ - 9
50
+ - 2
51
+ version: 0.9.2
52
+ type: :development
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: rspec
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ~>
61
+ - !ruby/object:Gem::Version
62
+ hash: 23
63
+ segments:
64
+ - 2
65
+ - 6
66
+ - 0
67
+ version: 2.6.0
68
+ type: :development
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: nokogiri
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ hash: 3
79
+ segments:
80
+ - 1
81
+ - 5
82
+ - 0
83
+ version: 1.5.0
84
+ type: :runtime
85
+ version_requirements: *id004
86
+ description: Use this library to transform JML into other stuff
87
+ email:
88
+ - duncan@impossiblerocket.com
89
+ executables:
90
+ - meteoroid
91
+ extensions: []
92
+
93
+ extra_rdoc_files: []
94
+
95
+ files:
96
+ - .gitignore
97
+ - .travis.yml
98
+ - Gemfile
99
+ - Gemfile.lock
100
+ - LICENSE
101
+ - README.html
102
+ - README.markdown
103
+ - Rakefile
104
+ - bin/meteoroid
105
+ - lib/meteoroid.rb
106
+ - lib/meteoroid/file.rb
107
+ - lib/meteoroid/parser.rb
108
+ - lib/meteoroid/sample.rb
109
+ - lib/meteoroid/version.rb
110
+ - meteoroid.gemspec
111
+ - spec/fixtures/example.jml
112
+ - spec/fixtures/full.jml
113
+ - spec/fixtures/single.jml
114
+ - spec/meteoroid/file_spec.rb
115
+ - spec/meteoroid/parser_spec.rb
116
+ - spec/meteoroid/sample_spec.rb
117
+ - spec/spec_helper.rb
118
+ has_rdoc: true
119
+ homepage: http://github.com/itsmeduncan/meteoroid
120
+ licenses: []
121
+
122
+ post_install_message:
123
+ rdoc_options: []
124
+
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ hash: 3
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ">="
140
+ - !ruby/object:Gem::Version
141
+ hash: 3
142
+ segments:
143
+ - 0
144
+ version: "0"
145
+ requirements: []
146
+
147
+ rubyforge_project:
148
+ rubygems_version: 1.3.7
149
+ signing_key:
150
+ specification_version: 3
151
+ summary: Transform JMeter output into something useful
152
+ test_files:
153
+ - spec/fixtures/example.jml
154
+ - spec/fixtures/full.jml
155
+ - spec/fixtures/single.jml
156
+ - spec/meteoroid/file_spec.rb
157
+ - spec/meteoroid/parser_spec.rb
158
+ - spec/meteoroid/sample_spec.rb
159
+ - spec/spec_helper.rb