splunk-sdk-ruby 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +160 -0
- data/Gemfile +8 -0
- data/LICENSE +177 -0
- data/README.md +310 -0
- data/Rakefile +40 -0
- data/examples/1_connect.rb +51 -0
- data/examples/2_manage.rb +103 -0
- data/examples/3_blocking_searches.rb +82 -0
- data/examples/4_asynchronous_searches.rb +79 -0
- data/examples/5_stream_data_to_splunk.rb +79 -0
- data/lib/splunk-sdk-ruby.rb +47 -0
- data/lib/splunk-sdk-ruby/ambiguous_entity_reference.rb +28 -0
- data/lib/splunk-sdk-ruby/atomfeed.rb +323 -0
- data/lib/splunk-sdk-ruby/collection.rb +417 -0
- data/lib/splunk-sdk-ruby/collection/apps.rb +35 -0
- data/lib/splunk-sdk-ruby/collection/case_insensitive_collection.rb +58 -0
- data/lib/splunk-sdk-ruby/collection/configuration_file.rb +50 -0
- data/lib/splunk-sdk-ruby/collection/configurations.rb +80 -0
- data/lib/splunk-sdk-ruby/collection/jobs.rb +136 -0
- data/lib/splunk-sdk-ruby/collection/messages.rb +51 -0
- data/lib/splunk-sdk-ruby/context.rb +522 -0
- data/lib/splunk-sdk-ruby/entity.rb +260 -0
- data/lib/splunk-sdk-ruby/entity/index.rb +191 -0
- data/lib/splunk-sdk-ruby/entity/job.rb +339 -0
- data/lib/splunk-sdk-ruby/entity/message.rb +36 -0
- data/lib/splunk-sdk-ruby/entity/saved_search.rb +71 -0
- data/lib/splunk-sdk-ruby/entity/stanza.rb +45 -0
- data/lib/splunk-sdk-ruby/entity_not_ready.rb +26 -0
- data/lib/splunk-sdk-ruby/illegal_operation.rb +27 -0
- data/lib/splunk-sdk-ruby/namespace.rb +239 -0
- data/lib/splunk-sdk-ruby/resultsreader.rb +716 -0
- data/lib/splunk-sdk-ruby/service.rb +339 -0
- data/lib/splunk-sdk-ruby/splunk_http_error.rb +49 -0
- data/lib/splunk-sdk-ruby/synonyms.rb +50 -0
- data/lib/splunk-sdk-ruby/version.rb +27 -0
- data/lib/splunk-sdk-ruby/xml_shim.rb +117 -0
- data/splunk-sdk-ruby.gemspec +27 -0
- data/test/atom_test_data.rb +472 -0
- data/test/data/atom/atom_feed_with_message.xml +19 -0
- data/test/data/atom/atom_with_feed.xml +99 -0
- data/test/data/atom/atom_with_several_entries.xml +101 -0
- data/test/data/atom/atom_with_simple_entries.xml +30 -0
- data/test/data/atom/atom_without_feed.xml +248 -0
- data/test/data/export/4.2.5/export_results.xml +88 -0
- data/test/data/export/4.3.5/export_results.xml +87 -0
- data/test/data/export/5.0.1/export_results.xml +78 -0
- data/test/data/export/5.0.1/nonreporting.xml +232 -0
- data/test/data/results/4.2.5/results-empty.xml +0 -0
- data/test/data/results/4.2.5/results-preview.xml +255 -0
- data/test/data/results/4.2.5/results.xml +336 -0
- data/test/data/results/4.3.5/results-empty.xml +0 -0
- data/test/data/results/4.3.5/results-preview.xml +1057 -0
- data/test/data/results/4.3.5/results.xml +626 -0
- data/test/data/results/5.0.2/results-empty.xml +1 -0
- data/test/data/results/5.0.2/results-empty_preview.xml +1 -0
- data/test/data/results/5.0.2/results-preview.xml +448 -0
- data/test/data/results/5.0.2/results.xml +501 -0
- data/test/export_test_data.json +360 -0
- data/test/resultsreader_test_data.json +1119 -0
- data/test/services.server.info.xml +43 -0
- data/test/services.xml +111 -0
- data/test/test_atomfeed.rb +71 -0
- data/test/test_collection.rb +278 -0
- data/test/test_configuration_file.rb +124 -0
- data/test/test_context.rb +119 -0
- data/test/test_entity.rb +95 -0
- data/test/test_helper.rb +250 -0
- data/test/test_http_error.rb +52 -0
- data/test/test_index.rb +91 -0
- data/test/test_jobs.rb +319 -0
- data/test/test_messages.rb +17 -0
- data/test/test_namespace.rb +188 -0
- data/test/test_restarts.rb +49 -0
- data/test/test_resultsreader.rb +106 -0
- data/test/test_roles.rb +41 -0
- data/test/test_saved_searches.rb +119 -0
- data/test/test_service.rb +65 -0
- data/test/test_users.rb +33 -0
- data/test/test_xml_shim.rb +28 -0
- data/test/testfile.txt +1 -0
- metadata +200 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
<ns0:feed xmlns:ns0="http://www.w3.org/2005/Atom">
|
2
|
+
<ns0:title>server-info</ns0:title>
|
3
|
+
<ns0:id>https://localhost/services/server/info</ns0:id>
|
4
|
+
<ns0:updated>2011-07-01T16:53:53-07:00</ns0:updated>
|
5
|
+
<ns0:generator version="101089" />
|
6
|
+
<ns0:author>
|
7
|
+
<ns0:name>Splunk</ns0:name>
|
8
|
+
</ns0:author>
|
9
|
+
<ns1:totalResults xmlns:ns1="http://a9.com/-/spec/opensearch/1.1/">1</ns1:totalResults>
|
10
|
+
<ns1:itemsPerPage xmlns:ns1="http://a9.com/-/spec/opensearch/1.1/">30</ns1:itemsPerPage>
|
11
|
+
<ns1:startIndex xmlns:ns1="http://a9.com/-/spec/opensearch/1.1/">0</ns1:startIndex>
|
12
|
+
<ns1:messages xmlns:ns1="http://dev.splunk.com/ns/rest" />
|
13
|
+
<ns0:entry>
|
14
|
+
<ns0:title>server-info</ns0:title>
|
15
|
+
<ns0:id>https://localhost/services/server/info/server-info</ns0:id>
|
16
|
+
<ns0:updated>2011-07-01T16:53:53-07:00</ns0:updated>
|
17
|
+
<ns0:link href="/services/server/info/server-info" rel="alternate" />
|
18
|
+
<ns0:author>
|
19
|
+
<ns0:name>system</ns0:name>
|
20
|
+
</ns0:author>
|
21
|
+
<ns0:link href="/services/server/info/server-info" rel="list" />
|
22
|
+
<ns0:content type="text/xml">
|
23
|
+
<ns1:dict xmlns:ns1="http://dev.splunk.com/ns/rest">
|
24
|
+
<ns1:key name="build">101089</ns1:key>
|
25
|
+
<ns1:key name="cpu_arch">i386</ns1:key>
|
26
|
+
<ns1:key name="eai:acl"><ns1:dict><ns1:key name="app" /><ns1:key name="can_write">0</ns1:key><ns1:key name="modifiable">0</ns1:key><ns1:key name="owner">system</ns1:key><ns1:key name="perms"><ns1:dict><ns1:key name="read"><ns1:list><ns1:item>*</ns1:item></ns1:list></ns1:key><ns1:key name="write"><ns1:list /></ns1:key></ns1:dict></ns1:key><ns1:key name="sharing">system</ns1:key></ns1:dict></ns1:key>
|
27
|
+
<ns1:key name="guid">3FD18BC4-010D-4845-AD51-27963CB17412</ns1:key>
|
28
|
+
<ns1:key name="isFree">0</ns1:key>
|
29
|
+
<ns1:key name="isTrial">0</ns1:key>
|
30
|
+
<ns1:key name="licenseKeys"><ns1:list><ns1:item>E4BF242DB47AB54B5F9DC69D00E65A4BD4E89F917B93D0FA611EDF85ABFC639D</ns1:item></ns1:list></ns1:key>
|
31
|
+
<ns1:key name="licenseSignature">3af106e3af0db73ca69339684cad26eb</ns1:key>
|
32
|
+
<ns1:key name="licenseState">OK</ns1:key>
|
33
|
+
<ns1:key name="master_guid">3FD18BC4-010D-4845-AD51-27963CB17412</ns1:key>
|
34
|
+
<ns1:key name="mode">normal</ns1:key>
|
35
|
+
<ns1:key name="os_build">Darwin Kernel Version 10.8.0: Tue Jun 7 16:33:36 PDT 2011; root:xnu-1504.15.3~1/RELEASE_I386</ns1:key>
|
36
|
+
<ns1:key name="os_name">Darwin</ns1:key>
|
37
|
+
<ns1:key name="os_version">10.8.0</ns1:key>
|
38
|
+
<ns1:key name="serverName">blovering.local</ns1:key>
|
39
|
+
<ns1:key name="version">4.3</ns1:key>
|
40
|
+
</ns1:dict>
|
41
|
+
</ns0:content>
|
42
|
+
</ns0:entry>
|
43
|
+
</ns0:feed>
|
data/test/services.xml
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
<ns0:feed xmlns:ns0="http://www.w3.org/2005/Atom">
|
2
|
+
<ns0:title>services</ns0:title>
|
3
|
+
<ns0:id>https://localhost/services/</ns0:id>
|
4
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
5
|
+
<ns0:generator version="101089" />
|
6
|
+
<ns0:author>
|
7
|
+
<ns0:name>Splunk</ns0:name>
|
8
|
+
</ns0:author>
|
9
|
+
<ns0:entry>
|
10
|
+
<ns0:title>alerts</ns0:title>
|
11
|
+
<ns0:id>https://localhost/services/alerts</ns0:id>
|
12
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
13
|
+
<ns0:link href="/services/alerts" rel="alternate" />
|
14
|
+
</ns0:entry>
|
15
|
+
<ns0:entry>
|
16
|
+
<ns0:title>apps</ns0:title>
|
17
|
+
<ns0:id>https://localhost/services/apps</ns0:id>
|
18
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
19
|
+
<ns0:link href="/services/apps" rel="alternate" />
|
20
|
+
</ns0:entry>
|
21
|
+
<ns0:entry>
|
22
|
+
<ns0:title>authentication</ns0:title>
|
23
|
+
<ns0:id>https://localhost/services/authentication</ns0:id>
|
24
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
25
|
+
<ns0:link href="/services/authentication" rel="alternate" />
|
26
|
+
</ns0:entry>
|
27
|
+
<ns0:entry>
|
28
|
+
<ns0:title>authorization</ns0:title>
|
29
|
+
<ns0:id>https://localhost/services/authorization</ns0:id>
|
30
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
31
|
+
<ns0:link href="/services/authorization" rel="alternate" />
|
32
|
+
</ns0:entry>
|
33
|
+
<ns0:entry>
|
34
|
+
<ns0:title>data</ns0:title>
|
35
|
+
<ns0:id>https://localhost/services/data</ns0:id>
|
36
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
37
|
+
<ns0:link href="/services/data" rel="alternate" />
|
38
|
+
</ns0:entry>
|
39
|
+
<ns0:entry>
|
40
|
+
<ns0:title>deployment</ns0:title>
|
41
|
+
<ns0:id>https://localhost/services/deployment</ns0:id>
|
42
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
43
|
+
<ns0:link href="/services/deployment" rel="alternate" />
|
44
|
+
</ns0:entry>
|
45
|
+
<ns0:entry>
|
46
|
+
<ns0:title>licenser</ns0:title>
|
47
|
+
<ns0:id>https://localhost/services/licenser</ns0:id>
|
48
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
49
|
+
<ns0:link href="/services/licenser" rel="alternate" />
|
50
|
+
</ns0:entry>
|
51
|
+
<ns0:entry>
|
52
|
+
<ns0:title>messages</ns0:title>
|
53
|
+
<ns0:id>https://localhost/services/messages</ns0:id>
|
54
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
55
|
+
<ns0:link href="/services/messages" rel="alternate" />
|
56
|
+
</ns0:entry>
|
57
|
+
<ns0:entry>
|
58
|
+
<ns0:title>configs</ns0:title>
|
59
|
+
<ns0:id>https://localhost/services/configs</ns0:id>
|
60
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
61
|
+
<ns0:link href="/services/configs" rel="alternate" />
|
62
|
+
</ns0:entry>
|
63
|
+
<ns0:entry>
|
64
|
+
<ns0:title>saved</ns0:title>
|
65
|
+
<ns0:id>https://localhost/services/saved</ns0:id>
|
66
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
67
|
+
<ns0:link href="/services/saved" rel="alternate" />
|
68
|
+
</ns0:entry>
|
69
|
+
<ns0:entry>
|
70
|
+
<ns0:title>scheduled</ns0:title>
|
71
|
+
<ns0:id>https://localhost/services/scheduled</ns0:id>
|
72
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
73
|
+
<ns0:link href="/services/scheduled" rel="alternate" />
|
74
|
+
</ns0:entry>
|
75
|
+
<ns0:entry>
|
76
|
+
<ns0:title>search</ns0:title>
|
77
|
+
<ns0:id>https://localhost/services/search</ns0:id>
|
78
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
79
|
+
<ns0:link href="/services/search" rel="alternate" />
|
80
|
+
</ns0:entry>
|
81
|
+
<ns0:entry>
|
82
|
+
<ns0:title>server</ns0:title>
|
83
|
+
<ns0:id>https://localhost/services/server</ns0:id>
|
84
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
85
|
+
<ns0:link href="/services/server" rel="alternate" />
|
86
|
+
</ns0:entry>
|
87
|
+
<ns0:entry>
|
88
|
+
<ns0:title>streams</ns0:title>
|
89
|
+
<ns0:id>https://localhost/services/streams</ns0:id>
|
90
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
91
|
+
<ns0:link href="/services/streams" rel="alternate" />
|
92
|
+
</ns0:entry>
|
93
|
+
<ns0:entry>
|
94
|
+
<ns0:title>broker</ns0:title>
|
95
|
+
<ns0:id>https://localhost/services/broker</ns0:id>
|
96
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
97
|
+
<ns0:link href="/services/broker" rel="alternate" />
|
98
|
+
</ns0:entry>
|
99
|
+
<ns0:entry>
|
100
|
+
<ns0:title>clustering</ns0:title>
|
101
|
+
<ns0:id>https://localhost/services/clustering</ns0:id>
|
102
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
103
|
+
<ns0:link href="/services/clustering" rel="alternate" />
|
104
|
+
</ns0:entry>
|
105
|
+
<ns0:entry>
|
106
|
+
<ns0:title>masterlm</ns0:title>
|
107
|
+
<ns0:id>https://localhost/services/masterlm</ns0:id>
|
108
|
+
<ns0:updated>2011-07-01T16:52:51-07:00</ns0:updated>
|
109
|
+
<ns0:link href="/services/masterlm" rel="alternate" />
|
110
|
+
</ns0:entry>
|
111
|
+
</ns0:feed>
|
@@ -0,0 +1,71 @@
|
|
1
|
+
require_relative "test_helper"
|
2
|
+
require "splunk-sdk-ruby"
|
3
|
+
|
4
|
+
include Splunk
|
5
|
+
|
6
|
+
# URI's classes compare by object identity, which is exactly what we
|
7
|
+
# *don't* want to do. Instead we use simple textual identity.
|
8
|
+
module URI
|
9
|
+
class Generic
|
10
|
+
def ==(other)
|
11
|
+
return self.to_s == other.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class HTTPS
|
16
|
+
def ==(other)
|
17
|
+
return self.to_s == other.to_s
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class HTTP
|
22
|
+
def ==(other)
|
23
|
+
return self.to_s == other.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
class TestAtomFeed < Test::Unit::TestCase
|
29
|
+
# If Nokogiri is available, we'll test AtomFeed against both it
|
30
|
+
# and REXML. Otherwise, we'll print a warning and test only against
|
31
|
+
# REXML. REXML is part of the standard library in Ruby 1.9, so it will
|
32
|
+
# always be present.
|
33
|
+
if nokogiri_available?
|
34
|
+
xml_libraries = [:nokogiri, :rexml]
|
35
|
+
else
|
36
|
+
xml_libraries = [:rexml]
|
37
|
+
puts "Nokogiri not installed. Skipping."
|
38
|
+
end
|
39
|
+
|
40
|
+
test_cases = eval(open("test/atom_test_data.rb").read())
|
41
|
+
|
42
|
+
xml_libraries.each do |xml_library|
|
43
|
+
test_cases.each_entry do |filename, expected|
|
44
|
+
define_method("test_#{xml_library}_#{filename}".intern()) do
|
45
|
+
file = File.open("test/data/atom/#{filename}.xml")
|
46
|
+
feed = Splunk::AtomFeed.new(file)
|
47
|
+
|
48
|
+
# To make debugging easy, test the metadata a key at
|
49
|
+
# a time, since Test::Unit doesn't display diffs.
|
50
|
+
# Then test the whole thing at the end to make sure it all matches.
|
51
|
+
expected[:metadata].each_entry do |key, value|
|
52
|
+
assert_equal([filename, key, value],
|
53
|
+
[filename, key, feed.metadata[key]])
|
54
|
+
end
|
55
|
+
assert_equal(expected[:metadata], feed.metadata)
|
56
|
+
|
57
|
+
# To make debugging easy, test each key of each entry
|
58
|
+
# separately, since Test::Unit doesn't display diffs.
|
59
|
+
# Then test the whole thing at the end to make sure it all matches.
|
60
|
+
expected[:entries].each_with_index do |entry, index|
|
61
|
+
entry.each_entry do |key, value|
|
62
|
+
assert_equal([filename, index, key, value],
|
63
|
+
[filename, index, key, feed.entries[index][key]])
|
64
|
+
end
|
65
|
+
end
|
66
|
+
assert_equal(expected[:entries], feed.entries)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
@@ -0,0 +1,278 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
require 'splunk-sdk-ruby'
|
3
|
+
|
4
|
+
include Splunk
|
5
|
+
|
6
|
+
class TestCollection < TestCaseWithSplunkConnection
|
7
|
+
def teardown
|
8
|
+
c = Collection.new(@service, ["saved", "searches"])
|
9
|
+
c.delete_if() { |e| e.name.start_with?("delete-me") }
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_constructor
|
14
|
+
resource = [temporary_name(), temporary_name()]
|
15
|
+
c = Collection.new(@service, resource)
|
16
|
+
assert_equal(@service, c.service)
|
17
|
+
assert_equal(resource, c.resource)
|
18
|
+
assert_equal(Entity, c.entity_class)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_constructor_with_entity_class
|
22
|
+
resource = [temporary_name(), temporary_name()]
|
23
|
+
c = Collection.new(@service, resource, TestCollection)
|
24
|
+
assert_equal(@service, c.service)
|
25
|
+
assert_equal(resource, c.resource)
|
26
|
+
assert_equal(TestCollection, c.entity_class)
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_each_without_pagination
|
30
|
+
n_entities = 0
|
31
|
+
@service.apps.each(:count => 5) do |entity|
|
32
|
+
assert_true(entity.is_a?(Entity))
|
33
|
+
n_entities += 1
|
34
|
+
end
|
35
|
+
assert_true(n_entities <= 5)
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_each_with_offset_and_count
|
39
|
+
entities = []
|
40
|
+
@service.apps.each(:count => 5) do |entity|
|
41
|
+
entities << entity.name
|
42
|
+
end
|
43
|
+
|
44
|
+
entities_with_offset = []
|
45
|
+
@service.apps.each(:count => entities.length-1, :offset => 1) do |entity|
|
46
|
+
entities_with_offset << entity.name
|
47
|
+
end
|
48
|
+
|
49
|
+
assert_equal(entities[1..4], entities_with_offset)
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_each_with_pagination
|
53
|
+
total = 5 + rand(15)
|
54
|
+
page_size = 1 + rand(3)
|
55
|
+
|
56
|
+
entities = []
|
57
|
+
@service.apps.each(:count => total) do |entity|
|
58
|
+
entities << entity.name
|
59
|
+
end
|
60
|
+
|
61
|
+
entities_with_pagination = []
|
62
|
+
@service.apps.each(:count => total, :page_size => page_size) do |entity|
|
63
|
+
entities_with_pagination << entity.name
|
64
|
+
end
|
65
|
+
|
66
|
+
assert_equal(entities, entities_with_pagination)
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_has_key
|
70
|
+
c = @service.apps
|
71
|
+
@service.apps.each(:count => 3) do |entity|
|
72
|
+
assert_true(c.has_key?(entity.name))
|
73
|
+
assert_true(c.contains?(entity.name))
|
74
|
+
assert_true(c.include?(entity.name))
|
75
|
+
assert_true(c.key?(entity.name))
|
76
|
+
assert_true(c.member?(entity.name))
|
77
|
+
end
|
78
|
+
|
79
|
+
name = "nonexistant saved search"
|
80
|
+
assert_false(c.has_key?(name))
|
81
|
+
assert_false(c.contains?(name))
|
82
|
+
assert_false(c.include?(name))
|
83
|
+
assert_false(c.key?(name))
|
84
|
+
assert_false(c.member?(name))
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_create_and_delete
|
88
|
+
search_name = temporary_name()
|
89
|
+
search = "search index=_internal | head 10"
|
90
|
+
|
91
|
+
c = Collection.new(@service, ["saved", "searches"])
|
92
|
+
|
93
|
+
c.create(search_name, :search => search)
|
94
|
+
assert_true(c.has_key?(search_name))
|
95
|
+
|
96
|
+
assert_equal(search_name,
|
97
|
+
c.fetch(search_name).name)
|
98
|
+
assert_equal(search_name,
|
99
|
+
c[search_name].name)
|
100
|
+
|
101
|
+
c.delete(search_name)
|
102
|
+
assert_false(c.has_key?(search_name))
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_create_twice
|
106
|
+
search_name = temporary_name()
|
107
|
+
search = "search index=_internal | head 10"
|
108
|
+
|
109
|
+
c = Collection.new(@service, ["saved", "searches"])
|
110
|
+
|
111
|
+
c.create(search_name, :search => search)
|
112
|
+
assert_true(c.has_key?(search_name))
|
113
|
+
|
114
|
+
assert_raises(SplunkHTTPError) { c.create(search_name, :search => search) }
|
115
|
+
|
116
|
+
c.delete(search_name)
|
117
|
+
assert_false(c.has_key?(search_name))
|
118
|
+
end
|
119
|
+
|
120
|
+
def test_name_collisions
|
121
|
+
search_name = temporary_name()
|
122
|
+
search = "search * | head 5"
|
123
|
+
|
124
|
+
saved_searches = Collection.new(@service, ["saved", "searches"])
|
125
|
+
ss1 = saved_searches.create(search_name,
|
126
|
+
:search => search,
|
127
|
+
:namespace => Splunk::namespace(:sharing => "app",
|
128
|
+
:app => "search"))
|
129
|
+
ss2 = saved_searches.create(search_name, :search => search,
|
130
|
+
:namespace => Splunk::namespace(:sharing => "user",
|
131
|
+
:app => "search",
|
132
|
+
:owner => "admin"))
|
133
|
+
|
134
|
+
wildcard_service_args = @splunkrc.clone()
|
135
|
+
wildcard_service_args[:namespace] = Splunk::namespace(:sharing => "user",
|
136
|
+
:owner => "-",
|
137
|
+
:app => "-")
|
138
|
+
wildcard_service = Context.new(wildcard_service_args).login()
|
139
|
+
|
140
|
+
wildcard_saved_searches =
|
141
|
+
Collection.new(wildcard_service, ["saved", "searches"])
|
142
|
+
assert_true(wildcard_saved_searches.has_key?(search_name))
|
143
|
+
|
144
|
+
assert_raises(Splunk::AmbiguousEntityReference) do
|
145
|
+
wildcard_saved_searches.fetch(search_name)
|
146
|
+
end
|
147
|
+
|
148
|
+
assert_raises(Splunk::AmbiguousEntityReference) do
|
149
|
+
wildcard_saved_searches[search_name]
|
150
|
+
end
|
151
|
+
|
152
|
+
assert_equal(search_name,
|
153
|
+
wildcard_saved_searches.fetch(
|
154
|
+
search_name,
|
155
|
+
Splunk::namespace(:sharing => "app",
|
156
|
+
:app => "search")).name)
|
157
|
+
assert_equal(search_name,
|
158
|
+
wildcard_saved_searches.fetch(
|
159
|
+
search_name,
|
160
|
+
Splunk::namespace(:sharing => "user",
|
161
|
+
:app => "search",
|
162
|
+
:owner => "admin")).name)
|
163
|
+
|
164
|
+
assert_raises(StandardError) do
|
165
|
+
wildcard_saved_searches.delete(search_name)
|
166
|
+
end
|
167
|
+
|
168
|
+
# The order here is important. The app/search namespace
|
169
|
+
# will delete both of the saved searches; user/search/admin
|
170
|
+
# will only delete that particular one.
|
171
|
+
wildcard_saved_searches.delete(search_name,
|
172
|
+
namespace=Splunk::namespace(:sharing => "user",
|
173
|
+
:app => "search",
|
174
|
+
:owner => "admin"))
|
175
|
+
assert_true(wildcard_saved_searches.has_key?(search_name))
|
176
|
+
wildcard_saved_searches.delete(search_name,
|
177
|
+
namespace=Splunk::namespace(:sharing => "app", :app => "search"))
|
178
|
+
|
179
|
+
assert_false(wildcard_saved_searches.has_key?(search_name))
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_values
|
183
|
+
es = @service.apps.values(:count => 3)
|
184
|
+
assert_true(es.length <= 3)
|
185
|
+
es.each do |entity|
|
186
|
+
assert_true(entity.is_a?(Entity))
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_each_equivales_values
|
191
|
+
assert_equal(
|
192
|
+
@service.apps.each().to_a().map() { |e| e.name },
|
193
|
+
@service.apps.values.map() { |e| e.name }
|
194
|
+
)
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_length
|
198
|
+
c = @service.apps
|
199
|
+
assert_equal(c.values().length(), c.length())
|
200
|
+
assert_equal(c.values().length(), c.size())
|
201
|
+
end
|
202
|
+
|
203
|
+
|
204
|
+
def test_select
|
205
|
+
a = @service.apps.select() { |e| e.name == "search" }.to_a
|
206
|
+
assert_equal(1, a.length)
|
207
|
+
assert_equal("search", a[0].name)
|
208
|
+
end
|
209
|
+
|
210
|
+
def test_reject
|
211
|
+
a = @service.apps.reject() { |e| e.name != "search" }.to_a
|
212
|
+
assert_equal(1, a.length)
|
213
|
+
assert_equal("search", a[0].name)
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_fetch_nonexistant
|
217
|
+
assert_nil(@service.apps.fetch("this does not exist"))
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_assoc
|
221
|
+
name, entity = @service.apps.assoc("search")
|
222
|
+
assert_equal("search", name)
|
223
|
+
assert_equal("search", entity.name)
|
224
|
+
|
225
|
+
assert_nil(@service.apps.assoc("this does not exist"))
|
226
|
+
end
|
227
|
+
|
228
|
+
def test_keys
|
229
|
+
keys = @service.apps.keys()
|
230
|
+
assert_equal(@service.apps.values().map() { |e| e.name },
|
231
|
+
keys)
|
232
|
+
end
|
233
|
+
|
234
|
+
def test_each_key
|
235
|
+
assert_equal(@service.apps.keys(), @service.apps.each_key.to_a)
|
236
|
+
end
|
237
|
+
|
238
|
+
def test_each_pair
|
239
|
+
keys = []
|
240
|
+
@service.apps.each_pair do |key, value|
|
241
|
+
assert_equal(key, value.name)
|
242
|
+
keys << key
|
243
|
+
end
|
244
|
+
assert_equal(@service.apps.keys(), keys)
|
245
|
+
end
|
246
|
+
|
247
|
+
def test_each_value
|
248
|
+
keys = []
|
249
|
+
@service.apps.each_value do |value|
|
250
|
+
keys << value.name
|
251
|
+
end
|
252
|
+
assert_equal(@service.apps.keys(), keys)
|
253
|
+
end
|
254
|
+
|
255
|
+
def test_empty
|
256
|
+
assert_false(@service.apps.empty?)
|
257
|
+
end
|
258
|
+
|
259
|
+
def test_delete_if
|
260
|
+
c = Collection.new(@service, ["saved", "searches"])
|
261
|
+
|
262
|
+
c.create(temporary_name(), :search => "search *")
|
263
|
+
c.create(temporary_name(), :search => "search *")
|
264
|
+
c.create(temporary_name(), :search => "search *")
|
265
|
+
assert_equal(
|
266
|
+
3,
|
267
|
+
c.select() { |e| e.name.start_with?("delete-me") }.to_a.length()
|
268
|
+
)
|
269
|
+
|
270
|
+
c.delete_if() { |e| e.name.start_with?("delete-me") }
|
271
|
+
|
272
|
+
assert_equal(
|
273
|
+
0,
|
274
|
+
c.select() { |e| e.name.start_with?("delete-me") }.to_a.length()
|
275
|
+
)
|
276
|
+
end
|
277
|
+
|
278
|
+
end
|