forked from logstash-plugins/logstash-input-snmp
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsnmp_spec.rb
128 lines (113 loc) · 4.82 KB
/
snmp_spec.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# encoding: utf-8
require "logstash/devutils/rspec/spec_helper"
require "logstash/inputs/snmp"
describe LogStash::Inputs::Snmp do
let(:mock_client) { double("LogStash::SnmpClient") }
it_behaves_like "an interruptible input plugin" do
let(:config) {{
"get" => ["1.3.6.1.2.1.1.1.0"],
"hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}]
}}
before do
expect(LogStash::SnmpClient).to receive(:new).and_return(mock_client)
expect(mock_client).to receive(:get).and_return({})
end
end
context "OIDs options validation" do
let(:valid_configs) {
[
{"get" => ["1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => [".1.3.6.1.2.1.1.1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => ["1.3.6.1.2.1.1.1.0", "1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => ["1.3.6.1.2.1.1.1.0", ".1.3.6.1.2.1.1"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
]
}
let(:invalid_configs) {
[
{"get" => ["1.3.6.1.2.1.1.1.a"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => ["test"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => [], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => "foo", "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
]
}
it "validates get oids" do
valid_configs.each do |config|
expect{ described_class.new(config).register }.not_to raise_error
end
invalid_configs.each do |config|
expect{ described_class.new(config).register }.to raise_error(LogStash::ConfigurationError)
end
end
end
context "hosts options validation" do
let(:valid_configs) {
[
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:localhost/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/112345"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161", "community" => "public"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/112345"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "tcp:127.0.0.1/161", "community" => "public"}]},
]
}
let(:invalid_configs) {
[
{"get" => ["1.0"], "hosts" => [{"host" => "aaa:127.0.0.1/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "tcp.127.0.0.1/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "localhost"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "localhost/161"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/aaa"}]},
{"get" => ["1.0"], "hosts" => [{"host" => "udp:127.0.0.1/161"}, {"host" => "udp:127.0.0.1/aaa"}]},
{"get" => ["1.0"], "hosts" => ""},
{"get" => ["1.0"], "hosts" => []},
{"get" => ["1.0"] },
]
}
it "validates hosts" do
valid_configs.each do |config|
expect{ described_class.new(config).register }.not_to raise_error
end
invalid_configs.each do |config|
expect{ described_class.new(config).register }.to raise_error(LogStash::ConfigurationError)
end
end
end
context "@metadata" do
before do
expect(LogStash::SnmpClient).to receive(:new).and_return(mock_client)
expect(mock_client).to receive(:get).and_return({"foo" => "bar"})
end
it "shoud add @metadata fields and add default host field" do
config = <<-CONFIG
input {
snmp {
get => ["1.3.6.1.2.1.1.1.0"]
hosts => [{host => "udp:127.0.0.1/161" community => "public"}]
}
}
CONFIG
event = input(config) { |_, queue| queue.pop }
expect(event.get("[@metadata][host_protocol]")).to eq("udp")
expect(event.get("[@metadata][host_address]")).to eq("127.0.0.1")
expect(event.get("[@metadata][host_port]")).to eq("161")
expect(event.get("[@metadata][host_community]")).to eq("public")
expect(event.get("host")).to eq("127.0.0.1")
end
it "shoud add custom host field" do
config = <<-CONFIG
input {
snmp {
get => ["1.3.6.1.2.1.1.1.0"]
hosts => [{host => "udp:127.0.0.1/161" community => "public"}]
add_field => { host => "%{[@metadata][host_protocol]}:%{[@metadata][host_address]}/%{[@metadata][host_port]},%{[@metadata][host_community]}" }
}
}
CONFIG
event = input(config) { |_, queue| queue.pop }
expect(event.get("host")).to eq("udp:127.0.0.1/161,public")
end
end
end