vayacondios-server 0.2.11 → 0.3.0
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.
- data/.gitignore +3 -1
- data/.travis.yml +2 -0
- data/Gemfile +15 -9
- data/LICENSE.md +2 -6
- data/Procfile +1 -1
- data/README.md +656 -111
- data/Rakefile +89 -6
- data/bin/vcd +10 -0
- data/bin/vcd-server +8 -0
- data/config/database.yml +6 -0
- data/config/spec.example.yml +18 -0
- data/config/vayacondios.example.yml +15 -0
- data/config/vcd-server.rb +37 -0
- data/examples/configuration.rb +56 -0
- data/examples/event_stream.rb +19 -0
- data/examples/simple.rb +61 -0
- data/features/event.feature +319 -0
- data/features/events.feature +208 -0
- data/features/stash.feature +840 -0
- data/features/stashes.feature +492 -0
- data/features/step_definitions/stash_steps.rb +113 -0
- data/features/stream.feature +30 -0
- data/features/support/em.rb +14 -0
- data/features/support/env.rb +13 -0
- data/lib/vayacondios/configuration.rb +63 -0
- data/lib/vayacondios/server/api.rb +126 -0
- data/lib/vayacondios/server/api_options.rb +56 -0
- data/lib/vayacondios/server/configuration.rb +23 -0
- data/lib/vayacondios/server/driver.rb +71 -0
- data/lib/vayacondios/server/drivers/mongo.rb +126 -0
- data/lib/vayacondios/server/handlers/document_handler.rb +81 -0
- data/lib/vayacondios/server/handlers/event_handler.rb +31 -26
- data/lib/vayacondios/server/handlers/events_handler.rb +31 -0
- data/lib/vayacondios/server/handlers/stash_handler.rb +69 -0
- data/lib/vayacondios/server/handlers/stashes_handler.rb +49 -0
- data/lib/vayacondios/server/handlers/stream_handler.rb +39 -0
- data/lib/vayacondios/server/models/document.rb +87 -0
- data/lib/vayacondios/server/models/event.rb +198 -0
- data/lib/vayacondios/server/models/stash.rb +100 -0
- data/lib/vayacondios/server.rb +35 -0
- data/lib/vayacondios-server.rb +19 -13
- data/lib/vayacondios.rb +22 -0
- data/pom.xml +124 -4
- data/spec/configuration_spec.rb +41 -0
- data/spec/server/api_options_spec.rb +32 -0
- data/spec/server/api_spec.rb +279 -0
- data/spec/server/configuration_spec.rb +27 -0
- data/spec/server/drivers/mongo_spec.rb +107 -0
- data/spec/server/handlers/event_handler_spec.rb +62 -0
- data/spec/server/handlers/events_handler_spec.rb +51 -0
- data/spec/server/handlers/stash_handler_spec.rb +68 -0
- data/spec/server/handlers/stashes_handler_spec.rb +50 -0
- data/spec/server/handlers/stream_handler_spec.rb +5 -0
- data/spec/server/models/document_spec.rb +9 -0
- data/spec/server/models/event_spec.rb +185 -0
- data/spec/server/models/stash_spec.rb +95 -0
- data/spec/spec_helper.rb +23 -3
- data/spec/support/database_helper.rb +42 -0
- data/spec/support/log_helper.rb +19 -0
- data/spec/support/shared_context_for_events.rb +22 -0
- data/spec/support/shared_context_for_stashes.rb +24 -0
- data/spec/support/shared_examples_for_handlers.rb +32 -0
- data/src/main/java/com/infochimps/vayacondios/BaseClient.java +342 -0
- data/src/main/java/com/infochimps/vayacondios/HTTPClient.java +426 -0
- data/src/main/java/com/infochimps/vayacondios/VayacondiosClient.java +487 -65
- data/src/main/java/com/infochimps/vayacondios/test/IntegrationTest.java +3 -0
- data/src/test/java/com/infochimps/vayacondios/BaseClientTest.java +50 -0
- data/src/test/java/com/infochimps/vayacondios/HTTPClientIT.java +267 -0
- data/vayacondios-server.gemspec +9 -9
- metadata +127 -122
- checksums.yaml +0 -15
- data/.rspec +0 -2
- data/.yardopts +0 -10
- data/Guardfile +0 -41
- data/app/http_shim.rb +0 -71
- data/bin/vcd.sh +0 -27
- data/config/http_shim.rb +0 -43
- data/config/vayacondios.example.yaml +0 -7
- data/config/vayacondios.yaml +0 -7
- data/examples/java/ItemSetTest.java +0 -76
- data/lib/tasks/publish.rake +0 -23
- data/lib/tasks/spec.rake +0 -11
- data/lib/tasks/yard.rake +0 -2
- data/lib/vayacondios/client/config.rb +0 -7
- data/lib/vayacondios/client/configliere.rb +0 -38
- data/lib/vayacondios/client/cube_client.rb +0 -39
- data/lib/vayacondios/client/http_client.rb +0 -49
- data/lib/vayacondios/client/itemset.rb +0 -130
- data/lib/vayacondios/client/legacy_switch.rb +0 -43
- data/lib/vayacondios/client/notifier.rb +0 -123
- data/lib/vayacondios/client/zabbix_client.rb +0 -148
- data/lib/vayacondios/legacy_switch.rb +0 -43
- data/lib/vayacondios/server/errors/bad_request.rb +0 -6
- data/lib/vayacondios/server/errors/not_found.rb +0 -6
- data/lib/vayacondios/server/handlers/config_handler.rb +0 -32
- data/lib/vayacondios/server/handlers/itemset_handler.rb +0 -60
- data/lib/vayacondios/server/legacy_switch.rb +0 -43
- data/lib/vayacondios/server/model/config_document.rb +0 -89
- data/lib/vayacondios/server/model/document.rb +0 -25
- data/lib/vayacondios/server/model/event_document.rb +0 -94
- data/lib/vayacondios/server/model/itemset_document.rb +0 -126
- data/lib/vayacondios/server/rack/extract_methods.rb +0 -35
- data/lib/vayacondios/server/rack/jsonize.rb +0 -43
- data/lib/vayacondios/server/rack/params.rb +0 -50
- data/lib/vayacondios/server/rack/path.rb +0 -23
- data/lib/vayacondios/server/rack/path_validation.rb +0 -22
- data/lib/vayacondios/version.rb +0 -3
- data/lib/vayacondios-client.rb +0 -22
- data/scripts/hadoop_monitor/configurable.rb +0 -66
- data/scripts/hadoop_monitor/hadoop_attempt_scraper.rb +0 -45
- data/scripts/hadoop_monitor/hadoop_client.rb +0 -273
- data/scripts/hadoop_monitor/hadoop_monitor.rb +0 -101
- data/scripts/hadoop_monitor/hadoopable.rb +0 -65
- data/scripts/hadoop_monitor/machine_monitor.rb +0 -115
- data/scripts/s3_cataloger/buckets +0 -33
- data/scripts/s3_cataloger/foreach_bucket +0 -88
- data/scripts/s3_cataloger/parse_ls.py +0 -391
- data/spec/client/itemset_legacy_spec.rb +0 -55
- data/spec/client/itemset_spec.rb +0 -60
- data/spec/client/notifier_spec.rb +0 -120
- data/spec/server/config_spec.rb +0 -113
- data/spec/server/event_spec.rb +0 -103
- data/spec/server/itemset_legacy_spec.rb +0 -320
- data/spec/server/itemset_spec.rb +0 -317
- data/spec/server/rack/extract_methods_spec.rb +0 -60
- data/spec/server/rack/path_spec.rb +0 -36
- data/spec/server/rack/path_validation_spec.rb +0 -22
- data/spec/server/server_spec.rb +0 -20
- data/spec/support/mongo_cleaner.rb +0 -32
- data/src/main/java/ItemSetTest.java +0 -76
- data/src/main/java/com/infochimps/util/CurrentClass.java +0 -26
- data/src/main/java/com/infochimps/util/DebugUtil.java +0 -38
- data/src/main/java/com/infochimps/util/HttpHelper.java +0 -181
- data/src/main/java/com/infochimps/vayacondios/ItemSets.java +0 -373
- data/src/main/java/com/infochimps/vayacondios/LinkToVCD.java +0 -18
- data/src/main/java/com/infochimps/vayacondios/MemoryVCDShim.java +0 -84
- data/src/main/java/com/infochimps/vayacondios/Organization.java +0 -62
- data/src/main/java/com/infochimps/vayacondios/PathBuilder.java +0 -13
- data/src/main/java/com/infochimps/vayacondios/StandardVCDLink.java +0 -218
- data/src/main/java/com/infochimps/vayacondios/VCDIntegrationTest.java +0 -108
- data/src/test/java/com/infochimps/vayacondios/TestVayacondiosInMemory.java +0 -78
- data/vayacondios-client.gemspec +0 -25
data/spec/client/itemset_spec.rb
DELETED
@@ -1,60 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'multi_json'
|
4
|
-
|
5
|
-
require_relative '../../lib/vayacondios/client/itemset'
|
6
|
-
|
7
|
-
describe Vayacondios::Client::ItemSet do
|
8
|
-
context "when initialized" do
|
9
|
-
it "can be passed a host, port, organization, topic and id" do
|
10
|
-
Vayacondios::Client::ItemSet.new("foohost", 9999, "fooorg", "footopic", "fooid")
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
context "after instantiation" do
|
15
|
-
itemset = Vayacondios::Client::ItemSet.new("foohost", 9999, "fooorg", "footopic", "fooid")
|
16
|
-
ary = ["foo", "bar", "baz"]
|
17
|
-
|
18
|
-
# testing internals here to avoid shimming up HTTP libraries.
|
19
|
-
|
20
|
-
it "generates a put request without a patch header when asked to create" do
|
21
|
-
Vayacondios.force_legacy_mode false
|
22
|
-
|
23
|
-
req = itemset.instance_eval{_req(:create, ary)}
|
24
|
-
|
25
|
-
req.method.should eql('PUT')
|
26
|
-
req.body.should eql(MultiJson.encode(contents: ary))
|
27
|
-
req.path.should eql('/v1/fooorg/itemset/footopic/fooid')
|
28
|
-
req.each_header.to_a.should_not include(["x_method", "PATCH"])
|
29
|
-
end
|
30
|
-
|
31
|
-
it "generates a put request with a patch header when asked to update" do
|
32
|
-
Vayacondios.force_legacy_mode false
|
33
|
-
|
34
|
-
req = itemset.instance_eval{_req(:update, ary)}
|
35
|
-
|
36
|
-
req.method.should eql('PUT')
|
37
|
-
req.body.should eql(MultiJson.encode(contents: ary))
|
38
|
-
req.path.should eql('/v1/fooorg/itemset/footopic/fooid')
|
39
|
-
req.each_header.to_a.should include(["x-method", "PATCH"])
|
40
|
-
end
|
41
|
-
|
42
|
-
it "generates a get request when asked to fetch" do
|
43
|
-
req = itemset.instance_eval{_req(:fetch)}
|
44
|
-
|
45
|
-
req.method.should eql('GET')
|
46
|
-
req.body.should be_nil
|
47
|
-
req.path.should eql('/v1/fooorg/itemset/footopic/fooid')
|
48
|
-
end
|
49
|
-
|
50
|
-
it "generates a delete request when asked to remove" do
|
51
|
-
Vayacondios.force_legacy_mode false
|
52
|
-
|
53
|
-
req = itemset.instance_eval{_req(:remove, ary)}
|
54
|
-
|
55
|
-
req.method.should eql('DELETE')
|
56
|
-
req.body.should eql(MultiJson.encode(contents: ary))
|
57
|
-
req.path.should eql('/v1/fooorg/itemset/footopic/fooid')
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
@@ -1,120 +0,0 @@
|
|
1
|
-
require 'vayacondios-client'
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
class FakeModel
|
6
|
-
include Vayacondios::Notifications
|
7
|
-
end
|
8
|
-
|
9
|
-
describe FakeModel do
|
10
|
-
context 'including', Vayacondios::Notifications do
|
11
|
-
|
12
|
-
it 'defines an instance method notify()' do
|
13
|
-
subject.should respond_to(:notify)
|
14
|
-
end
|
15
|
-
|
16
|
-
it 'adds a configurable attribute :notifier with default' do
|
17
|
-
subject.notifier.should be_instance_of(Vayacondios.default_notifier.class)
|
18
|
-
end
|
19
|
-
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe Vayacondios::Notifier do
|
24
|
-
|
25
|
-
shared_examples_for described_class do
|
26
|
-
it{ should respond_to(:notify) }
|
27
|
-
end
|
28
|
-
|
29
|
-
context '.prepare' do
|
30
|
-
context 'given a Hash-like object' do
|
31
|
-
let(:hashlike) { double :hashlike, :to_hash => {} }
|
32
|
-
it 'returns a Hash' do
|
33
|
-
subject.prepare(hashlike).should be_instance_of(Hash)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context 'given a bad argument' do
|
38
|
-
let(:bad_arg) { 'shazam' }
|
39
|
-
it 'raises an ArgumentError' do
|
40
|
-
expect{ subject.prepare(bad_arg) }.to raise_error(ArgumentError, /Cannot notify.*#{bad_arg}.*require a hash-like object/)
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
describe Vayacondios::HttpNotifier do
|
48
|
-
it_behaves_like Vayacondios::Notifier
|
49
|
-
|
50
|
-
its(:client){ should be_instance_of(Vayacondios::HttpClient) }
|
51
|
-
|
52
|
-
context '#notify' do
|
53
|
-
let(:test_client) { double :client }
|
54
|
-
let(:topic) { 'weeeeeeeeeee' }
|
55
|
-
let(:cargo) { Hash.new }
|
56
|
-
|
57
|
-
before do
|
58
|
-
subject.stub(:client).and_return(test_client)
|
59
|
-
subject.stub(:prepare).and_return(cargo)
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'notifies its client correctly' do
|
63
|
-
test_client.should_receive(:insert).with(cargo, :event, topic)
|
64
|
-
subject.notify(topic, cargo)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
describe Vayacondios::LogNotifier do
|
70
|
-
it_behaves_like Vayacondios::Notifier
|
71
|
-
|
72
|
-
its(:client){ should be_instance_of(Logger) }
|
73
|
-
|
74
|
-
context '#notify' do
|
75
|
-
let(:test_client) { double :client }
|
76
|
-
let(:topic) { 'weeeeeeeeeee' }
|
77
|
-
let(:cargo) { Hash.new }
|
78
|
-
|
79
|
-
before do
|
80
|
-
subject.stub(:client).and_return(test_client)
|
81
|
-
subject.stub(:prepare).and_return(cargo)
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'notifies its client correctly' do
|
85
|
-
test_client.should_receive(:info).with(/Notification.*#{topic}/)
|
86
|
-
subject.notify(topic, cargo)
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
describe Vayacondios::NotifierFactory do
|
93
|
-
context '.receive' do
|
94
|
-
context 'given :http' do
|
95
|
-
it 'builds a HttpNotifier' do
|
96
|
-
described_class.receive(type: 'http').should be_instance_of(Vayacondios::HttpNotifier)
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context 'given :log' do
|
101
|
-
it 'builds a LogNotifier' do
|
102
|
-
described_class.receive(type: 'log').should be_instance_of(Vayacondios::LogNotifier)
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context 'given a bad argument' do
|
107
|
-
it 'raises an ArgumentError' do
|
108
|
-
expect{ described_class.receive(type: 'bad') }.to raise_error(ArgumentError, /not a valid build option/)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
|
114
|
-
describe Vayacondios do
|
115
|
-
|
116
|
-
it 'has a class method notify()' do
|
117
|
-
described_class.should respond_to(:notify)
|
118
|
-
end
|
119
|
-
|
120
|
-
end
|
data/spec/server/config_spec.rb
DELETED
@@ -1,113 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'multi_json'
|
4
|
-
|
5
|
-
require File.join(File.dirname(__FILE__), '../../', 'app/http_shim')
|
6
|
-
|
7
|
-
describe HttpShim do
|
8
|
-
include Goliath::TestHelper
|
9
|
-
|
10
|
-
let(:err) { Proc.new{ |c| fail "HTTP Request Failed #{c.error}" } }
|
11
|
-
|
12
|
-
context 'Configuration management' do
|
13
|
-
it 'requires a topic' do
|
14
|
-
with_api(HttpShim) do |api|
|
15
|
-
put_request({
|
16
|
-
:path => '/v1/infochimps/config/',
|
17
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
18
|
-
:head => { :content_type => 'application/json' }
|
19
|
-
}, err) do |c|
|
20
|
-
c.response_header.status.should == 400
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'requires an id' do
|
26
|
-
with_api(HttpShim) do |api|
|
27
|
-
put_request({
|
28
|
-
:path => '/v1/infochimps/config/power',
|
29
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
30
|
-
:head => { :content_type => 'application/json' }
|
31
|
-
}, err) do |c|
|
32
|
-
c.response_header.status.should == 400
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'stores configuration' do
|
38
|
-
with_api(HttpShim) do |api|
|
39
|
-
put_request({
|
40
|
-
:path => '/v1/infochimps/config/power/level',
|
41
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
42
|
-
:head => { :content_type => 'application/json' }
|
43
|
-
}, err) do |c|
|
44
|
-
c.response_header.status.should == 200
|
45
|
-
end
|
46
|
-
|
47
|
-
get_mongo_db do |db|
|
48
|
-
db.collection("infochimps.config").find_one({:_id => "power"}).should eql({"_id" => "power", "level" => "awesome"})
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
it 'rejects deep IDs' do
|
54
|
-
with_api(HttpShim) do |api|
|
55
|
-
put_request({
|
56
|
-
:path => '/v1/infochimps/config/power/level/is/invalid',
|
57
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
58
|
-
:head => { :content_type => 'application/json' }
|
59
|
-
}, err) do |c|
|
60
|
-
c.response_header.status.should == 400
|
61
|
-
end
|
62
|
-
|
63
|
-
get_mongo_db do |db|
|
64
|
-
db.collection("infochimps.config").find_one({:_id => "power"}).should be_nil
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'retrieves configuration' do
|
70
|
-
with_api(HttpShim) do |api|
|
71
|
-
put_request({
|
72
|
-
:path => '/v1/infochimps/config/power/level',
|
73
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
74
|
-
:head => { :content_type => 'application/json' }
|
75
|
-
}, err)
|
76
|
-
end
|
77
|
-
with_api(HttpShim) do |api|
|
78
|
-
get_request({:path => '/v1/infochimps/config/power/level'}, err) do |c|
|
79
|
-
c.response_header.status.should == 200
|
80
|
-
MultiJson.load(c.response).should eql({"level" => "awesome"})
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'merge deep configuration' do
|
86
|
-
with_api(HttpShim) do |api|
|
87
|
-
put_request({
|
88
|
-
:path => '/v1/infochimps/config/merge/test',
|
89
|
-
:body => MultiJson.dump({ :foo => { :bar => 3 } }),
|
90
|
-
:head => { :content_type => 'application/json' }
|
91
|
-
}, err)
|
92
|
-
end
|
93
|
-
with_api(HttpShim) do |api|
|
94
|
-
put_request({
|
95
|
-
:path => '/v1/infochimps/config/merge/test',
|
96
|
-
:body => MultiJson.dump({ :foo => { :baz => 7 } }),
|
97
|
-
:head => { :content_type => 'application/json' }
|
98
|
-
}, err)
|
99
|
-
end
|
100
|
-
with_api(HttpShim) do |api|
|
101
|
-
get_request({:path => '/v1/infochimps/config/merge/test'}, err) do |c|
|
102
|
-
c.response_header.status.should == 200
|
103
|
-
MultiJson.load(c.response).should eql({
|
104
|
-
"foo" => {
|
105
|
-
"bar" => 3,
|
106
|
-
"baz" => 7
|
107
|
-
}
|
108
|
-
})
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
data/spec/server/event_spec.rb
DELETED
@@ -1,103 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
require 'multi_json'
|
4
|
-
|
5
|
-
require File.join(File.dirname(__FILE__), '../../', 'app/http_shim')
|
6
|
-
|
7
|
-
describe HttpShim do
|
8
|
-
include Goliath::TestHelper
|
9
|
-
|
10
|
-
let(:err) { Proc.new{ |c| fail "HTTP Request Failed #{c.response}" } }
|
11
|
-
|
12
|
-
context 'Event tracking' do
|
13
|
-
it 'requires a topic' do
|
14
|
-
with_api(HttpShim) do |api|
|
15
|
-
put_request({
|
16
|
-
:path => '/v1/infochimps/event/',
|
17
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
18
|
-
:head => { :content_type => 'application/json' }
|
19
|
-
}, err) do |c|
|
20
|
-
c.response_header.status.should == 400
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'does not require an id' do
|
26
|
-
with_api(HttpShim) do |api|
|
27
|
-
put_request({
|
28
|
-
:path => '/v1/infochimps/event/power',
|
29
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
30
|
-
:head => { :content_type => 'application/json' }
|
31
|
-
}, err) do |c|
|
32
|
-
c.response_header.status.should == 200
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
it 'will accept an id' do
|
38
|
-
with_api(HttpShim) do |api|
|
39
|
-
put_request({
|
40
|
-
:path => '/v1/infochimps/event/power/level',
|
41
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
42
|
-
:head => { :content_type => 'application/json' }
|
43
|
-
}, err) do |c|
|
44
|
-
c.response_header.status.should == 200
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
it 'rejects deep IDs' do
|
50
|
-
with_api(HttpShim) do |api|
|
51
|
-
put_request({
|
52
|
-
:path => '/v1/infochimps/event/power/level/is/invalid',
|
53
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
54
|
-
:head => { :content_type => 'application/json' }
|
55
|
-
}, err) do |c|
|
56
|
-
c.response_header.status.should == 400
|
57
|
-
end
|
58
|
-
|
59
|
-
get_mongo_db do |db|
|
60
|
-
db.collection("infochimps.config").find_one({:_id => "power"}).should be_nil
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
it 'stores events' do
|
66
|
-
with_api(HttpShim) do |api|
|
67
|
-
put_request({
|
68
|
-
:path => '/v1/infochimps/event/power/level',
|
69
|
-
:body => MultiJson.dump({:level=>"awesome"}),
|
70
|
-
:head => { :content_type => 'application/json' }
|
71
|
-
}, err) do |c|
|
72
|
-
c.response_header.status.should == 200
|
73
|
-
end
|
74
|
-
|
75
|
-
get_mongo_db do |db|
|
76
|
-
doc = db.collection("infochimps.power.events").find_one({:_id => "level"})
|
77
|
-
doc["_id"].should eql "level"
|
78
|
-
doc["d"].should eql ({"level" => "awesome"})
|
79
|
-
doc["t"].should be_within(1).of Time.now
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
it 'retrieves events' do
|
85
|
-
current_time = Time.now
|
86
|
-
with_api(HttpShim) do |api|
|
87
|
-
put_request({
|
88
|
-
:path => '/v1/infochimps/event/power/level',
|
89
|
-
:body => MultiJson.dump({:level=>"awesome", :_timestamp => current_time}),
|
90
|
-
:head => { :content_type => 'application/json' }
|
91
|
-
}, err) do |c|
|
92
|
-
c.response_header.status.should == 200
|
93
|
-
end
|
94
|
-
end
|
95
|
-
with_api(HttpShim) do |api|
|
96
|
-
get_request({:path => '/v1/infochimps/event/power/level'}, err) do |c|
|
97
|
-
c.response_header.status.should == 200
|
98
|
-
MultiJson.load(c.response).should eql ({"level" => "awesome", "_timestamp" => current_time.to_s})
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|